「やねうら王」の定跡を無効化する方法

「第28回世界コンピュータ将棋選手権」の定跡を作成しているときに気がついたことがある。

「やねうら王」の探索部って

相手陣2段目の香車不成りとか
歩の「と金」不成りとか
大駒の不成り

たぶんこういった指し手がプログラム的に除外されている。


もちろん上記は将棋的にちょっとありえない感じなので良いと思う。

でもタイトルと上記プログラムで気づいた人もいると思う。

定跡でいきなり序盤「角換わり」で「角不成り」したらどうなると思う?


正解は

1)定跡で登録した不成りを認識しないので定跡が切れて思考します。
※バグって止まったりはしません

2)不成りを指された場合の対応手は選択します。
 (普通にソコに不成りの角がある局面と認識)


しかし「やねうら定跡」は連続して定跡が外れると、
以降合流しても定跡選択しなくなくなりますよね。

なので、こちらのプログラムの除外を書き換え、
「角換わり」で「角不成り」を指す。
相手にその応手が定跡で登録されていない場合は定跡が切れます。
そして次に普通は「銀」を動かす所を「金」等を動かして、
連続して定跡を外せば以降相手は定跡選択しません。


「第28回世界コンピュータ将棋選手権」のクジラチームの後手で
「角換わり」を仕掛けて次に△3二金としてたのは、
この不具合動作の実験の名残りです。
大会中、変な定跡だな?って思った人もいたかと思いますが、
こんな理由がありました。


1年に1回のコンピュータ将棋の大会で
こんなことして勝ったとして「なんだこいつ?」ってなるでしょ。
だからやろうと思わなかったけど、
もし「電王トーナメント」のような賞金のかかった一発勝負だったらどうでしょうね?

一度このプログラムのままが良いのか考えてはどうでしょうか?




【追記】
「やねうら定跡」形式では、すべて同一の条件にヒットする局面である場合は、
一度外れた局面から合流した場合でも指し手合流するのでは?

こちらで簡単に見たところ選択しませんでした。

考えられる原因
1)外部ツールを使用して変換しているから
 合流するような局面においては、定跡ツリーをバイパスでつなげた指し手群じゃないとダメかも
 (これはApery定跡、技巧定跡においても同様なので)
※正規の使用用途で作成された「やねうら定跡」で、連続して外れた局面から合流しても定跡選択したよ。っていう棋譜をお持ちの方がいれば教えて頂けるとありがたいです。


局面合流しても指さない原因はもしかしてこれ?
定跡のソート機能

> makebook sort book_src.db book_sorted.db

sfen文字列でソートします。上例では、book_src.dbを読み込み、並び替えられた、book_sorted.dbを出力します。

定跡をメモリに丸読みしたくないときには(BookOnTheFly機能)、並び変わっていないといけません。(sfen文字列順でソートされていないとバイナリサーチが出来ないため。)

「やねうら王を使って定跡を作る」より引用

この記事へのコメント

スポンサーリンク