遺伝的アルゴリズムについて

はじめに

この記事は、SLP_KBIT Advent Calendar 2016 の22日目の記事です。

情報環境実験Ⅱという魔の授業でポーカーのAI(AIではないけど...)を作る課題が今現在あるので、「あ、オセロのAI作ったら面白くね?」と思い作成しようとしてみました。

AIの種類について

AIと一口に言っても様々にあります。主に分けると下の5つになりますね。

  1. 言語を扱うAI (人工知能「りんな」とか)
  2. 画像を扱うAI (白黒写真をカラーにするとか)
  3. 音声を扱うAI (Google のゼロから音楽を創造するとか)
  4. 制御を扱うAI (自動運転自動車の開発とか)
  5. 最適化や推論を扱うAI (AlphaGOとか)

さて、今回オセロのAIを作ろうと考えました。皆さん、どの手法を使うかわかりますね?

 

そう!!!!

 

5 の最適化や推論を扱うAIを用いてやっていこうと思います!

その中の遺伝的アルゴリズムを使いたいです(願望)

 

遺伝的アルゴリズム

 

では、そもそも遺伝的アルゴリズムとは何か?

「遺伝」だから人間を作っていくのか?

それとも優秀な子どもを作っていくのか?

ん?(意味深)

そう!!

   遺伝的アルゴリズム=優秀な子どもを作る

アルゴリズムなのです!!!

つまり、言い換えれば品種改良ですね。それをオセロのAIでもやっていこうってことです。

では、どうやって作っていくか、具体的に見ていきましょう。

 

子どもの作り方

タイトルだけ見るといやらしいですね。でも、仕方ないね。

では、パパッと出していきますね。ただ、今回のアルゴリズム手法の流れは大まかに書いており、またこれだけが正しい方法ではないので注意してください。

  1. あらかじめ N個の個体を用意する。
  2. その個体同士を戦わせる。
  3. 勝敗で交叉のさせ方を決める。
  4. 交叉させてできた子ども(次世代)と(一部の)親世代を戦わせる。

※交叉…個体の一部の遺伝子を入れ換えること

大まかな流れはこんな感じです。ね、簡単でしょう?

 しかし、この交叉のさせ方や、一部の親世代の選び方など様々な悩みの種が残っています。そう簡単にはできないわけですよ。

とりあえずオセロ作ってみた

JS(JavaScript)を使って、オセロを作ってみました。ついでに、AIっぽいものも搭載してみました。AIは、単に「置けるところに置く」だけのAIなので、弱いはず...。AIの中身はこんな感じ。

f:id:SilverFIR:20161221142013p:plain

で、肝心のオセロがこんな感じで実装。

f:id:SilverFIR:20161221142019p:plain

黒が自分の手なので、ボロ勝ちできるできるはず。

f:id:SilverFIR:20161221142040p:plain

汚いソースコードですが、良かったら使ってください。

あれ、ここまで遺伝的アルゴリズムの要素全然無いじゃんと思った方。。。

実は完成しませんでした

面目ない...

最後に

ここまで長々と書きましたが、AIは結構奥深いものなのです。今回皆さんに「あ、AIってこんな簡単にできるのもあるんだ」と思っていただければ幸いだと思います。

さ~て、今からレポート書かなきゃな(汗)

では、次の方どうぞオネガイシマス!