TadaoYamaokaの日記

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

将棋AIの進捗 その6(df-pn)

前回の日記で書いた通り、df-pnの実装を行いました。

実装の参考にしたのは、以下の論文です。

上記の論文にはほぼ同じ疑似コードが掲載されていますが、ANDノードとORノードで処理を共通化しており、理解しづらかったため、ANDノードとORノードを別々の処理として記述した。

速度比較

次の15手詰めの局面で、df-pnと優先なし探索で速度を比較した。
f:id:TadaoYamaoka:20170926081954p:plain
position sfen 1n1g3+Pl/k1p1s4/1ng5p/pSP1p1pp1/1n3p3/P1K3P1P/1P7/9/L1G5L b 2R2BG2SL5Pn 161

df-pn 1,688 msec
優先なし 52,794 msec

31倍高速になった。

課題

ハッシュを利用しているが、上記の15手詰めで1,158,018ノードを使用した。
手数が増えるとノードが指数的に増えるので、ハッシュクリアの仕組みがないと長手詰めには対応できない。
また、詰みが見つからないないときに途中で打ち切る仕組みが必要。

コード

実装したコードはこちらです。
DeepLearningShogi/DfPn.cpp at master · TadaoYamaoka/DeepLearningShogi · GitHub