あれ、バグる? バグらない?
「静止探索中に詰みを発見した時の扱いについて考える」は、静止探索中で詰みを発見すると暴走するバグ*3を直したいという件。
http://d.hatena.ne.jp/jinsei_okuribunt_shippai/20110613/1307974101
おそらくですが、取る手や王を逃げる手しか読まない静止探索中に、制限された手の範囲で詰みを発見すると起こる現象では?と推測中です。
つまり、取らない手を指せば詰まないにも関わらず、取る手しか読めないのでその手の範囲で「詰み」と判定してしまう。
現状「詰み」と判定したら即指すようにしているので即指しちゃうんだけど、実はその手では「取らない手」を指されると詰まない、ってことだと思う。
どーすればいいんだろ。
ていうかこの回避法はすでにありそうな気がする。
私もこれが気になって、ちょっと考えてみたんですがどうなんだろう。
GA将!!!!!の静止探索はInside KFEndに書かれている方式の丸パクリで、一段目が取る手・成る手で深さ4手、2段目が同じマスで取り返す手のみで深さ無制限です。ただし、脅威の考慮はしていません。
んで、手生成・評価値の初期値設定の部分が王手がかかっているか否かによって違うので、それぞれのケースで考えてみました。
- 静止探索末端の場合:合法手が無ければ"負け"を表す値が評価値になるので、暴走しない
- 王手の場合:初期値は"負け"になっているが、手生成が合法手全てなので、暴走しない(ハズ)
- 非王手の場合:初期値はそのノードの評価値なので、仮に全ての手が"負け"になっても、それらの手の評価値はノードの評価値に影響を与えないので、暴走しない(ハズ)
非王手の場合だと、本当は必至の局面の評価値が"負け"にならないって問題はありますが、静止探索にそこまでの精度を求めてないので*1、とりあえず無視する事にします。
("勝敗不明"*2を"勝ち"とか"負け"に誤認するのは困りますが、逆はとりあえず無視するって方向で。)
という訳で「多分暴走しない」って結論になった様な気がするんですが、どっかに読み抜けとかありそうな気も…
自己対戦での学習ルーチンに暴走チェックを実装してみたんで、一日走らせてみれば暴走しそうかどうかの判断が出来そうですし、とりあえずはそっちの結果待ちですね。