四目並べ5『遺伝的アルゴリズムとあとがき』

四目並べの完成からだいぶ時間があいてしまいましたが、そろそろブログの内容を完結させとかなきゃと思ったので、あとがきみたいなのを残しときます。

ちなみに完成品はこちら

AI量産するのに遺伝的アルゴリズム使ったとか、RTMFPっていうのを使ってオンライン対戦できるようにしたとか、まだ書くつもりだった話はあったんですが、間が空きすぎたのと、完成品の人気が出なかったのと、モチベーションの問題で四目並べのログとしては詳しくは書かないです。

とはいえ全部お蔵入りさせるのももったいないので、遺伝的アルゴリズムについては最後に少しだけ書いときます。

1,遺伝的アルゴリズムとAI

遺伝的アルゴリズムっていうのは簡単に言うと、生物の進化の仕組みをプログラムで使う手法です。

むにむにさんという人が作ってる動画が分かりやすいので、それをみるといいと思います。

ニコニコ動画版:http://www.nicovideo.jp/watch/sm16212939

どうボードゲームに応用するかは、オセロを遺伝的アルゴリズムで学習させたやつがあるので詳しくみたい人はこっちを見てください。

四目並べでもやってることはだいたい同じです。上の四目並べの完成版では進化の度合いが違うAIを40コ用意して、総当たりで対戦させてそれぞれレベルを割り当てました。

あと、このオセロAI最後まで進化させても弱いじゃんって話が出てますが、先読みアルゴリズムが四目並べの前の記事で使ってるやつの方がだいぶ優秀です。合わせて使えば、オセロでももっと強いAIができるはずです。

2, 遺伝的アルゴリズムはとっても楽ちん

遺伝的アルゴリズムが役に立つタイミングの1つは、「評価値のバランス調整」です。

四目並べ2 『どっちが勝ってる?』では、5つの要素に点数を割り振りました。5つなら、点をつけるのはさほど大変ではないですが、要素の数が50コとかだったら大変です。経験のよくある人なら勘で割り振っても良いAIが作れるかもしれませんが、たいていの人はそうじゃありません。そうでない人におすすめなのが遺伝的アルゴリズムです。どの要素に何点を割り振るかをランダムに変化させていき、AIを強化します。

遺伝的アルゴリズムっていうと難そうに聞こえますが考え方は非常に簡単です。

■自然淘汰
「優秀なAIほどたくさん子供を残すことができる」

■遺伝
「子は親に似た手を打つ」

■変異
「子の打つ手は親と似てるんだけど、まったく同じじゃない」

っていう3つの要素があれば学習アルゴリズムとして機能します。
学習アルゴリズムとしては非常にお手軽で、効果的な部類だと思います。

3, 遺伝的アルゴリズムさえ使えば強いAIが作れるのか?

とうぜんNOです。
オセロのAIでもそうでしたが、先読みのアルゴリズムや評価関数の質によって、頭打ちになる強さが決まってきます。評価する要素が適切でなかったりすると遺伝的アルゴリズムがまるで機能しなかったりします。

ですが、自分の作ったAIをもうひと押し強くしたい場合は非常に有効ですし、遺伝的アルゴリズムを使うことには強さ以外の大きなメリットがあります。

それは、「AIの多様性」です。

学習アルゴリズムなしでAIを作った場合、読む手数の長さなどでAIの強さは変えられても打ち回しを変えるのには手間がかかります。一方で学習アルゴリズムを使った場合、学習の度合いによってレベルを割り振れば簡単に打ち回しが変わります。とくに遺伝的アルゴリズムでは同じレベルでも学習させる度に打ち回しが違ったりするので、多様なAIを簡単に作ることができます。

4, あとがき

では、最後に四目並べの反省みたいなのを。

当初の目標は『楽してそこそこ強いAIを作る!』でしたが、
これに関してはおおむね達成できたかなと思います。

強さ的には四目並べを楽しむには十分な強さのAIができたと思います。
楽してについては、もうちょっと楽に作りたかったですね。
ただ、他のボードゲームでも応用できるような作り方ができたので、
また別のゲームを作るときにもっと楽にできるだろうということで、
なかなかいい経験を積めたと思います。

で、今回の四目並べで一番失敗したなーと思ったのがオンライン対戦機能。
過疎すぎて、ほとんど機能しませんでした。

こういうのはもっと人を集められるようになってからじゃなきゃだめですね。

もっと面白いゲーム考えてリベンジしたいなーとは思いました。
思っただけなので、実現するかはわかりませんが。

とりあえず、四目並べ制作はここまで。

ではでは。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です