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

3回戦の相手は「まったりゆうちゃん」。
選手権では3年前に一度対戦して敗れており、今回が2度目の対戦です。

棋譜はこちら。
http://homepage.mac.com/junichi_takada/wcsc22/kifu/WCSC22_L3_YUU_YMS.html

この対局は今までで一番悔しかったかもしれません。

44手目まで駒の取り合いが一切なく、図の局面に。

後手:ymshogi
後手の持駒:なし
  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歩 ・ 歩 ・ ・ ・ 歩 ・
・ ・ 歩 ・ 歩 歩 歩 ・ 歩
・ 歩 角 ・ 銀 ・ 桂 ・ ・
・ ・ 銀 金 ・ ・ ・ 飛 ・
香 桂 玉 金 ・ ・ ・ ・ 香
                                                        • +
先手:yuuchan 先手の持駒:なし 手数=44 ▽3三角 まで

ここで先手まったりゆうちゃんが▲45歩△同歩▲33角成△同桂と仕掛けてきます。
そこからしばらく、評価値は-400程度で若干後手優勢の状態が続き、
次に評価値が動いたのはこの辺の局面です。

後手:ymshogi
後手の持駒:角 歩二 
  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歩 歩 歩 ・ ・ ・ ・ ・
・ ・ ・ 角 歩 ・ 歩 飛 歩
・ 歩 桂 ・ 銀 ・ ・ ・ ・
・ ・ 銀 金 ・ ・ ・ ・ ・
香 ・ 玉 金 ・ ・ ・ ・ 香
                                                        • +
先手:yuuchan 先手の持駒:桂 歩  手数=72 ▽8二飛 まで

まったりゆうちゃんは、ここで▲44角と角を切って、取った銀を▲22銀打と打ちこんできました。
それに対してym将棋は△37角打と飛車を狙いに行くのですが、この時はモンテカルロ探索で指していました。
通常の探索では△21歩打を読んでいたものの、評価値がほぼ互角であったこと、またモンテカルロ探索で△21歩打の勝率が△37角打の勝率より大幅に低かったのが理由です。


この後▲31銀成△同玉▲22金打△41玉と進んだのが次の局面。

後手:ymshogi
後手の持駒:角 銀 歩二 
  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角 ・ ・
・ ・ 銀 金 ・ ・ ・ ・ ・
香 ・ 玉 金 ・ ・ ・ ・ 香
                                                        • +
先手:yuuchan 先手の持駒:桂 歩  手数=80 ▽4一玉 まで

ここから▲27飛△19角成と馬を作り、評価値は一気に後手有利に振れていきました。
しかし、ym将棋も駒得はするものの、まったりゆうちゃんの陣形を崩せず、逆に攻め込まれます。

後手:ymshogi
後手の持駒:歩七 
  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銀
香 ・ 玉 金 ・ ・ ・ ・ ・
                                                        • +
先手:yuuchan 先手の持駒:香 歩二  手数=109 ▲2五桂 まで 後手番


上図の▲25桂から、△32金▲33歩打△22金▲同歩成△同飛▲32金打とされたところで、突然対局が終わってしまいました。

慌てて将棋所のデバッグウィンドウを開けてみると、通信エラーのメッセージが出ていたので、
またかと思ったのですが、よく見ると、その前にym将棋が#TORYOを返していました。
後でデバッグログを見たら、ArrayIndexOutOfBoundsException*1が発生していて、通常探索のスレッドが異常終了。
それを受けて、時間監視スレッドの方で指し手をサーバに返そうとしたところ、異常終了したために返す指し手が無かったので、投了を返したということが判明。


Exceptionが起きたのは、局面(Boardクラス)の指し手を1手戻す処理でした。
取った駒を元に戻すときに、持ち駒に戻ることで評価値を計算し直しているんですが、持ち駒の数が異常になったと推測されます。
が、ここ数年直していない処理で、再現もしないので、根本的には原因は分かっていません。


昼休みの間に、応急処置として、通常探索のスレッドで探索中にルートの最善手を更新するたびに、時間監視スレッドに最善手を通知するように修正。
途中で異常終了しても、それまでの探索結果を返せるようにしました。


なお、最後に通信エラーが出ていたのは、対局が終わったのでLOGOUTしようとしたところ、サーバ側の原因で処理できなかったのが原因とのことでした。
今までバグが直接の原因で負けたことはなかったので、悔しい思いです。
1勝2敗。

*1:配列のインデックスが規定の範囲を超えた