機械学習の理論を理解せずに tensorflow で オセロ AI を作ってみた 〜いざ対戦編〜


シリーズ目次

前回の続き...
この分野では門外漢の私が、「機械学習の理論」をまったく勉強せずに
オセロのAI を作ってみようと思います。

準備

対戦相手は、友人の作ったこちら
PHP Reversi

まず、対戦相手のサイトを開き、プレイヤー白(後手を選択)

用意したAIを起動

$ python FightWithAI.py

------------- GAME START ---------------
*** userターン○ ***
  0  1  2  3  4  5  6  7
  8  9 10 11 12 13 14 15
 16 17 18 19 20 21 22 23
 24 25 26 ○ ● 29 30 31
 32 33 34 ● ○ 37 38 39
 40 41 42 43 44 45 46 47
 48 49 50 51 52 53 54 55
 56 57 58 59 60 61 62 63
番号を入力してください
[44, 37, 26, 19]

>>>

AIの指示を私が入力します。

いざ対戦

先手(対戦相手)19番

後手(AI)18番

*** AIターン● ***
  0  1  2  3  4  5  6  7
  8  9 10 11 12 13 14 15
 16 17 18 ● 20 21 22 23
 24 25 26 ● ● 29 30 31
 32 33 34 ● ○ 37 38 39
 40 41 42 43 44 45 46 47
 48 49 50 51 52 53 54 55
 56 57 58 59 60 61 62 63
番号を入力してください
[44, 37, 26, 19]

>>> 18

先手(対戦相手)26番

後手(AI)34番

先手(対戦相手)42番

後手(AI)44番

先手(対戦相手)43番

後手(AI)12番

先手(対戦相手)29番

後手(AI)37番

先手(対戦相手)21番

後手(AI)22番

先手(対戦相手)23番

後手(AI)15番

先手(対戦相手)7番

後手(AI)41番

先手(対戦相手)3番

後手(AI)14番

先手(対戦相手)5番

後手(AI)6番

先手(対戦相手)20番

後手(AI)4番

先手(対戦相手)45番

後手(AI)46番

先手(対戦相手)11番

後手(AI)2番

先手(対戦相手)1番

後手(AI)13番

先手(対戦相手)17番

後手(AI)31番

先手(対戦相手)39番

後手(AI)16番

先手(対戦相手)25番

後手(AI)24番

先手(対戦相手)32番

後手(AI)33番

先手(対戦相手)8番

後手(AI)9番

先手(対戦相手)0番

後手(AI)10番

先手(対戦相手)40番

後手(AI)パス

先手(対戦相手)47番

後手(AI)49番

先手(対戦相手)56番

後手(AI)53番

先手(対戦相手)48番

後手(AI)57番

先手(対戦相手)58番

後手(AI)55番

先手(対戦相手)63番

後手(AI)52番

先手(対戦相手)62番

後手(AI)61番

先手(対戦相手)54番

後手(AI)38番

先手(対戦相手)59番

後手(AI)30番

先手(対戦相手)60番

後手(AI)51番

先手(対戦相手)50番

結果

えー完敗です orz
というか、四つ角全て取らせる 最弱の AI を 1ヶ月かけて作ってしまいました

訓練終盤でも Q_MAX が 0.023 とか小さすぎ だったから変だなぁ~と思ってたんだけどね
普通 訓練終盤 なら ログが こんな感じで Q_MAX が 1に近いはずだよね

player:1 | pos:32 | LOSS: 0.0014 | Q_MAX: 0.9423
player:2 | pos:15 | LOSS: 0.0020 | Q_MAX: 0.9335
…

接待 AI ができています

リベンジ

次回 tensorflow から chainer に変えて リベンジです。

どうやら tensorflow では使えない optimizers.RMSpropGraves が効いているのか
今のところうまく学習できています。(執筆時点では、まだ強くないですが)

どなたか詳しい方、ご教示をお願いいたします。
m(_ _)m