将棋所をGUIとして使用する為に最低限必要なUSIコマンド
選手権の時に「将棋所を使いたいけど、コマンドが多いから…」って話を数人から聞いたので、私が実装した際に最低限必要だったコマンドを書いてみます。分からない事があれば、コメントなりメールなりで聞いてもらえれば、分かる範囲でお答えします。
注意
この文はあくまで表題の通りのものです。ここに書いてある通りに実装しても、エンジンがUSI対応になるわけではありません。
長いので後は追記で。
はじめに
基本的にhttp://www.geocities.jp/shogidokoro/usi.htmlと同じ順で書いていきます。
上記URLの解説はinfoとoptionがかなりの分量を占めますが、こいつらは無視してもいいので最低限必要なコマンドは割と少ないです。
まずはGUI→エンジンに送られるコマンドから。
usi
id,usiokを返すだけなんで、ちゃんと返事してあげましょう。
usi受信から2秒以内にusiokを返す必要があるので、エンジンの重い初期化(定跡読み込みとか)は後回しにしましょう。
isready
readyokを返すだけでOKです。
setoption
無視!
usinewgame
これを受け取ったら思考部の準備(定跡の読み込みとか)をして、position,goが来るのを待ちましょう。
position
ちゃんと対応しましょう。
平手初期局面から一局指すだけなら、SFENでの局面指定は未実装でもOKですが、局面編集してから思考させるならSFEN対応が必要です。後々どうせ必要になるでしょうから、SFENにも対応するのをお勧めします。
go
サブコマンド(ponderとかbtimeとか)は無視して、goだけ認識出来ればOKです。
予測読み(先読み)とか思考時間の設定は独自にやっちゃいましょう。その方が楽だし。
stop
無視! と言うか、このコマンド受け取った覚えが無いです。
quit
素直に終了しましょう。
gameover
私は無視してます。必要無いし。
id,usiok
定型文を返すだけなんで、ちゃんと実装しましょう。
readyok
対局準備が終わってから送ります。将棋所は、20〜30秒くらいは待ってくれますので*1、ゆっくり出来ます。
bestmove
move1(ルートノードでの最善手)だけ返せばOK。
info
実装しなくてOK。
ただし、評価値とかPVとか送ると表示がにぎやかになって楽しいです。時間があれば実装したいところです。
option
不要。設定ファイルなりコンパイル時のオプションなりで代用出来ます。
chackmate
GUIから詰め将棋機能を使わない限りは実装不要です。
最後に
細かい事はプロトコルの解説を読むなりLesserkaiの通信を見るなりすれば、大体は分かると思います。
Lesserkaiの方は、将棋所の表示→デバッグウィンドウでウィンドウを出しておいて、Lesserkai同士で対局させれば通信内容が分かります。
デバッグウィンドウは、">1"で始まる行が先手への送信で、"<2"が後手からの受信って感じだと思います(多分)。
*1:それ以上は未確認