遺伝的アルゴリズムについて
はじめに
この記事は、SLP_KBIT Advent Calendar 2016 の22日目の記事です。
情報環境実験Ⅱという魔の授業でポーカーのAI(AIではないけど...)を作る課題が今現在あるので、「あ、オセロのAI作ったら面白くね?」と思い作成しようとしてみました。
AIの種類について
AIと一口に言っても様々にあります。主に分けると下の5つになりますね。
- 言語を扱うAI (人工知能「りんな」とか)
- 画像を扱うAI (白黒写真をカラーにするとか)
- 音声を扱うAI (Google のゼロから音楽を創造するとか)
- 制御を扱うAI (自動運転自動車の開発とか)
- 最適化や推論を扱うAI (AlphaGOとか)
さて、今回オセロのAIを作ろうと考えました。皆さん、どの手法を使うかわかりますね?
そう!!!!
5 の最適化や推論を扱うAIを用いてやっていこうと思います!
その中の遺伝的アルゴリズムを使いたいです(願望)
では、そもそも遺伝的アルゴリズムとは何か?
「遺伝」だから人間を作っていくのか?
それとも優秀な子どもを作っていくのか?
ん?(意味深)
そう!!
遺伝的アルゴリズム=優秀な子どもを作る
アルゴリズムなのです!!!
つまり、言い換えれば品種改良ですね。それをオセロのAIでもやっていこうってことです。
では、どうやって作っていくか、具体的に見ていきましょう。
子どもの作り方
タイトルだけ見るといやらしいですね。でも、仕方ないね。
では、パパッと出していきますね。ただ、今回のアルゴリズム手法の流れは大まかに書いており、またこれだけが正しい方法ではないので注意してください。
- あらかじめ N個の個体を用意する。
- その個体同士を戦わせる。
- 勝敗で交叉のさせ方を決める。
- 交叉させてできた子ども(次世代)と(一部の)親世代を戦わせる。
※交叉…個体の一部の遺伝子を入れ換えること
大まかな流れはこんな感じです。ね、簡単でしょう?
しかし、この交叉のさせ方や、一部の親世代の選び方など様々な悩みの種が残っています。そう簡単にはできないわけですよ。
とりあえずオセロ作ってみた
JS(JavaScript)を使って、オセロを作ってみました。ついでに、AIっぽいものも搭載してみました。AIは、単に「置けるところに置く」だけのAIなので、弱いはず...。AIの中身はこんな感じ。
で、肝心のオセロがこんな感じで実装。
黒が自分の手なので、ボロ勝ちできるできるはず。
汚いソースコードですが、良かったら使ってください。
あれ、ここまで遺伝的アルゴリズムの要素全然無いじゃんと思った方。。。
実は完成しませんでした
面目ない...
最後に
ここまで長々と書きましたが、AIは結構奥深いものなのです。今回皆さんに「あ、AIってこんな簡単にできるのもあるんだ」と思っていただければ幸いだと思います。
さ~て、今からレポート書かなきゃな(汗)
では、次の方どうぞオネガイシマス!