目次
- オセロAI導入
- モンテカルロ木
- 実験結果
導入
オセロAIを作ってみましょう
モンテカルロ木
あたりに説明があります。
選択において、UCBとepsilon-greedyの両方を実装します。
シミュレーションについて、今回はシミュレーションをせず、盤面の評価値の計算で代用をします。盤面の評価はこちらのブログに乗っている物を用いました。
オセロ環境について、本記事のコードは、Google DeepMindが公開している OpenSpiel (Apache License 2.0) を使用しています。
コーディングにあたって、使う API のドキュメントは一度読むと良いです。老婆心から1つ注意点を述べておきますと、self.state.observation_tensor() はよく読んだ方が良いです。最初、この関数は [空きマス, 黒が置いたマス, 白が置いたマス] を返すものと思い込んでいたのですが、正確には [空きマス, 今手番のプレイヤーが置いたマス, もう一方のプレイヤーが置いたマス] であるようです。
実装について、OpenSpielはC++及びpythonで利用できるそうですが……pythonで実装しました。C++での利用方法が良くわからなかったので。
実験結果
伊抜きちゃんがあんまり深く考えずにやったら普通に負けてしまいました。良い感じなのではないでしょうか。伊抜きちゃん(ガチ)と伊抜きちゃん(ゆるふわ)の性能は対して変わらないと思いますので。
追記: パラメーター調整後、思考時間=1.0に勝つことが難しくなったと思います。少なくとも、伊抜きちゃんは未だに勝利をあげていません。思考時間=0.1でも同様です。思考時間=0.001には楽に勝てる事を確認しているのですが、むむむ。
ただ。思考時間0.5秒が0.001秒に負ける事がたまにあります。AGIちゃんには程遠い感じです。
UCBとepsilon-greedyについて、あんまり強さの差がないです。
特にUCBについて。右辺のルートかかる所(区間の幅の方)に定数かけるじゃないですか。理論的には定まるんですが、実用上手で調整するというやつ。アレ小さい方が良いですね。大きいとランダム探索に近くなってしまうのでしょうか。
興味がある方はworksから遊べますので、ぜひAGIチャレンジしてみてください!
終わりに
ついに伊吹ちゃんうぇぶぺぇじに遊べる要素ができました。嬉しいですね。
サーバーに負荷がかかっている状態だと性能が落ちます。探索反復数がその指標になります。所詮デモですので、温かい目で見守ってください。
伊抜きちゃん、webのことそんなにわかりません。pythonがそのまま動かないらしくてびっくりしてしまいました。もう、コードをgithubで公開すれば良いのかなとも思いましたが……誰も遊んでくれないと寂しいので。
そういうのはガチなやつだけでいいかな。
では。