第18回世界コンピュータ将棋選手権 1次予選 7回戦

7回戦の相手は「白砂将棋」。
作者の方が挨拶に来られた後、対局が始まりました。


7手目に先手白砂将棋が▲78飛と振り、ym将棋にとっては経験不足の展開に。
ym将棋は16手目、△55角と進出させた後、次の18手目、今度も△33桂と跳ね、角の退路を断ってしまいました。


先手白砂将棋は、飛車を左に振ったので、王様を右に囲うのかなと思っていると、19手目に▲58玉。
その後は、55に進出した後手の角が先手の銀に追い回され、24手目に△35角まで追われると、次の白砂将棋の一手は▲67玉。
囲うにしては変な場所に持ってくるなと首をひねりました。


その後、28手目にym将棋が△21玉として守りに入ると、白砂将棋は▲69飛。飛車を1筋戻しました。
そこでym将棋が△86歩と仕掛けます。
図は30手目、△86歩まで。

後手の持駒:なし
  9 8 7 6 5 4 3 2 1
                                                        • +
v香v桂 ・v金 ・ ・ ・v玉v香
・v飛 ・v銀 ・v銀v金 ・ ・
v歩 ・v歩v歩 ・v歩v桂v歩v歩
・ ・ ・ ・v歩 ・v歩 ・ ・
・ ・ 歩 歩 ・ ・v角 ・ ・
・v歩 ・ 銀 ・ ・ ・ ・ ・
歩 歩 ・ 玉 歩 歩 歩 歩 歩
・ 角 金 ・ ・ ・ ・ ・ ・
香 桂 ・ 飛 ・ 金 銀 桂 香
                                                        • +
先手の持駒:なし 先手:hakusa 後手:ymshogi

ym将棋はこの時7手読みの途中で打ち切り、△86飛▲同歩△同飛▲77角△85飛▲68玉△53角という読み筋で、評価値は-800くらいで後手有利と判断していました。
ディスプレイを見ていた私も、歩を交換するのだろうと思った瞬間、白砂将棋は▲76玉。王様が最前線に出てきました。


この時のym将棋の読み筋は、6手読みで、最初△87歩成▲同金△45桂▲77玉△57桂成▲83歩打という読み筋で、評価値は-1000くらいで後手有利の判断。
その後、△45桂▲67飛△94歩▲96歩△44角▲56歩、という読み筋を見つけ、評価値を-1500くらいに高め、結局△45桂と指しました。
途中の△94歩の意味はよく分りません。水平線効果でしょうか。


ともかく、△45桂の次の狙いは△57桂であることは間違いないので、57の地点を受けるために、白砂将棋は▲79角としてきました。
ym将棋は▲67飛と予測していたのであてが外れ、結局△87歩成▲同金と歩の交換になりました。
その後、白砂将棋は▲46歩とさっき跳ねた桂を攻めにきます。
図は37手目、▲46歩まで。

後手の持駒:歩
  9 8 7 6 5 4 3 2 1
                                                        • +
v香v桂 ・v金 ・ ・ ・v玉v香
・v飛 ・v銀 ・v銀v金 ・ ・
v歩 ・v歩v歩v角v歩 ・v歩v歩
・ ・ ・ ・v歩 ・v歩 ・ ・
・ ・ 歩 歩 ・v桂 ・ ・ ・
・ ・ 玉 銀 ・ 歩 ・ ・ ・
歩 金 ・ ・ 歩 ・ 歩 歩 歩
・ ・ ・ ・ ・ ・ ・ ・ ・
香 桂 角 飛 ・ 金 銀 桂 香
                                                        • +
先手の持駒:歩 後手番 先手:hakusa 後手:ymshogi

ym将棋はここで、意味不明の△94歩。
ログを見ると、ym将棋はこの時6手読みの途中で打ち切り、△94歩▲86歩打△44角▲67玉△37桂▲58玉という読み筋で、評価値は-600くらいで後手有利の判断。
これも水平線効果かもしれませんが、相手は王様を固めるのが最善という、実に都合のいい読みをしています。
その直前までは△37桂▲同桂…という順も読んでいたのですが、わずかな差で△94歩が指されました。


