USIプロトコルにはUCI(UCIのCはChessのC)プロトコルから詰将棋まわりのコマンドが追加されています。
さて、この詰将棋まわりのコマンドなのですが、協力詰めを実装したときに見たら、「おや?」と思うことがあったのでここに書いておきます。(将棋所の作者ならびにUSIプロトコルを批判する意図はないのです。)
なんとかちゃんねるで指摘をもらったのですが、協力詰めsolverに解けない問題を与えると探索深さがMAX_PLYまで到達してそのまま応答を返さない(CPU使用率は0%に戻っている)とのことでした。
そうです。反復深化の探索深さがMAX_PLYになっても解けなかったときにどうしていいか、私にはよくわからなかったので何も処理を書いていなかったからです。
これに対して『詰みません』と表示されるべきではないか?という意見があります。
すなわち、checkmate nomateを出力すべきではないかと。
これはちょっと疑問です。
一般的に言って詰将棋solverの出力する解答には次の3種類があります。
1) 詰む(ことが証明できた)
2) 詰まない(ことが証明できた)
3) 詰むかどうかわからない(自分の能力では)
ところが、USIプロトコルでcheckmateコマンドは次のように規定されています。
> nomate
> 詰将棋を解いて、「この問題は詰まない」という結論が出たら、
> checkmate nomateを返します。
これはストレートに解釈すると上記の2)に該当します。
しかし今回のケースは3)に該当するのです。
USIプロトコルでは本来、この3)に対応するメッセージを規定すべきなのです。
言うまでもなく2)と3)は詰将棋においては大きく意味が異なります。
3)のものを2)だと解答したら詰将棋作家に怒られます。
だから私は3)のものを2)だとは解答したくないのです。2)だと解答するぐらいなら出力はなくてもいいかなと。それでも何らか出力は欲しい気はするので、このときcheckmateコマンドではなくinfo stringで何らかの文字列を出力したほうがいいのかも知れません。
しかしcheckmate XXX を返すまで将棋所は思考エンジンが探索中だと思って待機状態になってしまいます。
そこで
checkmate nomate
を返しつつ、
info string give up
のように表示するのがいいのかなと思いました。
使われているものでもそういう抜けがあるのですね。
これが火種になって改善されればいいと思います。
ところでUSIを設定したのって外人さんでしたっけ?
UCIのほう(を設計したの)は外人さん。USIのほうは将棋所の作者です。
それなりに近くに設計者がいるのですね。
日本語が通じるなら早急に話が回ることを祈っています。
USI原案作ったのも日本人ではないかと。実装と拡張は日本人だと思いますが。
http://www.geocities.jp/shogidokoro/usi.html
> USI原案作ったのも日本人ではないかと。
ほほー、そうだったんですね…。
USI原案のページ、ドメインごと売りに出されてる…。
あら、外人さんの設定でしたか。
もう何年も前にそのページを見た記憶しかなかったのであやふやでした。汗
日本語通じればいいんですけどね。
って、ドメイン売られてたら元締めは誰になるのか。
ここに引っ越したみたい?
http://hgm.nubati.net/usi.html
商用ソフトの激指も3のケースで昔は「詰みません」と出力されてました。
ほほー..面白いですね。