やねうら王系列最強(?)のQhapaq定跡を公開します(二代目)[12.18マニュアル更新]

アドベントカレンダーで紹介した「定跡スナイパー理論」に基づいて独自に作成した、やねうら王のstandard_book.db形式の定跡ファイルを公開します。

【重要】onedriveの課金契約がそろそろ切れるので、このファイルは引っ越しする可能性があります。twitter 等で拡散する際は、本ブログのページを拡散していただけると幸いです。

https://1drv.ms/u/s!Ag5CrRBmeQHym1eN0ayk5kjCjBLA

前のバージョンはこちら:

やねうら王系列最強(?)のQhapaq定跡を公開します - qhapaq’s diary

定跡スナイパー理論についてはこちら:

コンピュータ将棋における定跡とメタゲーム - qhapaq’s diary


同時に、スナイパー定跡を高速に抽出する手法、「量子ガシャ」(QuantumGasha、略してカガとお呼びください)用のルーチンを搭載した
やねうら王Quagaと量子ガシャによる定跡作成ツール群も公開します(ただし極めて使いにくいです。余裕があったら今後アップデートします)。やねうら王Quagaは真やねうら王のnarrowbook部分を書き換えたものです。

https://1drv.ms/u/s!Ag5CrRBmeQHym1jRQupgBuACe1Sm

ソースコードはこちら:

https://1drv.ms/u/s!Ag5CrRBmeQHym1tb0Pg60-tcUS9T

正直、バグやらマニュアルの不備やらで無事に動かない確率がかなり高いと思います。トラブルが生じた際は私のtwitterまでご連絡ください。


【使い方 for 河童定跡】
standard_book.dbをこのファイルに挿げ替えてください。
やねうら王でnarrowbookをonにするか、やねうら王QuagaでQuantumbookをonにしてお使いください。offでも動きますが、恐らく弱くなります(未検証)

【特徴】
・standarad_book形式(棋譜にある手をそのまま指す)形式です
・それなりに幅広い手を指すようにしています(先手後手あわせて1800局程度収録)
・手元のPCでの0.2秒対局(2コア、一手当たりに読む鏡面は10万程度、最新版Qhapaqバイナリ(非公開、真やねバイナリより少しだけ強い))で

vs 真定跡 813 - 63 -716

vs 浮かむ瀬 with まふ定跡 1511 - 97 - 2020

参考資料:

真定跡 vs 浮かむ瀬 with まふ定跡 907 - 90 - 1769