白砂将棋はもちろん▲45歩と桂を取りますが、これにym将棋は△44歩。
▲44同歩△同角と読んでいたのではなく、ここでも都合のいい読みで、△44歩▲77玉△45歩▲86歩打△33銀▲88玉、という意味不明な読み筋。
ただ評価値はプラスに転じ、まずいことが起こっているのは理解したようです。


実戦でも▲44同歩とされますが、ここでは△同角でなく△93桂とし、▲45桂打とされてからやっと△44同角と取りました。
図は46手目、△44角まで。

後手の持駒:歩二
  9 8 7 6 5 4 3 2 1
                                                        • +
v香 ・ ・v金 ・ ・ ・v玉v香
・v飛 ・v銀 ・v銀 ・ ・ ・
v桂 ・v歩v歩 ・ ・v金v歩v歩
v歩 ・ ・ ・v歩v角v歩 ・ ・
・ ・ 歩 歩 ・ 桂 ・ ・ ・
・ ・ 玉 銀 ・ ・ ・ ・ ・
歩 金 ・ ・ 歩 ・ 歩 歩 歩
・ ・ ・ 飛 ・ ・ ・ ・ ・
香 桂 角 ・ ・ 金 銀 桂 香
                                                        • +
先手の持駒:歩二 先手:hakusa 後手:ymshogi

この時点で、ym将棋はほぼ互角と判断しています。
次の47手目で、白砂将棋が▲83歩打と水平線効果のような手を指し、即決で△83同飛と取りますが、その後▲33桂成△同銀▲43金打△66角▲同玉、とどんどん駒損していきます。
ここで一応△87飛成と龍は作ったのですが、白砂将棋はさらに▲32角打と攻め込んできます。


この後は、角を取れないので△22玉と逃げ、▲33金△同玉▲54角成△44金打▲同馬△同玉と激しい手が続き、先手と後手の王様が66と44でにらみ合うものすごい形になりました。
図は62手目、△44同玉まで。

後手の持駒:角 金 銀 桂 歩三
  9 8 7 6 5 4 3 2 1
                                                        • +
v香 ・ ・v金 ・ ・ ・ ・v香
・ ・ ・v銀 ・ ・ ・ ・ ・
v桂 ・v歩v歩 ・ ・ ・v歩v歩
v歩 ・ ・ ・ ・v玉v歩 ・ ・
・ ・ 歩 歩 ・ ・ ・ ・ ・
・ ・ ・ 玉 ・ ・ ・ ・ ・
歩v龍 ・ ・ 歩 ・ 歩 歩 歩
・ ・ ・ 飛 ・ ・ ・ ・ ・
香 桂 角 ・ ・ 金 銀 桂 香
                                                        • +
先手の持駒:金 銀 歩二 先手:hakusa 後手:ymshogi

これだけ激しく駒を取りあったにもかかわらず、枚数を数えてみると、全く互角です。
ym将棋は+400くらいで先手がやや有利と判断しています。


この後、思いもよらない展開が待ち受けていました。
先手白砂将棋がさらに▲48飛△33玉と攻めた後、急に指し手を返して来なくなってしまったのです。
確か思考時間が2分を過ぎたころ、私は白砂将棋の方の席に伺い、状況をお聞きしてみました。
プログラムの挙動がおかしくなったようで、思考が異常に遅くなった。どこかでループしているかもしれない、というお話でした。
「再探索などはしているのですか」と聞いてみると、それはしていないが、王手がかかっているときは特別な処理があるそうで、そこが原因かもしれないとのこと。
ディスプレイの表示を見せていただくと、確かに速度は遅いものの探索は進んでいるようで、いずれは手を返してきそうでした。
そして、8分51秒の大長考の末、ディスプレイに指し手が表示されました。▲44銀打。
それまでの消費時間は、ym将棋の14分31秒に対し、白砂将棋はわずかに4分44秒だったのですが、この1手で13分35秒となりました。


とにかく対局が続いたことにほっとして、私は自席に戻りました。
しかし、ym将棋が△22玉と逃げた後、また指し手がやってきません。
再度状況を伺うと、先ほどと同じ事象のようです。
「時間監視はしていないんですか?」
とお聞きしてみると、時間が来たら切るのではなく、思考開始時の消費時間に応じて、探索の深さをを変えているとのこと。
従って、一度7手読みと決めたら、どんなに時間を使っても7手読むということのようです。
ディスプレイを見ても、さっきと同じく探索は進んでいるようなので、とにかく待ち続けていました。
場内にも、「白砂将棋が大長考中です」とのアナウンスが。


