TadaoYamaokaの日記

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

dlshogiのmateの読み筋表示 続き

昨日の記事で、dlshogiを詰みの読み筋表示に対応させたことを書いた。
その際、王手の合法手に不成を生成していないことで、手順が10手以上長くなる局面があることがわかった。
探索速度が低下しないのであれば、不成を生成することを検討したい。

そこで、不成も生成した場合のdf-pnの探索速度を測定した。

不成の生成

今までは、歩、香車、飛車、角の不成は生成していなかった。
それぞれ直接王手の場合と、開き王手で不成になる場合がある。
それらを、不成も生成するように変更した。

テスト

以前に、王手の合法手の最大数を検討した際に、最大と考えられる局面で合法手がすべて生成されるか確認した。
結果、91手が生成できることが確認できた。

また、それぞれ直接王手の場合と、開き王手で不成になる場合でテストケースを作成してテストした。

また、やねうらお氏が公開している詰将棋500万問の7手詰めで、手数制限を7手にして、すべて詰みになることを確認した。

変更前後の速度比較

1手~37手詰めの51局面で、時間を測定した。

平均(ms) 中央値(ms)
変更前 140 9
変更後 150 9

平均では少し時間がかかるようになっているが、10msの差であり実戦で影響のある時間ではない。
中央値は同じであり、実戦で多くあらわれるであろう短手数の詰みで遅くなっていることはない。

まとめ

dlshogiでは今まで、王手の合法手に不成を生成していなかったが、不成を生成しないことで手順が伸びる場合があるため、不成を生成するようにした。
探索速度がわずかにかかるようになったが、実戦で影響のある時間ではないため、不成も生成するようにする。

ビルド済みバイナリ

https://gist.github.com/TadaoYamaoka/219c900457c30741ea43b512b4ec2f17/raw/923acc35572d1b8c9de28a0bf248e47e2d4fa4a4/dlshogi_matepv.zip

MultiPVで、評価値が異常値になるバグがあったので、それも修正しています(評価値が出せない場合は空欄にする対応)。