GA将?開発日記~王理のその先へ~

ネタ勢最強を目指して絶賛開発中。

探査自体を強化学習問題として解く論文(多分)

強化学習による探索行動の学習

 強化学習における探査*1を、ε-GreedyやSoftmaxの様な乱数を用いる手法ではなく、過去の経験・知識をもとに実現した論文(だと思う)。

 論文ではグリッドワールドや迷路を題材にし、意図した通りの結果が実験的に得られたと書かれている。

 論文の手法をそのままGA将?に適用するのは難しそうだが、考え方自体は非常に面白いので、なんとかして真似てみようと思う。

*1:論文では「探索」と記載されているが、αβ探索との混同を避ける為、本記事では「探査」で統一する

PGLeaf Vierはひとまず白紙撤回

 Replay Buffer使うとなんか学習が不安定になるし、私は無理してReplay Buffer使いたい訳ではないので、プラン再考中。

 んで、今後どうするかなぁ…

 とりあえず「自己対局時のランダム性が不足しているらしい」というのは分かってるんで、そこを何とかしないといけないんですが、単純に温度上げるとそれはそれで悪影響出てくるし…

 やっぱ、REINFORCEベースじゃなくて、報酬の予測値を学習する関数近似器を導入するのが手っ取り早い?

PGLeaf Vier開発開始

medium.com

 Experience Replayを使いたかったので、上記のサイトを参考に実装。

 現時点での構成は「REINFORCEベースのPGLeaf+Experience Replay+重点サンプリング」ですが、最終的にはもっと色々拡張する予定。

強化学習 (機械学習プロフェッショナルシリーズ)

強化学習 (機械学習プロフェッショナルシリーズ)

 んで、今日買ってきたMLPシリーズの「強化学習」に、関数近似を用いた方策勾配法の初見の手法が載っていたので、次はそれを実装する予定。

 現在は三目並べモードでデータ収集中なんで、それが終わってから(多分2時間後)改良しますかね。

 …あ、その前に不要なコードとかの整頓しとかないと、スパゲッティコードになっちゃう。

5五将棋用連続対局サーバの機能追加、ほぼ完了

 えー、まず以前の記事の訂正から。

 「Winboard」がShokidoki/Limaの使用しているプロトコル名だと思ってましたが、正式には「xboard」みたいです。もともとUNIX用のXBoardというチェスのGUIがあって、それが使用していたプロトコルが「xboard」。で、XBoardのWindows移植版がWinBoardという名称みたいですね。

 んで、そのxboardのエンジンを連続対局サーバから呼び出すのは、多分出来る様になりました。エンジンが異常な挙動をする*1事は無くなりましたし、GA将と連続対局させてもまぁ妥当な勝率になってます。

 現時点では、Fairy-Stockfish/Shokidoki/Limaをスパーリング相手にしています。エンジンのダウンロードは下記サイトから行いました。(Fairy-Stockfishのみ、少しソース修正して自前でビルド。)

github.com
hgm.nubati.net
sites.google.com

 Limaに関しては、おそらくUEC杯版とほぼ同じバージョンが公開されていると思われますので、まぁこっちは大丈夫でしょう。

 ただ、Shokidokiですが、公開版には定跡が入っていないのか、古い版なのかは分かりませんが、かなり弱いです。第11回UEC杯版とほぼ同じ棋力のGA将?が8割がた勝っちゃってます。

 それと、Shokidoki/Limaはスレッド数を指定しても無視してシングルスレッド探索になっているっポイんですが、これに関しては原因不明。現在調査中です。

 まぁ、スパーリング相手としてはシングルスレッドでも十分強いんで、このままでも良いかな、とは思っていますが。

*1:Illegal Moveを返すとか、反応しなくなるとか

VS Fairy-Stockfish勝率

 Ryzen 5 2400G搭載マシンでGA将と対局させた結果、勝率はこっちから見て15%前後でした。

 という事は、UEC杯で2局指して少なくとも1局勝つ確率は28%前後あった訳で…

 その28%を本番で引いてりゃUEC杯初優勝だったのに……

 まぁ、終わった事なんでそれはこっちに置いといて、来年に向けて開発再開しますかね。

5五将棋用連続対局サーバの改良中

 今まではGA将対ssp専用で実装していたのを、Winboardプロトコルのエンジン含む複数エンジン相手に対局可能な様にしようとしています。

 んで、現在はFairy-Stockfish3つ相手に対局してログ出力出来る様にまではなりました。

 後はWinboardプロトコルのエンジンへの対応ですが、これはもうちょっとかかりそうです。何しろUSIとは色々違うので、まずプロトコルの理解から始めないといけない状況です。

 それから、Fairy-StockfishをVC++2015でビルドして5五将棋モードで対局させるのはとりあえず成功しました。ソースの修正箇所としては、スレッド数・ハッシュサイズのデフォルト値を変更した位で、これはまぁ連続対局サーバの方で対応しても良かったんですが、楽したかったんでFairy-Stockfishのソースをチョロっと書き換えました。後、スタックサイズがデフォルト値だとStack-Overflowしたんで、64MBに増量してみました。

 今後の予定は、Winboardに対応させてShokidokiとLimaもスパーリング相手に加える事ですね。