【RapfiAuto】自動探索ツールを自作した【Rapfi×YixinBoard】

定期的に確認して必勝局面が確定したら手作業で局面をさかのぼっていたがめんどくさいので自動化をすることにした。既存ソフトを改造する案もあったがうまくいくかわからないし、アップデートしたらやり直しになるので改造せず、外部ツールで制御する方式とした。
コマンド入力により画像認識を不要とした。

できること

・自動探索
・確定(必勝または必敗)局面の場合、手数を戻して未確定局面で探索を再開する
・最善手以外が負けの場合、自動的に最善手を着手する

現在は試運転中なので公開できる状態ではないがもし需要があればGithubに公開する予定。

以下はAIが書いた説明文

連珠(五目並べの公式競技ルール)のAI解析ツールとして、Rapfiは現在もっとも強力なエンジンのひとつです。NNUE(効率的更新可能ニューラルネットワーク)評価とアルファベータ探索を組み合わせ、Gomocup(コンピュータ五目並べ大会)でも上位成績を収めています。GUIとしてはYixinBoardが公式に推奨されており、Rapfiのデータベース機能をフル活用した局面解析が可能です。

今回は、このRapfi+YixinBoardの組み合わせによる局面解析作業を自動化するために作成した自作ツール「RapfiAuto」を紹介します。

RapfiAutoとは

RapfiAutoは、YixinBoard上でRapfiエンジンを動かしながら、局面の分岐探索(データベース構築)作業を自動で繰り返すデスクトップ操作自動化ツールです。連珠のデータベース作成では、ある局面について「負け側の最善の受け(searchdefend)」と「勝ち側の候補手(nbest)」を交互に深く読ませ、局面を枝分かれさせながら手動で記録していく作業が発生します。これを人手でやると非常に時間がかかるため、RapfiAutoはこの繰り返し作業をルールベースで自動化します。

主な仕組み

RapfiAutoは、局面の探索状況を2つの「状態」で管理し、条件に応じて4つの分岐処理へ振り分けます。

  • 状態A(負け側 searchdefend):制限時間(既定60秒)内に最善の受けを探索。一定回数(既定3周)以上、同じ候補手が安定して出続けたら「安定」と判定し、次の分岐へ進む
  • 状態B(勝ち側 nbest):制限時間(既定60秒)内に候補手(既定2手)を探索

この状態A・Bの結果に応じて、以下の4分岐で局面を自動操作します。

分岐条件動作
分岐①状態Aが安定条件を満たす指定手数(既定2手前)まで待った(undo)して探索を打ち切る
分岐②状態Aが制限時間内に安定しないnbestの候補手を送信して局面を分岐させる
分岐③分岐②後の局面確認指定手数(既定1手前)まで待って次の探索へ
分岐④状態Bが制限時間を超過エンジンが指した勝ち側の手をそのまま採用し、負け側でsearchdefendへ移行(待ったなし)

これにより、「探索→安定判定→分岐→次の局面へ」というサイクルを人手を介さずに回し続けることができます。また search_mode を defend に切り替えることで、双方searchdefendのみを長時間(既定3600秒)行うモードにも対応しています。

設定ファイル

RapfiAutoは2つの設定ファイルで動作をコントロールします。

  • monitor_config.json:探索の制限時間、安定判定条件、待った(undo)の戻り手数など、探索ロジック全般のパラメータ
  • sender_config.json:YixinBoardのコマンド入力欄の画面座標など、ウィンドウ操作に関するパラメータ(DPI考慮済み)

いずれもコマンドライン引数で個別に上書きできるため、複数の局面・複数のPC環境でも柔軟に使い回せます。

まとめ

RapfiAutoは、Rapfi+YixinBoardによる連珠のデータベース構築作業を、探索の安定判定と分岐処理のルール化によって自動化するツールです。手動での繰り返し操作から解放されることで、より多くの局面を効率的に検討できるようになります。

今後、実際の運用結果やチューニングのポイントについても紹介していく予定です。


(本記事はRapfi公式リポジトリ・ドキュメントの情報を参考にしています)

コメント