千日手回避漏れの話(5五将棋モード)
連続対局用サーバを自作したらGA将の千日手回避漏れが検出出来る様になったんですが、チラホラと回避漏れが有ります。
んで、原因の局面を調べてみたんですが、意外と難しそうです。
まず、GA将?の探索ルーチンにはAspiration Searchと置換表を実装してあります。
でもって「ある局面*1で3三金と指すと、次に相手が2四馬と指すと千日手になり、GA将?の負けが確定する」という局面が有りました。
十分な時間探索出来れば「3三金で負けが確定する」と読めるんですが、現在の連続対局のレギュレーションではGA将?の思考時間は0.17秒になっているので、そこまで読み切れません。
具体的にどうなるかと言うと、
- まず、置換表にある「3三金、1五馬…」というPVを参照して、合議サーバに返す。
- イテレーションが回ると置換表の評価値を参照せずにきちんと読む様になる。
- Fail-Lowする。(この時は最善手が信用出来ないので、クライアントから合議サーバには指し手は返さない。)
- 何度もFail-Lowして、そのまま時間切れ。(この時点での合議サーバに返した最善手は3三金。)
という感じです。
根本的に解決するなら、初回の置換表参照時に「3三金を指した後に相手の指し手を全て生成して、その中に千日手になる指し手が有ればPVを参照しない」という処理が必要なんですが、もっと他に良い方法は無いもんでしょうかねぇ…
*1:GA将?の先手番