Start_python’s diary

ふたり暮らし

アラフィフ夫婦のフリーランスプラン

簡単な人工知能を作ってみる(AIプログラミング 第1回)

AIとは?

AI(エーアイ)とは人工知能のことです。Artificial Intelligence(人工的な知能)です。
『「言語の理解や推論、問題解決などの知的行動を人間に代わってコンピューターに行わせる技術」、または、「計算機(コンピュータ)による知的な情報処理システムの設計や実現に関する研究分野」ともされる。』==Wikipediaより引用==

 

AIの定義

実はまだ専門家の間でも定まっていないらしいです。「知能を持つ機械」とも言われますし、「知能の定義が明確でないので、人工知能も定義できない」という意見もあります。
その中で「考える機械」ってのが一番しっくりきました。画像認識、音声認識、自動運転やAI将棋などは人工知能になると思います。電卓や翻訳機のような機械はちょっと人工知能とは違うような気がします。

 

簡単なAIを作ってみる

「考えるマッチ箱」という面白い記事を見つけました。「三目並べ(3×3の〇×ゲームです)」をコンピュータを使わずに機械学習をさせる方法です。

今回、三目並べを後攻で負けないように学習させてみたいと思います。(先手を〇、後手を×にします)

 

学習手順

まず、「マッチ箱」と「9色のビーズ(同じマスの場所には同じ色のビーズが対応します)」を大量に用意します。

MENACE

shorttermmemoryloss.com

こちらのサイトを見るとイメージしやすいかもしれません。

 

準備ができたらゲームを始めます。人間が先手、マッチ箱が後手とします。

 

1.先手が打ったら2手目を考えるマッチ箱を1つ作ります。そのマッチ箱の中に9色のビーズのうち、すでに〇か✖がある場所の色のビーズを抜いて、残りのビーズを入れます。(2回目以降でこの盤面のマッチ箱があればそっちのマッチ箱を使います)

例:
・┃・┃・
━✚━✚━
・┃┃・
━✚━✚━
・┃・┃・

 

この場合、マッチ箱の中に真ん中の色を抜いた8色のビーズが入ります。

 

2.マッチ箱からランダムに1つのビーズを取り出し、その色に対応した場所に✖を打ちます。取り出したビーズは元のマッチ箱に戻します。

例:
┃・┃・
━✚━✚━
・┃〇┃・
━✚━✚━
・┃・┃・

 

3.3手目を先手が打ったら4手目を考えるマッチ箱を1つ作ります。そのマッチ箱の中に9色のビーズのうち、すでに〇か×がある場所の色のビーズを抜いて、残りのビーズを入れます。(2回目以降でこの盤面のマッチ箱があればそっちのマッチ箱を使います)

例:
✖┃┃・
━✚━✚━
・┃〇┃・
━✚━✚━
・┃・┃・

この場合、マッチ箱の中に〇✖の3つの場所の色を抜いた6色のビーズが入ります。

 

4.マッチ箱からランダムに1つのビーズを取り出し、その色に対応した場所に✖を打ちます。取り出したビーズは元のマッチ箱に戻します。

例:
✖┃〇┃・
━✚━✚━
・┃〇┃・
━✚━✚━
・┃・┃

 ランダムなのでここではマッチ箱側は適当に打ちます。

 

5.5手目を先手が打ったら勝負がついたかどうか(先手〇が一列に並んだかどうか)を判断します。
勝負がついてない場合は6手目を考えるマッチ箱を1つ作ります。そのマッチ箱の中に9色のビーズのうち、すでに〇か×がある場所の色のビーズを抜いて、残りのビーズを入れます。

例:
✖┃〇┃・
━✚━✚━
・┃〇┃・
━✚━✚━
・┃┃✖

もし勝負がついたら「4」のマッチ箱から取り出した色のビーズを捨てます。そして「1」からやり直します。※こうすることで次回4手目に同じ盤面がきた時、負けた手を打たなくなります。

 

6.勝負がつくまで同じようにマッチ箱がなければ新しいマッチ箱を作りながら進めていきます。勝負がつくか9手目で引き分けになれば「1」に戻ります。
これを何度も繰り返すと負ける度にマッチ箱の中のビーズが減っていきます。(マッチ箱は盤面の数だけ増えていきます)

 

7.どんどんビーズを捨てていくと、ビーズが入っていないマッチ箱が出てきます。その場合はその直前の手のビーズを捨てます。

例:
✖┃・┃・
━✚━✚━
・┃〇┃
━✚━✚━
・┃✖┃〇

この場合、次の6手目は、どこに✖を打っても負けます。その前の4手目の「✖」がダメだったので4手目のビーズを捨てます。

例:

✖┃・┃・
━✚━✚━
・┃〇┃・
━✚━✚━
・┃┃〇

次回からこの盤面では下の「」は打たなくなります。

 

これを何千回、何万回繰り返すことで絶対負けないマッチ箱が完成するはずです。

 

後手限定の勝った時に報酬を与えない方法ですが、次回は実際にPythonを使ってプログラミングしてみたいと思います。

 

 

こちらのサイトを参考にさせていただきました。

www.wizforest.com