以前の対局できるバージョンは、別プロセスのUSIエンジンを補助的に使用して詰みの探索を行っていたが、Pythonから呼び出せるC++のモジュールに変更した。
elmo_for_learnのソースを流用してPythonから使用できるようにした。
cppshogiというモジュールにしている。
対局中の各局面で深さ6で評価値を求めて3000を超えた場合は、探索の結果で指すようにした。
今回は、policy networkの出力からBoltzmann分布に従う確率に応じて手を選択するようにした。
これにより指し手が固定化されなくなる。
Boltzmann分布の計算は、policy networkの出力を合法手でフィルターして、残ったロジットについて、expf(logits[i] * beta)を計算した。
本来は分布の合計が1になるように正規化するが、C++のdiscrete_distributionを使うと合計が1になっていなくても、確率分布に応じたインデックスを返却できるため、計算を簡略化した。
elmo_for_learnで生成した2千万局面で学習したSL policy networkを使って、Lesserkaiと対局させて勝つことがあるのを確認した。(勝率は低い)
elmoの教師データを使うと、floodgateの棋譜に比べて学習の進みが遅い。
まだ学習が進んでいるので、教師データを1千万ずつ生成して学習させてみる予定。
RL policy networkはまだcppshogiに対応できていないので、後日修正予定。