9分54秒後、▲88歩打という龍取りの手が返ってきました。白砂将棋の消費時間は、23分29秒。ym将棋は15分03秒なので、一気に逆転しました。
後手ym将棋は龍取りに対し、△67金打と王手してから、△84龍と先手の銀を取りに行きます。
この後、3手読み→1手読みとなった先手が▲33金打とさらに攻めてきますが、後手が△12玉と逃げると、攻めが続かなかったのか▲34金と歩を補給。
△42桂打▲43金の後、後手ym将棋は△24角打。
図は76手目、△24角打まで。

後手の持駒:銀 歩三
  9 8 7 6 5 4 3 2 1
                                                        • +
v香 ・ ・v金 ・ ・ ・ ・v香
・ ・ ・v銀 ・v桂 ・ ・v玉
v桂 ・v歩v歩 ・ 金 ・v歩v歩
v歩v龍 ・ ・ ・ 銀 ・v角 ・
・ ・ 歩 歩 玉 ・ ・ ・ ・
・ ・ ・ ・ ・ ・ ・ ・ ・
歩 ・ ・v金 歩 ・ 歩 歩 歩
・ 歩 ・ ・ ・ 飛 ・ ・ ・
香 桂 角 ・ ・ 金 銀 桂 香
                                                        • +
先手の持駒:歩二 先手:hakusa 後手:ymshogi

この手は、白砂将棋の作者の方が「自然な手ですね」とおっしゃっていました。
ログを見てみると、この時ym将棋は5手読みを途中で打ち切っていて、△31銀打、△75龍、△24角打の3種類の手を読んでいましたが、最後に見つけた△24角打が一番評価が高かったので、それを指したようです。
おそらく、△57角成という手を見つつ、そのままでも先手玉の周りにもにらみを利かせ、さらに42の桂にヒモを付けている、ということで評価が高くなったのだと思われます。
最後はym将棋が△54龍で先手の王様を都詰めにし、最終戦を勝利で飾りました。
以下、投了図です。

後手の持駒:銀 歩四
  9 8 7 6 5 4 3 2 1
                                                        • +
v香 ・ ・v金 ・ ・ ・ ・v香
・ ・ ・v銀 ・v桂 ・ ・v玉
v桂 ・v歩v歩 ・ 金 ・v歩v歩
v歩 ・ ・ ・v龍 銀 ・v角 ・
・ ・ 歩 歩 玉 ・ ・ ・ ・
・ ・ ・ ・ ・ ・ ・ ・ ・
歩 ・ ・v金 歩 ・ 歩 歩 歩
・ 歩 ・ ・ ・ 飛 ・ ・ ・
香 桂 角 ・ ・ 金 銀 桂 香
                                                        • +
先手の持駒:歩 先手:hakusa 後手:ymshogi


時間切れでの勝ちではなく、相手玉を詰ませて勝ったのが嬉しかったです。


将棋そのものではなく、プログラムの信頼性とか、フェイルセーフとか、そういうことを考えさせられる対局でした。
4回戦で対戦した「なのは」も、プログラムのループで勝ちを落としたわけですが、なのはの時間監視は思考ルーチンの中で行っているとのことで、思考ルーチン自体が暴走してしまうとお手上げになってしまうわけです。
実はym将棋も、選手権の前夜に自宅で練習対局をしていたところ、思考ルーチンが暴走し、いつまでたっても手を返さない事象が起きてしまいました。
初めてのことだったので真っ青に。
明日は本番なので、もう原因を探る暇もないし、かといって本番で起きても困る。
ということで、邪道ではあるのですが、「思考を止める指示を出してから、少し待っても思考ルーチンのスレッドが終了しない場合、終了を待たずに最善手を返してしまう」という処理を追加しました。
これは、「れさぴょん for Java」と同じく、時間監視と最善手の保存が思考ルーチンと別スレッドになっていたのでできたことです。
もちろん無限ループなど起きない方がいいに決まっているのですが、起きた場合にも被害を最小限に食い止めるような対策が必要なのかもしれません。