TadaoYamaokaの日記

山岡忠夫 Home で公開しているプログラムの開発ネタを中心に書いていきます。

将棋AIの進捗 その4(詰みの探索)

前回の日記で、末端ノードで詰みの探索を行う予定と書いた通り、詰みの探索をするようにしました。

ディープラーニングは詰みの探索が苦手なので、ディープラーニングと詰み探索を組み合わせるのは有効だと思っています。
Policy Network、Value Networkの計算中は、CPUが空いているので、詰み探索を行ってもNPSへの影響はないので、確実に終盤の棋力向上につながるはずです。
といっても、棋力でいえばPolicy Network、Value Networkの精度の方が重要ですが。

詰み探索の実装は、AND/OR木を使って、とりあえず優先度を考慮しないで探索しました。
かなり遅いコードですが、深さ7までは、NPSに影響でないので、採用することにします。

コードはこれ↓
DeepLearningShogi/mate.cpp at master · TadaoYamaoka/DeepLearningShogi · GitHub

ルートノードでの詰みの探索を今までは、Aperyを使って探索していましたが、詰み探索の実装に置き換えました。
終盤局面で深さ11までは1秒以内探索できるようですが、深さ13にすると10秒くらいかかる時がありました。

長手の詰みを探索するには、df-pnなどまともな実装が必要そうです。

王手の指し手の生成も全合法手を1手動かして王手になるか調べているので、遅いです。
Aperyに王手の指し手生成があれば、それを使えたのですがどうやら実装されてないようです。
この部分を自力で実装するのは大変なのでどうしようかな・・・。