2018年下期を目標に、九州大学伊都キャンパス内における自動運転バスのサービスインの実現が目指されています。2017年2月時点で、九州大学、NTTドコモ、DeNA、福岡市が実証実験を行っています。今後の展開として、AIを用いて、人がいつどこに移動したいかを先読みして、最適ルートでバスを運行するという試みがあります。(参考:自動運転バス プレスリリース)
九州大学の学生の皆さんは、自動運転バスの恩恵を受けることになるかもしれません。今後の動向にも注目してみてください。
では、実際に遺伝的アルゴリズムを使って問題を解く、その流れを見てみましょう。今回は、
「0」と「1」の数字で構成された6桁の数列があります。数字が「1」なら1点、「0」なら0点とすると、点数が一番高くなる数列はどんな数列で、何点になるでしょう?
という問題について考えます。数列・点数の例を挙げると、「001000」 が1点、「011101」が4点、「000000」が0点になります。
もう考えるまでもなく全部「1」の数列「111111」が6点で最高になるのは分かりますが、実際に使う例としてはこのぐらい簡単なのが分かりやすいと思います。
それでは実際にやってみましょう。今回は簡単のため(※)突然変異なしで考えてみます!
※「簡単のため」は工学系でよく使われる表現です。
今回の問題は、次の4組で解いていきます。
①011110(4点)、②110100(3点)、③010101(3点)、④101000(2点)
これらは乱数でテキトーに選んだものです(初期配列決定)。この世代の平均値は3点であることが分かりますね。
次は交叉です。
①と②、③と④でそれぞれ交叉します。「/」が区切りの位置です。
その結果⑤~⑧の個体が新しくできました。
① 0 / 11110 → ⑤ 010100
② 1 / 10100 → ⑥ 111110
③ 010 / 101 → ⑦ 010000
④ 101 / 000 → ⑧ 101101
交叉するところはランダムに決めました。
今回は簡単のため突然変異がありません。
次に①~⑧までの個体を評価します。今回の問題では「1」の数が多いほど良い個体であると考えられます。
結果は次のようになりました。
① 011110 : 4点 ⑤ 010100 : 2点
② 110100 : 3点 ⑥ 111110 : 5点
③ 010101 : 3点 ⑦ 010000 : 1点
④ 101000 : 2点 ⑧ 101101 : 4点
交叉で個体数が8に増えたので、元の個体数4になるまで淘汰します。今回は単純にトーナメント方式のみを使って淘汰します。
トーナメント方式では、評価が高い個体が勝ち残り、評価の低い個体が淘汰されます。
トーナメントを以下のようにランダム作成しました。
⑥対④、②対①、⑤対⑧、③対⑦
今回の結果を見ると、以下の個体が残ります。
⑥ 111110 : 5点
① 011110 : 4点
⑧ 101101 : 4点
③ 010101 : 3点
今回は「0」と「1」の数字で構成された6桁の数列の中で、点数が一番高くなる数列はどんな数列かを見つけるという例題でした。
「111111」が6点で点数が一番高いことはすぐに分かるため、終了条件を「一番高い個体の点数が6点になった時」と設定することにします。(一番高い点数を知らないことにするなら、終了条件を「100回繰り返した時」とすることもできます。)
現時点で最も高いのは⑥111110で5点なので(終了条件が「100繰り返した時」なら、まだ1回しか行っていないので)終了とはならず、この世代を基に上記の手順を繰り返していきます。残った個体に着目すると平均値は4点であり、初期の個体と比べて平均値が3点から4点に上がっているのが分かると思います。
このようにして、世代が変わるごとにどんどん求める解に近づいていくのが遺伝的アルゴリズムの流れになります。