電王戦第2局においてSeleneが相手の角不成に対して非合法手を指して反則負けになった件ですが、理由は私には想像つくので、以下に書いておきます。

このようにしてUSIの指し手文字列から内部の指し手構造体での形式に変換しているのですが、「現在の局面の合法手すべてを生成して」の部分でSeleneは、角不成を生成してないんですね。ここは、探索中に角不成を生成していなくとも、このときばかりは生成しなくてはならないのですが、それをやっていないのでしょう。

なので、角不成に対応するUSI文字列が送られてくるとそれを非合法手として認識して、そこで局面を進めるのをリタイアしてしまうのだと思います。(その結果、その1手前の局面が探索開始局面として設定されることになるので、何らかの誤動作が生じます。)

今回のやねうら王は、そのへんちゃんとやってます。まあ、自己対戦だとお互い不成を読んでいない＆指さないのでなかなか気づきにくいバグではあります。棋譜からの学習のときにちゃんと読み込めていない棋譜がないかをチェックすれば気づくとは思うのですが、西海枝さんは面倒だからそういうチェックはやってなかったのか、たまたま使用している棋譜にそういう指し手がなかなったのか…。

まあ、何にせよ、将棋ソフト界隈ではよくあることでありまして、76歩34歩33角不成(ただ捨て！)の3手で試合が終了しなくて本当に良かったなぁと、我がごとのように思いました。