※:浮かむ瀬はやねうら王に比べ短い時間で強くなるようにチューニングされています。故に定跡の質が全く同じでも勝率は50%にはなりません。余談ですが、長い持ち時間ではやねうら王のほうが強くなるそうです(参考:http://www.uuunuuun.com/

※:本来は河童定跡を浮かむ瀬で動かすか、まふ定跡をやねうら王で動かすべきなのですが、インフラ整備をする暇がなかったので読者の宿題とします。


という成績をあげています。既存定跡に対する勝率はあまり上がりませんでした(もとい、まふ定跡への勝率が下がるのが嫌で前のバージョンから変えてない)が、まふ定跡への対策をかなり厚くしました。他のやねうら王定跡に対してレート20ちょい、対まふ定跡については他定跡に比べ50程度上昇しています。

 

【手法としての特徴】
・定跡生成に人間による局面評価を一切挟んでいません。
・相手の癖や手の勝ちやすさを機械が自動で解析+対策する仕様ですのでソフト対策や戦型研究にも使えるはずです

【WCSC参加者の皆様へ】
まふ定跡、やねうら王ライブラリの定跡との対局棋譜をベースに作っているので、私にどれだけ著作権があるかは謎ですが、私個人はWCSC参加者の本ライブラリの仕様を妨げることは致しません。ただ、ご利用の際は、使っている旨をアピール文などに書いていただけると幸いです。仮に私に著作権があるなら、本定跡はGPLライセンスに従います。

まふ定跡の扱いについてのまふ氏の見解は、2016/12/13時点では、最新版まふ定跡のreadmeにて確認可能です。

【謝辞】
本定跡の作成にあたり、定跡の可能性を再発見してくださった、まふ定跡制作チームの皆様に感謝申し上げます。


【本定跡の作成方法と河童定跡メイカーの公開について】
本定跡の作成にあたり、量子ガシャという最適化手法を開発しました。
本手法は量子焼きなまし法を将棋に適用することで導出されているのですが、導出には理系大学院クラスの数学物理知識が必要なので割愛します。
なお、導出は死ぬほど面倒ですが、アルゴリズムは恐ろしく楽な作りです。

**注意:これらツールは自己責任でお使いください**

以下、OSはwindows。やねうら王Quaga、及び、bookmakerを用いての開発を前提とします。

一応、手元のwindowsでは動きましたが、環境依存性はあってもおかしくありません。使用は自己責任でおねがいします。


1.対策したい相手(エンジン、評価関数、定跡)とstandard定跡、大定跡、真定跡、評価関数に乱数を載せたnobookなど戦わせます。
別に上記のような構成にする必要はありません。棋譜がある程度バラけていればよいです。自動対局は将棋所、将棋guiなどをお使いください。

2.定跡を載せたい方のエンジンが勝った棋譜を抽出する
例えば、河童定跡/大定跡/ランダム評価関数 on やねうら王 vs まふ定跡 on 技巧であれば、やねうら王側が勝った棋譜だけを、先手で勝った対局、後手で勝った対局別に抽出します。抽出は手動でやるとしんどいので、シェルなどを使ってください。定跡生成セットに入っている

movefiles.bat

を.kifファイルが入っているフォルダに置き実行すれば、sentewin、gotewinというフォルダが生成され、先手/後手が勝った対局が自動的に入ります。

3.局面のとりまとめ
各フォルダに勝利局面が蓄えられたら、sfenファイルはakiさんが公開されているblunderconverterで一行のsfenファイルに変換します。出力はこんな感じになるはずです。棋譜は全て連結してひとつのファイルになるようにしてください。

github.com


startpos moves 7g7f ....
startpos moves 2g2f ....

4.局面を喰わせることで新しい定跡を作る
先手が勝った局面では先手の手だけを、後手が勝った局面では後手の手だけを定跡に入れるのがポイントです。bookmaker.exeを起動し
makebook from_sfen kif-sente.sfen kif-gote.sfen standard_book.db moves 32

kif-senteには先手が勝った棋譜を、kif-goteには後手が勝った棋譜を入れてください。これらファイルはbookmaker.exeと同じディレクトリにおいてください。上記の例だと32手目まで登録されます。


5.standard_book.dbを差し替え、対策したい相手と新しい定跡を積んだやねうら王Quagaを戦わせます。同時並行で大定跡、真定跡、評価関数に乱数を載せたnobookなども対策したい相手と戦わせます
この際、やねうら王QuagaのQuantumbookはonにしてください。Quantumbookは定跡生成時に使った棋譜の分布に合わせて指し手を変える機能です。
同時にやねうら王Quagaの定跡以外の定跡を積んだやねうら王と対策相手を戦わせてください。
やねうら王Quagaのstandard_book形式は一度定跡を作ってしまうと指し手が狭くなってしまうので、こうすることで手の探索範囲を広げます。
非Quagaのエンジンを増やすと探索範囲が広がる一方で収束が遅くなります。私が定跡を作る際はQuaga3、nobook(または真定跡)1で戦わせました。

6.3−5の手順を繰り返す
戦わせる、勝った棋譜≒勝ちやすい棋譜を集める、その棋譜を定跡にして戦わせる、より勝ちやすい棋譜が多く生き残る、
その棋譜を定跡にして戦わせる。。。を繰り返すことで、勝ちやすい棋譜の出現率が上昇し、対策相手への勝率が向上していきます。

【step3の補足】
勝った局面を集めるだけでもある程度の効果は得られますが、定跡スナイパー理論に基づけば、逆転勝ちや微差の勝利は定跡にする価値に乏しいです(詳しくは前回の記事参照)。

そこで、勝った局面の中でも先手/後手が一度も不利になることなく勝った局面だけを抽出することで更に勝率を高める(どのぐらい増えるかは相手による。まふ定跡相手だとレート30弱伸びたけど、やねうら王定跡には殆ど伸びなかった)ことができます。

実際、Qhapaqの定跡は32手目以降先手は100点以上、後手は-50点未満の点数しか出なかった棋譜だけを用いています。
点数による棋譜落としのツールも手元にはあるのですが、使い勝手がどうしようもなく悪い(非プログラマに使えるようになってない)ので目下拡張中です。私がリア充になれたら公開されると思います。

 

【Q & A】

・batファイルが動かない、makebookファイルが動かない

一番ありうるのは文字コードの違いです。Quagaツールは全てshift_jis+CRLFを前提に作っています(元となったやねうら王のmakebookもCRLFじゃないと開業とみなしてくれない様子)。

batファイルはkifファイルうち特定の文字列を含むものを抽出して移動するという仕様です。デフォルトでは将棋gui(将棋所)基準の"先手の勝ち"/"後手の勝ち"という文字列を検索しています。必要に応じてbatファイルをテキストエディタなどで編集して検索文字列を変えてください。