将棋界でもチェスのフィッシャールールが取り入れられることが多くなってきた。フィッシャールールとは、1手ごとにN秒加算するというルールである。
フィッシャールールのメリットについて書き出すとこの記事が終わらなくなるので、気になる人はググってほしい。
それで、「持ち時間30秒、1手につき10秒加算」というルールで対局を開始した場合、初手は何秒で時間切れになるかという問題がある。私は10秒加算が行われるのは着手後だと思っていたので初手は30秒で時間切れだと解釈していた。実際、Abemaトーナメントではそうなっているし、WinBoardというチェスソフトのGUIでもそうなっている。
しかし、将棋ソフトの世界ではどうも異なるようである。初手の時点で(着手前に)10秒加算されていて、初手で40秒考慮できるというのだ。将棋ソフト開発者でも知らない人がたくさんいたようでこの事実に騒然となっている。
将棋ソフトではUSIプロトコルというプロトコルに基づいてGUI側と思考エンジンとはやりとりをしているが、このUSIプロトコルではそう定められているのだ。
go btime 40000 wtime 50000 binc 10000 winc 10000
つまり、「先手の残り時間40秒、後手の残り時間50秒、先手の加算10秒、後手の加算10秒」の形で送ります。するとエンジン側では、次の手で先手は残り時間と加算を合わせて最大50秒考えることができ、次の手に進んだあとも1手につき10秒加算されることがわかります。
USIプロトコルとは : http://shogidokoro.starfree.jp/usi.html
実際、将棋所でも上のような挙動になっている。まあ、上の「USIプロトコル」を定めている人=将棋所の作者であるので、自分で定めたプロトコルに将棋所が従っているのは当然なのかも知れないが。
しかしこの仕様、実に違和感があるな。
「1手につき10秒加算」と言ってるのに「1手」も指してないのに加算されてるのおかしくない?
まあ、USIプロトコルの作者の気持ちに立って考えてみるに、秒読みに関して、「持ち時間なし、秒読み10秒」の場合は、
go btime 0 wtime 0 byoyomi 10000
のように送ることになっている。つまり、着手前の段階で、この「byoyomi 10000」は加算して考えなければならないから、フィッシャールールを秒読みの拡張として考えるならば、binc , wincも着手前に加算されているのが自然である。
…と、こんなところであろうか。
やねうら王では、上の仕様だとは知らずに実装していたので、「持ち時間なし、1手につき10秒加算」のときは初手を即指ししていた。私は別の作業中に気づいたので、これをさっき修正した。これに合わせて、将棋神やねうら王のほうも修正せねばならない。色々大変である。
ちなみにシチズンの対局時計(チェスクロック)でも、初手には加算時間は含まれない。
本稿で触れられてる「USIプロトコル」は将棋所の作者といってもいいかもしれませんが、本来のUSIプロトコルの作者はTordRomstadさんでは?(原案だけ?)
気になって原案をチラ見してみましたが、binc, wincは increment per moveなので、着手後加算ですかね。
GUI周りは将棋所とShogiGUIの2強(通信対戦に関しては将棋所1強)なので、こういうデファクトスタンダード相手は大変そうですね、MyShogiがもっと流行ればいいんですが…
Tord Romstad は原案を作って それを実装したのが将棋所だけだったので USIプロトコルの管理者=将棋所だぜ☆(^~^) 過去から遡って USIに対応した すべての将棋エンジンは、未来に出てくるすべての将棋エンジンと対局できる、が思想なので、それが守れれば 拡張すればいいんじゃねーの☆(^~^)
配列が[0]から始まるか、[1]から始まるか、みたいな?w