sakurapyon’s blog

sakurapyon’s blog

静止探索内部で詰みが見つかった場合

以前から悩んでいる静止探索の問題。かずさんも悩まれているようだ (かずの心の贅肉 SEEのバグ)。

これは静止探索に限った話じゃなくて 全指し手を生成していない(前向き枝刈りをしている)場合に問題になって、静止探索の手生成は前向き探索の最たるものなので現象が発生しやすいということなんだろうと思う。静止探索に突入した時点で嘘必至になってるときに発生しているのだと思う。

例えば以下の局面で、sakurapyonは探索深さ2の時に嘘の勝ちを返してくる。2二金打同玉以下の嘘5手詰だそうだ (-.-;

後手:White
後手の持駒:飛 香 歩二 
9 8 7 6 5 4 3 2 1

                                                        • +
・ ・ ・ ・ ・v角 ・v桂v香
・ ・ ・ ・ ・ ・ ・ ・v玉
・ ・ ・ ・ ・ と ・v歩v歩
v歩 ・ ・ ・ ・v歩 歩 歩 ・
・v歩 ・ ・ ・ ・v歩 ・ ・
歩 ・ 歩 金 歩 ・ ・ 桂 ・
銀 歩 ・ ・ ・v金 ・ ・ 歩
・ 玉 金vと ・ ・v飛 ・v銀
香 桂 ・ ・ ・ ・ ・ 桂 香
                                                        • +

先手:Black
先手の持駒:角 金 銀二 歩 
手数=0 まで

通常探索の場合は、alphaが負け以外の値に更新されるまで 前向き枝刈りをしないことで対応できる(はず)だけど、静止探索は前向き枝刈りしまくりだから、対応が難しい。SEE<0の手を捨てたりしているとなおさらだ。

静止探索で詰み(勝ち)が返ってきたので それを信じて指したら実は読みぬけでした、というのが一番困る。負けの値のときは 他の手を考えてくれるからまだいいんだけど、嘘の勝ちが帰ってくるのはまずい。只捨ての妙手で勝ち!が、単なる ただやん先生になって負けてしまう。


ちなみに進歩本6の大槻将棋のアルゴリズム解説では、「静止探索で生成した手が全て負けの場合は全ての手を生成する」と書かれている。 試しにsakurapyonにて 静止探索が負けの値を返しそうなら全指し手生成、を試したらめっちゃ遅くなった。あとは、静止探索で負けの値になったら探索延長も試したけど、これもイマイチ (null move が負けの値を返したら、と同じ感覚でいいような気もするけどそうでもないのか?)。