USIプロトコルの詰将棋まわり

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プロトコルの詰将棋まわり」への9件のフィードバック

  1. 使われているものでもそういう抜けがあるのですね。
    これが火種になって改善されればいいと思います。
    ところでUSIを設定したのって外人さんでしたっけ?

Yakitori へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です