TadaoYamaokaの日記

山岡忠夫Homeで公開しているプログラムの開発ネタを中心に書いていきます。

cshogiのバグ修正とdlshogi-zeroの更新

cshogiにいくつかバグがあったので修正した。

move16がデグレード

やねうら王の教師局面に対応した際に、move16がデグレードしていた。
単純な編集ミスだったので修正した。

千日手が判定できないバグ

board.is_draw()

は、引数に遡る手数を受け取るが、デフォルト引数の場合開始局面まで調べる。
デフォルト引数の場合、intの正の最大値にしていたが、2^31-1とするところを2^31にしていたので負数になっており千日手が判定できなくなっていた。

連続王手の千日手が判定できないバグ

USIエンジン同士の対局で連続王手の千日手が判定できていなかった。

連続王手の千日手には、2パターンあって一つは、連続王手した局面が4回繰り返した局面の場合で、指した後の局面の手番で判定するので定数REPETITION_WINになる。

もう一パターンは、特殊なパターンで、連続王手から逃れた局面が4回繰り返した局面になる場合である。かずさんのブログに具体例がある。
こちらは、定数REPETITION_LOSEになる。

REPETITION_WINは、対応しているつもりだったがバグがあって判定できていなかった。
REPETITION_LOSEは、そもそも対応していなかった。
両方正しく判定できるように修正した。

dlshogi-zeroの更新

cshogiの更新に合わせてdlshogi-zeroが動かなくなっていたので、最新版で動くように更新した。
dlshogi-zeroは、技術書典で頒布したディープラーニングを使った将棋AIの作り方3のために作成したプログラムだが、たまに電子版を買ってくださる方いるので対応した。