USIに文句を言うだけ言う

USIプロトコルに感じた不満を書いていく。おおむね不満が大きい順。
対案も示さず文句ばっかり申し訳ない。

ただ、こういうのは「変わらないこと」「変わらないという信用があること」が重要なので、
仮によい改善案が出たとしても、単に変えればいいという話ではない。

ponder

ponder(先読み)は、それ自体をUSIの仕様から削除すべきだと思う。
予測読みのやり方は、エンジン作者が考えるべき問題だ。
そのやり方を1種類に決めてGUIがサポートしてはならないと思う。
これは使いやすさ以前の問題だ。

setoption

setoptionで、エンジン側で設定を保存する必要があるのがおかしい。
ファイルに設定を保存するというのは、それだけで相当な手間である。
USI_PonderとUSI_Hashだけ保存しなくていいというのも一貫性がなく面倒だ。
そもそもハッシュサイズを1MB単位で指定するという仕様も変だ。

position

毎回全ての指し手を書く必要があるのは糞。
N手の将棋でやり取りされるpositionのデータ量がO(N^2)になる時点でキモい。
どうせエンジン側では、ハッシュや千日手の関係とかで、
手が進んだのか待ったなのか別の局面なのか調べる必要が出てくるから、
エンジンを作るのが簡単になるわけでもない。

また、せっかくsfenに対応したのに、startposにも対応するのは面倒だ。
まあ、長くなるのでstartposがあってもいいけど。

SFEN

USIでは、棋譜をSFENという方式で表す。
これは、USIがUCI(チェス用のプロトコル)を元にしているので仕方ないのだが、
日本人は8hがどの升を表すかわからないし、パーサを書くのもプチめんどくさい。
飛車がRookのrで表されるのも、チェスの知識を要求される。
チェス圏の人がコンピュータ将棋に参入しやすくなる意味はあると思うけども。

あと、空き升を升の数で表すとか誰が得するのかわからない。

go infinite

次にstopが送られてくる前にbestmoveを返してはいけません。

http://www.geocities.jp/shogidokoro/usi.html

細かいところだけど、不安になるエンジン作者がいたらいけないので。
勝ちを読み切った場合などは当然bestmoveを返していいはず。

usinewgame

このコマンドの意味するところがよくわからない。
異なる対局を始めるからハッシュをクリアしたほうがいいとか、
対局が始まったからsetoptionなどのコマンドを受け付ける義務がなくなったとか、
いくつか考えられるが、仕様に明示されていないと使えない。
ぶっちゃけ、なくてもいいコマンドなので、その辺りの説明は欲しい。