USIプロトコルは、将棋エンジンで幅広く使われているが、現代の将棋エンジンの仕様として問題点が色々あるので、独自に拡張したUSI 2.0というプロトコルを定義する。
-
optionのvalueでInt64型(64-bit 符号付き整数)まで許容することをプロトコル上、保証する。
- いまどきのPCでnode数制限をして探索させようとした時、Int32だと桁が足りないことがあるため。
-
usinewgameのあとの(探索中ではないときの)setoptionコマンドを受付とする。
- 検討モードにおいてMultiPVの値を途中で変更したいため。
- やねうら王、Aperyなど多くの思考エンジンですでにそうなっている。
- hashはisreadyのタイミングでoptionの値を見て確保するので、setoptionで値を変更しても即座に反映されるわけではないにせよ、setoption自体は有効であるべき。
-
"MultiPV"というオプション項目を必須とする。
- これがないと検討モードなどで困るため。
- やねうら王、Aperyなど多くの思考エンジンにすでに実装されている。
-
"Thread"というオプション項目を必須とする。
- いまどきマルチスレッドに対応していない思考エンジンはないため。
-
USI2.0 : 思考エンジンは"usi"→"usiok"に引き続き、"usiversion"に対して"2.0"のようにUSIプロトコルのサポートしているバージョンを返す。
-
USI2.0 : 手数が伸びてきたときに、初期局面から毎回エンジンに送るのは無駄であって、前回局面の続き(最大2手)を送れば十分である。"posdiff move1 move2"
- 前回の局面は削除していないはずであるから、実装は難しくないはず。
-
USI2.0 : goコマンドでbyoyomi(秒読み)が先後同じ値になってしまう。相手と自分とは異なる秒読み設定が出来るべきである。
- 例) go ... bbyoyomi 1000 wbyoyomi 3000
- 思考エンジン側が相手の残り時間を見てタイムマネージメントをしたいとき(現状、そういう処理までしている思考エンジンはあまりないが…)、 相手の秒読み設定がわからないと困るため。
-
エンジンが評価関数のために消費するメモリ量、エンジンの棋力、バナー、CPU別の実行ファイル名などを記述する必要がある。
- ファイル名 : "engine_define.xml" エンジンの実行ファイルと同じフォルダに入れる
- エンジン自体は、GUI配下のengine/フォルダにエンジン別にフォルダを作成して入れるものとする。
-
"engine_define.xml"の仕様
- MyShogi.Model.Shogi.EngineDefine/EngineDefine.csにあるclass EngineDefineをXmlSerializerでシリアライズしたもの。
- シリアライズ/デシリアライズの手順は同ファイル内にある。
- かきかけ