千日手回避漏れの話(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将?の先手番
5五将棋用の連続対局サーバを自作
プチ将棋だと「千日手が先手の負けにならない」「打ち歩詰めが負けにならない」という問題があるので、5五将棋モードで連続対局させる為のサーバを自作。
現時点ではUSIしか対応していませんが、将来的には他のプロトコルにも対応させて、海外製のソフトとも対局出来る様にしたいですね。
んで、途中経過をCSVフィアルで出力する様にしたんで、Pythonでチョロっと処理をしてグラフ作成~FTPでGA将のウェブサイトにアップロードする処理も実装。
http://gasyou.is-mine.net/ura2/
上記ページから見れます。ちなみに、勝率グラフの緑の破線は過去最高勝率のラインなんで、ちょっとだけ自分に嬉しい仕様。
ここ一週間ほどの進捗等
学習ルーチンを色々いじってみたのものの、結局今年1月2日に対ssp勝率75.6%を記録したのを超えられませんでした。
んで、現在はその最高記録達成時の設定に戻して再度学習中。多分、これがUEC杯に向けての最後のお願いになるはず。
それから、思考時間制御関連のデータ収集&分析は完了。こっちは単純作業なんで順調に行きました。試しに20局ほど20分切れ負けでsspとスパーリングしましたが、10~15分程度で終局するみたいなんで、まぁ悪くない感じかと。
最後に、探索ルーチンの改良。今更Stockfishを真似ても面白くないんで、実現確率探索&遷移確率の学習ルーチンを実装して色々やってます。
軽く1時間ほど走らせた結果、0.17秒で10~15手ほど*1読める様になりましたが、その割にはあんまし強くなってない印象。どっかで読み抜けしてるんでしょうねぇ。
という訳で、「ほぼ進展無し」ってのが総括でしょうか。
Windows 10でキーボード入力が出来なくなった場合の対処
今日Windows 10 Proの開発用マシンを触っていたら、突然キー入力を受け付けなくなりました。
現象としては下記の通り。
- 画面描画は正常に行われている(時計の秒針やタスクマネージャーは動いている)。→フリーズでは無いらしい。
- マウスクリックは認識したりしなかったり。
- キー入力が一切出来ない。←一番致命的。
んで、再起動って手も考えたんですが、ちょっと時間のかかるデータ収集中だったんで、それはしたくなくて、色々試してみました。
まずは「フィルターキー」という機能がONになってしまった可能性があると考えて、これをOFFにしようとしました。が、そもそもマウスクリックを認識せず、コントロールパネルすら開けない。
でもって、色々やった挙げ句Ctrl-Alt-Deleteでタスクマネージャーを起動したら、何故か正常に戻りました。
本当に謎だけど、Windowsってのはそ~ゆ~モンだと思って解決済みとしました。
UEC杯までにやるべき事
- 評価関数パラメータの学習
- 思考時間制御のパラメータ調整
- Ponderの検証
1.は今の学習ルーチンが良い感じなので、ジックリ時間をかけてやれば良いはずです。
2.に関しては、大会が20分切れ負けなので、最大思考時間を90秒か120秒に設定。んで、思考開始から1秒毎に最善手と合議での票の割れ方をログに出しといて、それをベースに「n秒でm票しか割れていなかったら、ほぼ最善手*1と一致する」という統計を出し、思考時間制御のパラメータを決める予定です。
ログ出力に関しては合議用のコードをちょっといじって実装して、統計を出すプログラムの方はJavaで実装する予定。現在は1.の学習結果待ちなので、その間にこっちを実装していきます。
3.に関しては、以前「Ponder有効にすると弱くなる」って現象があったんで、それの検証。
*1:最大思考時間まで探索した結果