(本エントリーは、Tord Romstad 氏によるThe Universal Shogi Interface, draft 1
(2007-01-24) の ”5. Description of the universal shogi interface” のTakodori による日本語訳である)
5. ユニバーサル将棋インターフェースの説明
5.1. General rules
5.1 一般規定
* The specification is independent of the operating system. For Windows, the engine is a normal exe file, either a console or "real" windows application.
* その仕様は、OS から独立している。ウィンドウズでは、エンジンは、普通の実行形式のファイルか、ないしは、コンソールもしくは「リアルな」ウィンドウズアプリケーションである。
*All communication is done via standard input and output with text commands.
* あらゆる通信はテキストコマンドを使った標準の入出力で行われる。
* The engine should boot and wait for input from the GUI, the engine should wait for the isready or setoption command to set up its internal parameters as the boot process should be as quick as possible.
* エンジンは、GUI からの入力でブートとウェイトができなければならない。すなわち、エンジンは、ブートプロセスができるだけ早く起こるように、内部のパラメーターを設定する isreadyコマンドないしsetoptionコマンドを待たなければならない。
* The engine must always be able to process input from stdin, even while thinking.
* エンジンは、常に、たとえ思考中であっても、stdin からの入力を実行できるようになっていなければならない。
* All command strings the engine receives will end with '\n', also all commands the GUI receives should end with '\n'. Note: '\n' can be 0x0d or 0x0a0d or any combination depending on your OS. If you use the engine and GUI in the same OS this should be no problem if you communicate in text mode, but be aware of this when for example running a Linux engine in a Windows GUI.
* エンジンが受信するすべてのコマンドの string は、'\n',で終了し、また、GUI が受信するコマンドもすべて、'\n'で終了する。注意:'\n'はOSによって、0x0d だったり0x0a0dだったり、他のあらゆる組み合わせになりうる。同じOS上でエンジンと GUI を利用するならこの点は問題にならないが、例えば、ウィンドウズ用の GUI でリナックスのエンジンを走らせるような場合には、このことに留意する必要がある。
* Arbitrary white space between tokens is allowed.
* トークン信号間に任意の空のスペースが入ることは容認される。
* The engine will always be in forced mode which means it should never start calculating or pondering without receiving a go command first.
* エンジンは、常に強制されたモードになっている。すなわち、それは、go コマンドを受信することなく計算したり、熟考したりし始めることが決して起こるべきではないことを意味する。
* Before the engine is asked to search on a position, there will always be a position command to tell the engine about the current position.
* エンジンがある局面について探索することを求められないうちに、現在の局面についてエンジンに伝えるための局面コマンドが常に存在する。
* By default all the opening book handling is done by the GUI, but there is an option for the engine to use its own book (USI_OwnBook option, see below).
* デフォルトでは、すべての序盤の棋譜の扱いは、GUI によってなされる。しかしながら、エンジンが自身の持つ棋譜を使うことも選択可能である(USI_OwnBookオプション、下部参照)
* If the engine or the GUI receives an unknown command or token it should just ignore it and try to parse the rest of the string in this line. Examples: joho debug on\n should switch the debug mode on given that joho is not defined, debug joho on\n will be undefined however.
* もし、エンジンないし GUI が未知のコマンドもしくはトークン信号を受信した場合には、それを単に無視し、残りの string を解析するようにせねばならない。例:" joho debug on\n"は、"joho"が定義されていないとき、デバッグモードを作動させなければならない。しかしながら、"debug joho on\n"が定義されることは無い。
* if the engine receives a command which is not supposed to come, for example stop when the engine is not calculating, it should also just ignore it.
* エンジンが想定していないコマンドが来たのを受信した場合、例えば、エンジンが計算を行っていないときの stop コマンドが来た場合、エンジンはそれをただ無視すべきである。
5.2. Move format
5.2 着手のフォーマット
*Normal (i.e. non-promoting, non-dropping moves) are written in English coordinate notation, using only the source and destination squares, without any piece letters or other characters (for instance 7g7f).
" 通常の着手(すなわち、成っていなく、持ち駒を打つでもない)は、(例えば 7g7f のように)元の升目と動かしたい升目を、駒の文字その他の文字を使うことなく、英語の座標記法で書かれることとなる。
" Promotion moves are written just like normal moves, except that an extra '+' character at the end of the move (for instance 4e3c+).
" 成りの着手は、指し手のサイトに'+'というキャラクターを付加すること以外は、通常の着手と同じようにして書かれることとなる。(例、4e3c+)
" Drops are written with the English piece letter in upper case followed by a star (*) and the destination square (for instance P*3d).
" 持ち駒を打つ着手は、英語の駒の大駒文字とそれに続く星印(*)と、動かしたい升目によって書かれることとなる(例は P*3d)
5.3. GUI to engine
5.3 GUI からエンジンへ
These are all the command the engine gets from the interface.
以下は、エンジンがインターフェースから得るすべてのコマンドである。
usi
Tell engine to use the USI (universal shogi interface). This will be sent once as a first command after program boot to tell the engine to switch to USI mode. After receiving the usi command the engine must identify itself with the id command and send the option commands to tell the GUI which engine settings the engine supports. After that, the engine should send usiok to acknowledge the USI mode. If no usiok is sent within a certain time period, the engine task will be killed by the GUI.
エンジンに USI(ユニバーサル将棋インターフェース)を使うよう伝える。これはプログラムがブートした後にエンジンに USI モードに切り替えるよう伝える最初のコマンドとして、一度送られることになる。usiコマンドを受信した後、エンジンは自身を id コマンドで識別し、GUI にエンジンがサポートするエンジン設定はどれなのかを伝えるオプションコマンドを送らなければならない。その後、エンジンは USI モードを肯定応答する usiok を送信せねばならない。もし、一定の時間内に usiok が送られない場合は、GUI によってエンジンのタスクは打ち切られる。
debug [ on | off ]
Switch the debug mode of the engine on and off. In debug mode the engine should send additional infos to the GUI, e.g. with the info string command, to help debugging, e.g. the commands that the engine has received etc. This mode should be switched off by default and this command can be sent any time, also when the engine is thinking.
エンジンのデバッグモードをオンにしたりオフにしたりする。デバッグモードにおいてエンジンは GUI に追加情報を送らねばならない。例えばデバッグを助けるための info string コマンドであったり、エンジンが受信したコマンドであったりなどである。このモードはデフォルトではスイッチがオフでなければならず、また、エンジンが思考中も含めて、いつでもこのコマンドが送られるようになってなければならない。
isready
This is used to synchronize the engine with the GUI. When the GUI has sent a command or multiple commands that can take some time to complete, this command can be used to wait for the engine to be ready again or to ping the engine to find out if it is still alive. This command is also required once before the engine is asked to do any search to wait for the engine to finish initializing. This command must always be answered with readyok and can be sent also when the engine is calculating in which case the engine should also immediately answer with readyok without stopping the search.
これは、エンジンを GUI と同期させるために使われる。GUI が完了するのに時間のかかるコマンドをひとつないし複数送信したとき、このコマンドは、エンジンがもう一度準備ができるようになるのを待つためか、エンジンがまだ動いているかどうかを確かめるためにピングするために使われる。また、このコマンドは、エンジンが初期化を完了させるのを待つための探索を求められる前に、一度送られる必要がある。このコマンドは、常に、readyok で返信されねばならないし、エンジンが計算中で、探索を中断することなく redyok で即座に返信せねばならないような場合でも、送信されるようになってなければいけない。
setoption name <id> [value <x>]
This is sent to the engine when the user wants to change the internal parameters of the engine. For the button type no value is needed. One string will be sent for each parameter and this will only be sent when the engine is waiting. The name and value of the option in <id> should not be case sensitive and can not include spaces.
これは、ユーザーがエンジンの内部パラメーターを変更したいときにエンジンに送られる。ボタンタイプでは、値は必要ない。1string が、パラメーター毎に送られ、これは、エンジンが待機中のときにだけ送られる。<id>におけるオプションの名前と値は大文字と小文字を区別すべきではんく、また、スペースを含むことはできない。
register
This is the command to try to register an engine or to tell the engine that registration will be done later. This command should always be sent if the engine has sent registration error at program startup.
これは、エンジンを登録しようとする、ないし、エンジンに登録が後で行われると伝えるコマンドである。このコマンドは、エンジンがプログラム起動時に登録エラーを送るときは常に送信されねばならない。The following tokens are allowed:
以下のようなトークン信号が許容されている。later
The user doesn't want to register the engine now.
ユーザーは今エンジンを登録したくない。name <x>
The engine should be registered with the name <x>
エンジンは<x>という名前で登録されねばならない。code <y>
The engine should be registered with the code <y>
エンジンは、code <y>とともに登録されねばならない
Example: 例"register later"
"register name Stefan MK code 4359874324"
usinewgame
This is sent to the engine when the next search (started with position and go) will be from a different game. This can be a new game the engine should play or a new game it should analyse but also the next position from a testsuite with positions only. As the engine's reaction to usinewgame can take some time the GUI should always send isready after usinewgame to wait for the engine to finish its operation.
これは、次の探索(started with position and go)が別の試合からになるときにエンジンに送られる。これは、エンジンが指さなければいけない新たな対局でありうるし、また、エンジンが分析しなければならない新たな試合でもありうる。のみならず、局面だけのテストスイートからの次なる局面でもありうる。エンジンの usinewgame への反応が時間をとることがあるので、GUI は、エンジンがその動作を終えるのをまつ usinewgame の後に必ず isready を送信せねばならない。
position [sfen <sfenstring> | startpos ] moves <move1> ... <movei>
Set up the position described in sfenstring on the internal board and play the moves on the internal board. If the game was played from the start position, the string startpos will be sent.
内部の盤面上に、sfenstring で記述された局面を設定し、内部の盤面上でプレーする。その試合が開始局面から指される場合は、startpos string が送信される。Note: If this position is from a different game than the last position sent to the engine, the GUI should have sent a usinewgame inbetween.
注:もしこの局面が、すぐ前にエンジンに送られた局面でなく、別の試合からの局面となる場合は、GUI は usinewgame inbetween を送信し終わってなければならない。
go
Start calculating on the current position set up with the position command. There are a number of commands that can follow this command, all will be sent in the same string.
局面コマンドで設定された現在の局面に関して計算を開始する。このコマンドに続くコマンドがいくつかあり、すべてが同じ string で送信される。If one command is not sent its value should be interpreted as if it would not influence the search.
もし、ひとつのコマンドが送信されなければ、その値は、あたかもそれが探索に影響をしないように解釈されなければならない。
searchmoves <move1> ... <movei>
Restrict search to this moves only
この指し手についてのみに探索を限定Example: After position startpos and go infinite searchmoves 7g7f 2g2f, the engine should only search the two moves P-7f and P-2f in the initial position.
例:局面が startpos で go infinite searchmoves が7g7f 2g2fになると、エンジンは初形配置から7六歩 2六歩の2手しか探索しない
ponder
Start searching in pondering mode. Do not exit the search in ponder mode, even if it's mate! This means that the last move sent in in the position string is the ponder move. The engine can do what it wants to do, but after a ponderhit command it should execute the suggested move to ponder on. This means that the ponder move sent by the GUI can be interpreted as a recommendation about which move to ponder. However, if the engine decides to ponder on a different move, it should not display any mainlines as they are likely to be misinterpreted by the GUI because the GUI expects the engine to ponder on the suggested move.
熟考モードでの探索を開始する。熟考モードでは、探索から抜けてはならない。たとえ詰んでいてもだ。これは、局面 string で送信された着手が熟考された指し手であることを意味する。エンジンはそれがしたいことをできるが、ponderhit コマンドの後では、エンジンは示唆された差し手を実行して、熟考し続けなければならない。これは、GUI によって送信された熟考した手が、どの手について熟考すべきかについての推奨と解釈されることがあるのを意味する。しかしながら、もしエンジンが別の手を熟考すべきと判断した場合は、GUI はエンジンが示唆された指し手を熟考していると期待しているために、本線の手順が GUI よって誤って解釈されそうなため、エンジンは本線の手順を表示すべきではない。btime <x>
Black has x milliseconds left on the clock
黒にはクロック上 x ミリ秒残っているwtime <x>
White has x milliseconds left on the clock
白には、クロック上 X ミリ秒残っているbinc <x>
Black increment per move i milliseconds if x > 0.
x > 0 のとき、黒の一手ごとの増加するミリ秒
winc <x>
White increment per move i milliseconds if x > 0.
x > 0 のとき、白の一手ごとの増加するミリ秒movestogo <x>
There are x moves to the next time control. This will only be sent if x > 0. If you don't get this and get the wtime and btime, it's sudden death.
次のタイムコントロールまで、x 手である。これは、x > 0 のときだけ送信される。もし、これを受け取らずに、wtime と btime を受け取るなら、それは突然死である。
depth <x>
Search x plies only.
探索するのは x plies だけ。nodes <x>
Search x nodes only.
探索するのは x ノードだけ。mate <x>
Search for a mate in x moves. Programmers coming from computer chess should note that we follow the shogi convention for counting moves, i.e. we count what chess players usually describe as "plies" or "half moves". For instance, mate 5 means mate in 5 plies.
x手の詰めを探索する。コンピュータチェス出身者は将棋式の手数の数え方に従うよう留意すべきである。すなわち、われわれはチェスプレーヤーが "plies"とか"half moves"とか通常呼んでいるものを数えているのである。例を出すと、mate 5 は、5 plies の詰めの意味のことである。movetime <x>
Search exactly x milliseconds.
探索をぴったり x ミリ秒行うinfinite
Search until the stop command is received. Do not exit the search without being told so in this mode!
Stopコマンドが来るまで探索を続ける。このモードにいるときはそうしろと命じられるまでは探索から抜けてはいけない。
stop
Stop calculating as soon as possible. Don't forget the bestmove and possibly the ponder token when finishing the search.
計算を可及的速やかに停止する。探索を終了するときに、ベストムーブと、おそらく存在する熟考トークン信号を忘れてはならない。
ponderhit
The user has played the expected move. This will be sent if the engine was told to ponder on the same move the user has played. The engine should continue searching but switch from pondering to normal search.
ユーザーは期待した指し手を着手し終わった。これは、ユーザーが指した手と同じ手を熟考せよとエンジンが言われたときに送信される。エンジンは、探索を続けるが、熟考から抜けて通常探索に切り替えなければならない。
quit
Quit the program as soon as possible.
プログラムを可及的速やかに終了させねばならない。
5.3. Engine to GUI
5.3 エンジンから GUI へ (数字はママ、筆者註)
id
name <x>
This must be sent after receiving the usi command to identify the engine, e.g. id name Shredder X.Y\n
これは、usi コマンドを受信した後にエンジンを識別するために送信されなければならない。例:id name Shredder X.Y\nauthor <x>
This must be sent after receiving the usi command to identify the engine, e.g. id author Stefan MK\n
これは、usi コマンドを受信した後にエンジンを識別するために送信されなければならない。例:id author Stefan MK\n
usiok
Must be sent after the id and optional options to tell the GUI that the engine has sent all infos and is ready in usi mode.
これは、id と optional options の後に、GUI にエンジンがすべての情報を送り、usi モードで準備ができていることを伝えるために送信されなければならない。
readyok
This must be sent when the engine has received an isready command and has processed all input and is ready to accept new commands now. It is usually sent after a command that can take some time to be able to wait for the engine, but it can be used anytime, even when the engine is searching, and must always be answered with readyok.
これは、エンジンが isready コマンドを受信して、すべての入力をプロセスし、新たなコマンドを受け入れ可能になったときに送信されなければならない。通常、エンジンを待つことができる時間が取れるコマンドの後に送信されるが、いつでも、たとえエンジンが探索中でも利用可能である。そして、常に readyok で返信されなければならない。
bestmove <move1> [ponder <move2>]
The engine has stopped searching and found the move <move> best in this position. The engine can send the move it likes to ponder on. The engine must not start pondering automatically. this command must always be sent if the engine stops searching, also in pondering mode if there is a stop command, so for every go command a bestmove command is needed! Directly before that the engine should send a final info command with the final search information, the the GUI has the complete statistics about the last search.
エンジンが探索を停止し、この局面における最善手<move>を発見した。エンジンは、エンジンが熟考したい指し手を送ることができる。エンジンは、自動的に熟考を開始してはならない。本コマンドが、エンジンが探索をやめた場合や、熟考モードで stop コマンドが来た場合には必ず送信されなければならない。したがって、すべての go コマンドに対して, bestmove コマンドが必要となる! エンジンが最後の探索情報とともに最終の情報コマンドを送らねばならない直前にGUIは 直近の探索の完全な統計を持っていなければならない。
copyprotection
This is needed for copyprotected engines. After the usiok command the engine can tell the GUI, that it will check the copy protection now. This is done by copyprotection checking. If the check is ok the engine should send copyprotection ok, otherwise copyprotection error.
これは、コピープロテクトされたエンジンにとって必須である。Usiok コマンドの後に、エンジンは GUI に、エンジンがコピープロテクションをこれから行うことを伝えることができる。これは、コピープロテクションによってなされる。チェックがOKならばエンジンはコピープロテクションOKを送信しなければならない。でなければ、コピープロテクションエラーを送信しなければならない。If there is an error the engine should not function properly but should not quit alone. If the engine reports copyprotection error the GUI should not use this engine and display an error message instead!
もし、エラーが発生したら、エンジンは適切に動いてないはずであるが、単独で停止してはならない。もしエンジンがコピープロテクションエラーをレポートしたら、GUIはこのエンジンを使ってはならず、そのかわりにエラーメッセージを表示しなければならない!The code in the engine can look like this:
そのためのエンジンにおけるコードはは以下のようにできる。
TellGUI("copyprotection checking\n");
// ... check the copy protection here ...
if(ok)
TellGUI("copyprotection ok\n");
else
TellGUI("copyprotection error\n");
registration
This is needed for engines that need a username and/or a code to function with all features. Analogously to the copyprotection command the engine can send registration checking after the usiok command followed by either registration ok or registration error. Also after every attempt to register the engine it should answer with registration checking and then either registration ok or registration error.
これは、すべての機能を働かせるのに、ユーザーネーム、暗号を必要とするエンジンにとって必要なものである。In contrast to the copyprotection command, the GUI can use the engine after the engine has reported an error, but should inform the user that the engine is not properly registered and might not use all its features.
コピープロテクションコマンドと対照的に、GUI はエンジンがエラーをレポートした後にエンジンを利用することができる。しかし、ユーザーにエンジンが適切に登録され、すべての機能を使える様になっていないかもしれないことを伝えなければいけない。In addition the GUI should offer to open a dialog to enable registration of the engine. To try to register an engine the GUI can send the register command. The GUI has to always answer with the register command if the engine sends registration error at engine startup (this can also be done with register later) and tell the user somehow that the engine is not registered. This way the engine knows that the GUI can deal with the registration procedure and the user will be informed that the engine is not properly registered.
さらに、GUI は、エンジンの登録を可能にするためのダイアログを用意しなければならない。あるエンジンを登録しようとするために、GUIは register コマンドを送信できる。GUI は、エンジンがエンジン起動時に registration error を送信した場合は、常に register command で返信しなければならない(これは起動後も同様である)。そして、ユーザーにエンジンが登録されていないことをどうにかこうにかして伝えなければならない。このようにして、エンジンは、GUIが登録手続きを処理できることを知り、ユーザーはエンジンが適切に登録されていないことを知らされることになる。
info
The engine wants to send information to the GUI. This should be done whenever one of the info has changed.
エンジンは、GUI に information を送りたい。これは、info がひとつでも変化したしたときはいつでも行われなければならない。The engine can send only selected infos or multiple infos with one info command, e.g. info currmove 2g2f currmovenumber 1 or info depth 12 nodes 123456 nps 100000.
エンジンは、選ばれた info だけを送信することもできるし、複数の info をひとつの info コマンドを用いて送信することもできる。例:info currmove 2g2f currmovenumber 1 or info depth 12 nodes 123456 nps 100000.Also all infos belonging to the pv should be sent together, e.g.
また、pv に属するすべての info は一緒に送信されねばならない。例は以下
info depth 2 score cp 214 time 1242 nodes 2124 nps 34928 pv 2g2f 8c8d 2f2e
I suggest to start sending currmove, currmovenumber, currline and refutation only after one second in order to avoid too much traffic.
私は、トラフィックが混みすぎるのを避けるために、1秒後に、currmove, currmovenumber, currline and refutation だけを送り始めることをすすめる。Additional info:
追加的情報
depth <x>
Search depth in plies.
探索の深さ <X>pliesseldepth <x>
Selective search depth in plies. If the engine sends seldepth there must also be a depth present in the same string.
選択可能な手の探索の深さ。もしエンジンが seldepth を送信したら、同じ string 内にも深さが存在していなければならない。time <x>
The time searched in ms. This should be sent together with the pv.
探索の時間。これは pv とともに送信されねばならない。nodes <x>
x nodes searched. The engine should send this info regularly.
探索されるノード数。エンジンはこの info を定期的に送らなければならない。pv <move1> ... <movei>
The best line found.
発見された最善の手順multipv <num>
This for the multi pv mode. For the best move/pv add multipv 1 in the string when you send the pv. In k-best mode, always send all k variants in k strings together.
これは、複数の pv モードのためのもの。The best move/pv 用には、pv を送信するときに、string 内に multipv 1を付け加える。score
得点
cp <x>
The score from the engine's point of view, in centipawns.
エンジンの見地からの棋譜。In centipawnsmate <y>
Mate in y plies. If the engine is getting mated, use negative values for y.
y手のメイト。エンジンがメイトされる場合は、y にはマイナスの値がはいる。lowerbound
The score is just a lower bound.
得点が下限である。upperbound
The score is just an upper bound.
得点が上限であるcurrmove <move>
Currently searching this move.
現在、この手の探索中currmovenumber <x>
Currently searching move number x, for the first move x should be 1, not 0.
現在、x 手目を探索中。初手は 1 で表され 0 ではない。hashfull <x>
The hash is x permill full. The engine should send this info regularly.
ハッシュは、full の状態のx % 使っている。エンジンはこの info を定期的に送信せねばならない。<x>
x nodes per second searched. the engine should send this info regularly.
探索される一秒あたりのノード数。エンジンはこの info を定期的に送信せねばならない。cpuload <x>
The cpu usage of the engine is x permill.
エンジンのCPU利用は、x % である。string <str>
Any string str which will be displayed be the engine. if there is a string command the rest of the line will be interpreted as <str>.
表示されるあらゆる string str は、エンジンである。もし、string コマンドがあれば、残りのラインは<str>と解釈されるrefutation <move1> <move2> ... <movei>
Move <move1> is refuted by the line <move2> ... <movei>, where i can be any number >= 1. Example: after move 8h2b+ is searched, the engine can send info refutation 8h2b+ 1c2b if 1c2b is the best answer after 8h2b+ or if 1c2b refutes the move 8h2b+. If there is no refutation for 8h2b+ found, the engine should just send info refutation 8h2b+. The engine should only send this if the option USI_ShowRefutations is set to true.
着手<move1>は,<move2>. ... <movei>の手順によって、論破される。<i>nには、1以上の数字がはいる。例:8h2b+という手が探索された後、1c2bが8h2b+の後の最善手とされた場合、ないし、1c2bが8h2b+に勝る場合、エンジンは refutation 8h2b+ 1c2bという info を送信できる。エンジンは、USI_ShowRefutationsのオプションが true に設定されているときのみこれを送信せねばならない。currline <cpunr> <move1> ... <movei>
This is the current line the engine is calculating. <cpunr> is the number of the cpu if the engine is running on more than one cpu. <cpunr> = 1,2,3.... If the engine is just using one cpu, <cpunr> can be omitted. If <cpunr> is greater than 1, always send all k lines in k strings together. The engine should only send this if the option USI_ShowCurrLine is set to true.
これは、現在エンジンが計算している手順である。<cpunr>は、エンジンが1つより多い CPU で動作している場合の CPU の数を表す。<cpunr>は正の整数である。もしエンジンがひとつのCPUしか使っていない場合は、<cpunr>は省略可能である。<cpunr>が1より大きな場合は、常に k string に あらゆる k 手順を載せて、共に送信する。この場合、USI_ShowCurrLineオプションが true に設定されていなければエンジンはこれを送信できない。
option
This command tells the GUI which parameters can be changed in the engine. This should be sent once at engine startup after the usi and the id commands if any parameter can be changed in the engine. The GUI should parse this and build a dialog for the user to change the settings. Note that not every option should appear in this dialog, as some options like USI_Ponder, USI_AnalyseMode, etc. are better handled elsewhere or are set automatically.
このコマンドは、GUI に、エンジンのどのパラメータが変更可能かを伝える。 これは、何らかのパラメータが変更可能である場合、起動時にusiと id コマンドに続いて一度送信されなければならない。GUI はこれを構文分析し、ユーザーが設定を変更できるようなダイアログを作らねばならない。注意すべきは、いくつかのオプション、すなわちUSI_Ponder, USI_AnalyseMode,などは別に扱われたほうがよいか、自動的に設定されるほうが良いように、あらゆるオプションがこのダイアログに現れるべきではないことである。If the user wants to change some settings, the GUI will send a setoption command to the engine.
ユーザーが何らかの設定を変えたい場合は、GUI は setoption コマンドをエンジンに送信する。Note that the GUI need not send the setoption command when starting the engine for every option if it doesn't want to change the default value. For all allowed combinations see the examples below, as some combinations of this tokens don't make sense.
GUI は、デフォルトの値を変更したくない場合は、エンジンを起動するときに setoption コマンドを送信する必要がないことに注意すべきである。許容されるあらゆる組み合わせを下部に例示する。トークン信号のいくつかの組み合わせはつじつまがあわなくなる。One string will be sent for each parameter.
ひとつの string がそれぞれのパラメーターに送信される。name <id>
The option has the name <id>. Whitespace is not allowed in an option name. Note that the name should normally not be displayed directly in the GUI: The GUI should look up the option name in the translation file, and present the translation into the users preferred language in the engine's option dialog.
このオプションは、名称 <id>を有する。空のスペースはオプションの名称として許されない。この名称が通常 GUI に直接表示されわけではないことに留意せよ。GUI は「翻訳ファイル」のオプション名称を参照し、ユーザーの好みの言語に翻訳されて、エンジンのオプションダイアログに表示される。Certain options have a fixed value for <id>, which means that the semantics of this option is fixed. Usually those options should not be displayed in the normal engine options window of the GUI but get a special treatment. USI_Pondering for example should be set automatically when pondering is enabled or disabled in the GUI options. The same for USI_AnalyseMode which should also be set automatically by the GUI. All those certain options have the prefix USI_. If the GUI gets an unknown option with the prefix USI_, it should just ignore it and not display it in the engine's options dialog.
いくつかのオプションは、固定値<id>を持っている。すなわち、このオプションの動作は決まっていることを意味する。通常、これらのオプションは、GUIの普通のエンジンオプションのウィンドウには表示されるべきではないが、例外的に特別扱いすることもある。例えば、USI_Pondering は、GUIのオプションで熟考が可能になったり不可能になったりされたときに自動的に設定がされるべきである。同様に、USI_AnalyseModeについても GUI によって自動的に設定がされるべきである。これらのオプションに共通するのは、USI_という接頭子を持っていることである。もし、GUI 側でUSI_という接頭子つきの見知らぬオプションを見つけたら、それは単純に無視して、エンジンのオプションダイアログに表示させるべきではない。The options with fixed semantics are:
定まった動作をするオプションは以下のようなものである。<id> = USI_Hash, type spin
The value in MB for memory for hash tables can be changed, this should be answered with the first setoptions command at program boot if the engine has sent the appropriate option name Hash command, which should be supported by all engines! So the engine should use a very small hash first as default.
ハッシュテーブル用のメモリーのメガバイト値は、変更可能である。これは、エンジンが正確なオプション名称の Hash コマンドを送っていれば、プログラムブート時の最初の setoptions コマンドに対応して返信されるべきである。これはすべてのエンジンにあてはまる!<id> = USI_Ponder, type check
This means that the engine is able to ponder (i.e. think during the opponent's time). The GUI will send this whenever pondering is possible or not. Note: The engine should not start pondering on its own if this is enabled, this option is only needed because the engine might change its time management algorithm when pondering is allowed.
これは、エンジンが熟考できることを意味する(例えば、相手の時間に考慮する、など)。GUI は、熟考が可能なときもそうでないときもこの信号を送信する。注意:エンジンはこれが可能に成っていても、自分の時間で熟考を始めてはいけない。このオプションは、エンジンが熟考が許されているとき、時間管理のアルゴリズムを変更できるかもしれないという理由でのみ、必要とされる。<id> = USI_OwnBook, type check
This means that the engine has its own opening book which is accessed by the engine itself. If this is set, the engine takes care of the opening book and the GUI will never execute a move out of its book for the engine. If this is set to false by the GUI, the engine should not access its own book.
これは、エンジンが自分でアクセスできる自身の序盤用の棋譜を持っていることを意味する。これが規定されているのならば、エンジンはその序盤の棋譜に留意するし、GUIはそのエンジンの棋譜から離れた手は決して指さない。もしこれが false と GUI によって設定されているならば、エンジンは自身の持つ棋譜にアクセスできないはずである。<id> = USI_MultiPV, type spin
The engine supports multi best line or k-best mode. The default value is 1.
エンジンは複数の最善手順、ないし k-best モードをサポートする。デフォルト値は1である。<id> = USI_ShowCurrLine, type check
The engine can show the current line it is calculating. See info currline above. This option should be false by default.
エンジンは、自身が計算している現在の手順を表示する。丈夫の currline の info を参照のこと。このオプションはデフォルトでは false sであるべきである。<id> = USI_ShowRefutations, type check
The engine can show a move and its refutation in a line. See info refutations above. This option should be false by default.
エンジンは着手と読み筋を手順として見せることができる。上記の info refutations を見よ。このオプションはデフォルトでは false でなければならない。<id> = USI_LimitStrength, type check
The engine is able to limit its strength to a specific dan/kyu number. This should always be implemented together with USI_Strength. This option should be false by default.
エンジンは、自らの強さを特定の段級位に制限することができる。これは、USI_Strength と共に常に実践されねばならない。このオプションもデフォルトでは false でなければならない。<id> = USI_Strength, type spin
The engine can limit its strength within the given interval. Negative numbers are kyu levels, while positive numbers are amateur dan levels. If USI_LimitStrength is set to false, this value should be ignored. If USI_LimitStrength is set to true, the engine should play with this specific strength. This option should always be implemented together with USI_LimitStrength.
エンジンは、ある一定の間隔の間は、実力を制限することがでっきる。負の数字は級位である。一方、正の数字はアマの段位を表す。
もし、USI_LimitStrengthが false に設定されている場合、この値は無視されねばならない。もし、USI_LimitStrengthが true に設定されている場合、エンジンはある特定の実力で対局をせねばならない。このオプションは、常にUSI_LimitStrength.とともに実践されねばならない。<id> = USI_AnalyseMode, type check
The engine wants to behave differently when analysing or playing a game. For example when playing it can use some kind of learning, or an asymetric evaluation function. The GUI should set this option to false if the engine is playing a game, and to true if the engine is analysing.
エンジンは、分析しているときと、対局しているときで違うように振舞いたいものである。例えば、対局中は、それがある種の学習ないし非対称の評価機能をを用いることができる。GUIはエンジンが対局している場合はこのオプションを false に、エンジンが分析しているときは true に設定されねばならない。type <t>
The option has type t. There are 5 different types of options the engine can send:
このオプションは、type t を有する。エンジンが送信できる5種類の異なるオプションのタイプがある。check
A checkbox that can either be true or false.
true もしくは false になりうるチェックボックスである。spin
A spin wheel or slider that can be an integer in a certain range.
ある一定の範囲におさまる整数となりうる回転ハンドルまたはスライダーである。combo
A combo box that can have different predefined strings as a value.
異なるあらかじめ定義された strings を値としてもてるコンボ・ボックスである。button
A button that can be pressed to send a command to the engine
エンジンにコマンドを送信するために押されうるボタンである。string
A text field that has a string as a value, an empty string has the value <empty>.
ひとつのstring を値として持てるテキストフィールドのことである。空の string は <empty>という値を持つ。filename
Similar to string, but is presented as a file browser instead of a text field in the GUI.
string に似ているが、GUI において、テキストフィールドではなく、ファイルブラウザとして示される。default <x>
The default value of this parameter is x.
このオプションの」デフォルト値は x である。min <x>
The minimum value of this parameter is x.
このパラメーターの最小値は x であるmax <x>
The maximum value of this parameter is x.
このパラメーターの最大値は x である。Here are some examples illustrating the different types of options:
以下は、異なるオプションのタイプを指し示したいくつかの例である。"option name Nullmove type check default true\n"
"option name Selectivity type spin default 2 min 0 max 4\n"
"option name Style type combo default Normal var Solid var Normal var Risky\n"
"option name LearningFile type filename default /shogi/my-shogi-engine/learn.bin"
"option name ResetLearning type button\n"
5.4. Examples
This is how the communication when the engine boots can look like:
これは、エンジンをブートするときの通信がどのようになるかを示すものである。
GUI engine
// tell the engine to switch to USI mode
// エンジンに USI モードへ切り替えるように伝える
usi
// engine identify
// エンジンの識別
id name Glaurung Shogi 0.1
id author Tord Romstad
// engine sends the options it can change
// the engine can change the hash size from 8 to 1024 MB
// エンジンが、変えることのできるオプションを送信する。
// エンジンが、ハッシュサイズを8から1024MBに変更できる
option name USI_Hash type spin default 16 min 8 max 1024
// the engine can switch off Nullmove and set the playing style
// エンジンが、Nullmove のスウィッチを切り、棋風を設定
option name Nullmove type check default true
option name Style type combo default Normal var Solid var Normal var Risky
// the engine has sent all parameters and is ready
// エンジンがすべてのパラメーターを送信して、準備ができている
usiok
// Note: here the GUI can already send a "quit" command if it just
// wants to find out details about the engine, so the engine should
// not initialize its internal parameters before here.
// 注意:ここでは、GUI が、エンジンについての詳細を知ろうとする場合に
// は"quit"コマンドを送ることができる。従って、エンジンはこれ以上前に
// 内部パラメーターを初期化してはならない。
// now the GUI sets some values in the engine
// さて、GUI はエンジンのいくつかの値を設定している。
// set hash to 128 MB
// ハッシュを 128MB に設定。
setoption name USI_Hash value 128
// set play style to "Solid"
// 棋風を「手堅い」に設定
setoption name Style value Solid
// waiting for the engine to finish initializing
// エンジンが初期化を完了させるのを待っている
// this command and the answer is required here!
// このコマンドと返信はここで必要になる
isready
// engine has finished setting up the internal values
// エンジンは、内部パラメーターを設定完了。
readyok
// now we are ready to go
// Go できる状態になった
// if the GUI is supporting it, tell the engine that is is
// searching on a game that it hasn't searched on before
// GUIがそれをサポートしているなら、エンジンに以前に探索した
// ことの無い試合を探索していることを伝える
usinewgame
// if the engine supports the "USI_AnalyseMode" option and the next
// search is supposed to be an analysis, the GUI should set
// "USI_AnalyseMode" to true if it is currently set to false with this
// engine.
// もし、エンジンが "USI_AnalyseMode" option をサポートしているのなら、
// 次の探索は分析になるはずである。GUI は、もしエンジンの値が falseに
// 設定されているのなら、"USI_AnalyseMode"の値を true に設定しなければ
// ならない。
setoption name USI_AnalyseMode value true
// tell the engine to search infinite from the start position after
// 1. P-7f 2. P-3d:
// 1手目7六歩2手目3四歩の後の開始局面から無限探索を行うように
// エンジンに伝える
position startpos moves 7g7f 3c3d
go infinite
// the engine starts sending infos about the search to the GUI
// エンジンが探索に関した info を GUI に送信し始める。
// (only some examples are given)
// (単にいくつかの例を並べてみる)
info depth 1
info score cp -2 depth 1 nodes 13 time 5 pv 8h2b+ 3a2b
info depth 1
info score cp 13 depth 1 nodes 24 time 11 pv 2g2f
info depth 2
info nps 15937
info score cp 5 depth 2 nodes 255 time 90 pv 2g2f 4c4d
info depth 3 seldepth 7
info nps 26437
info score cp 20 depth 3 nodes 1123 time 315 pv 2g2f 4c4d 2f2e
...
// here the user has seen enough and asks to stop the searching
// ここでは、ユーザーは十分であり、探索をやめる要求をだす。
stop
// the engine has finished searching and is sending the bestmove command
// which is needed for every "go" command sent to tell the GUI
// that the engine is ready again
// エンジンは、探索を完了し、bestmove コマンドを送信する。
// GUI にエンジンが再び準備ができていると伝えるために、go
// コマンドが毎回送信されることが必要
bestmove 2g2f ponder 4c4d
引き続き大量の翻訳ありがとうございます。
ponderを「熟考」と訳されていますが(辞典にはそう載っていますが)、チェスや将棋のソフトの場合、相手の手番中に次の手を考える「先読み」機能のことを意味します。
ponderhitというのは、エンジンが先読みで予想した通りの手を相手が指してきた時に、それをエンジンに知らせるために使います。
seldepthというのは選択的に読んだ手の深さのことで、もしseldepthを使うのであれば、その前にdepthを使って基本の読みの深さを示しておく必要がある、という意味です。
depth 5 seldepth 8 というように、depthに続けて続けて使うことになります。
scoreは「評価値」という方が普通でしょうか。
投稿情報: 暇人 | 2007年1 月28日 (日) 10:59
実は前回ここもチェックしたんですが,量が膨大なので保留しました.全部一気に書かずに分けて投稿します.
最初に,暇人さんのコメントはおっしゃる通りなんですが,scoreは「(~手で)詰み」なんてのも含み「評価値」より広い意味で使われてます.無理に日本語にすると「結果」辺りでしょうか.文脈で訳し分けるのも(それにこしたことはないけれど)面倒だし逆に原文が推定しにくくなるので,片仮名でスコアにしておくのが無難だと思います.
>その仕様
日本語では「この仕様」or「本仕様」でしょう.This specificationも見ますけどねぇ.
>For Windows, the engine is a normal exe file, either a console or "real" windows application.
Windowsの場合,エンジンは普通のexeファイルで,コンソールあるいは"本当の"ウィンドウ・アプリケーションである.
>標準の入出力で行われる
標準入出力を経由する
の方が日本語としては自然でしょう.
#「標準入出力」という訳語は定着してます.
>The engine should boot and wait for input from the GUI, the engine should wait for the isready or setoption command to set up its internal parameters as the boot process should be as quick as possible.
エンジンは起動後GUIからの入力を待たなければならない.エンジンはできるだけ素早く起動(を完了)すべきなので,内部パラメタの設定はisreadyあるいはsetoptionコマンドを待って行わなければならない.
>stdin からの入力を実行
stdin からの入力を処理
実行と処理は意味が違います.ここでは実行までは要求しておらず,棚上げしないことを要求しているのだと思われます.例えば割り込みに対して「ちょっと待ってね」というメッセージを出して無視する,というのはOKでしょう.
>エンジンが受信するすべてのコマンドの string は
普通に「文字列」の方が良いかと.
>終了する(end with)
「終端する」の方が意味が明確でしょう.まぁ「終える/終わる」でもいいんですが.
>同じOS上でエンジンと GUI を利用するならこの点は問題にならないが、
同じOS上でエンジンと GUI を利用してテキスト・モードで通信するならこの点は問題にならないが、
尚,外来の単語を区切る中黒「・」は本来必要なんですが,最近は省略してる出版社さえあるようです.
>留意する
全体のトーンからするとここは「気を付ける」辺りが良いかと.
>トークン信号間に任意の空のスペースが入ることは容認される
う~ん,流石に堅すぎるような.あと「信号」はどこから?
トークンの間には自由に空白を入れてよい
辺りで.
>The engine will always be in forced mode which means it should never start calculating or pondering without receiving a go command first.
エンジンは常に強制モードである。これはgoコマンドを受信する迄は決して計算やポンダリング<訳注:相手の手番中に計算すること>を開始してはならないという意味である。
#訳注辺りはお好きな様に.
>Before the engine is asked to search on a position, there will always be a position command to tell the engine about the current position.
エンジンが局面の探索を依頼される前には常に、エンジンに現在の局面を教えるためのpositionコマンドがある。
>By default all the opening book handling is done by the GUI, but there is an option for the engine to use its own book (USI_OwnBook option, see below).
序盤定跡は、何も指定しなければ常にGUIが取り扱うが、エンジンが扱うオプションもある(USI_OwnBookオプション、下を見よ)。
>残りの string を解析するようにせねばならない。
その行に残っている文字列を解析すべきである。
>Examples: joho debug on\n should switch the debug mode on given that joho is not defined, debug joho on\n will be undefined however.
例:"joho debug on\n"は、"joho"が未定義の場合、デバッグ・モードをオンにしなければならない。しかし、"debug joho on\n"(の意味)は未定義である。
#中黒「・」は(同前).
#"とjの間に余分な空白有り.
>if the engine receives a command which is not supposed to come, for example stop when the engine is not calculating, it should also just ignore it.
#なぜifは大文字じゃないんだろう?
もしエンジンが来るはずのないコマンド、例えば計算していない時のstop、を受信した時は、同様に、単に無視すべきである。
#仕様書の場合,shouldは「~しなければならない」と訳す方が普通なんですが,どうしたものか.
本日はこれにて失礼 (_ _).
投稿情報: gg | 2007年2 月 1日 (木) 14:14