やねうら王アップデート!テラショック定跡の生成に対応しました

やねうら王V4.85でテラショック定跡の生成がユーザーの皆さんでできるようになりました。やねうら王V4.85でテラショック定跡の生成がユーザーの皆さんでできるようになりました。

やねうら王 V4.85は、やねうら王のGitHubのReleasesのところからダウンロードしてください。→ V4.85詰め合わせ

テラショック定跡の生成手順

Step 1. 思考対象の棋譜をsfen形式(“startpos moves..”と書かれてる形式)で用意します

自己対局させたものでもいいですし、他のソフトと対局させたものでも良いです。将棋所などで対局させる場合、KIF形式で書き出して、それをsfen形式に変換するソフト(Blunder.Converterなど)を用いて変換して使ってください。

Step 2. 用意した棋譜に対して思考させます

用意した棋譜に対して16手目までをMultiPV 4、depth 30で思考させて結果を書き出したいならば、
MultiPV 4makebook think 2019.sfen book2019.db moves 16 depth 30
のようにします。(これは従来から存在していたコマンドで、今回追加したものではありません。)

これでbook2019.dbというファイルができます。
makebook think 2019.sfen book2019.db moves 16 depth 30 nodes 100000
のように探索するノード数で制限することができるので(depth指定と併用する)、終盤に時間がかかりすぎるときにうまく使えば効率的に思考できます。

Step 3. Step 2.で作成した定跡ファイルに対してテラショック定跡手法を用いて新しい定跡ファイルを作成します

makebook build_tree book2019.db user_book1.db
これでbook2019.dbをminimaxのようなことをしてuser_book1.dbが生成されます。このuser_book1.dbをやねうら王の実行ファイルの配置されている配下のbookフォルダにコピーして、やねうら王のエンジンオプションのBookFileオプションでuser_book1.dbを指定して使ってください。

また、この”makebook build_tree”を行うとき、先手側、後手側のcontempt(千日手を受け入れるスコア)を個別に指定できます。
makebook build_tree book2019.db user_book1.db black_contempt 50 white_contempt 150
先手の千日手スコア-50、後手の千日手スコア-150になります。

Step 4. これを繰り返します

Step 1.→ Step 2 → Step 1.→ Step 2.と繰り返して、どんどんbook2019.dbを大きくしていき、最後にStep 3.を行ってテラショック定跡を作ります。

Step 2.で指定するdepthの値が大きいとStep 2.に時間がかかりますので、ここをある程度下げて80手目ぐらいまで生成して、実際に定跡を使うのは60手目ぐらいまで(やねうら王のエンジンオプションのBookMovesで60を指定する)にするなど各自工夫してみてください。定跡が大きくなってくるとStep 3.のビルド自体にも時間がかかるようになってきますが。

Step 5. 延長する局面を書き出すコマンド

Step 1.の自己対局させる時間が惜しいと思うかも知れません。評価値が一定以上の枝(候補手)だけを辿り、その棋譜を書き出して(最後の局面から1手進んだ局面までの棋譜が書き出されるので)、それを用いてStep 2.を実行したいと思うかも知れません。
そういう機能もすでに用意しています。

makebook extend_tree read_book.db read_sfen.txt write_sfen.txt black_eval_limit -200 white_eval_limit -300
展開する枝の評価値の下限を先手/後手個別に指定できます。上の例ですと、先手なら-200以上の評価値の枝のみを延長して、後手ならば-300以上の評価値の枝のみを延長します。

read_sfen.txtにはこの延長を行う開始局面を複数指定できます。(わからなければ、”startpos”とだけ書いたテキストを用意すれば、平手の開始局面からになるのでそれで問題ないはずです。)

Step 6. 千日手スコアの局面だけを延長するコマンド

Step 3.でビルドするときに、千日手の局面の判定は、定跡で二度目に同じ局面に到達したときに千日手として扱われます。つまり、同じ局面が2度出現するところまでの定跡が入っていないと、black_contempt , white_contemptの値は利きません。定跡がそこまで到達していない場合、千日手スコア(0)がその局面の評価値として使われてしまうので、これは好ましい動作ではありません。そこで千日手スコアの局面だけを二度目に同一局面が出現するところまで、さらに掘りたいはずです。このコマンドも用意してあります。

makebook extend_tree book2019.db read_sfen.txt write_sfen.txt extend_range -1 1
extend_rangeを指定すると、その範囲のleaf node(末端の局面)の候補手だけを延長対象とします。(MultiPVで思考させ複数の指し手が登録されている場合、このextend_rangeの範囲内の候補手で進めた局面だけが延長されます。) extend_range -1 1 と指定したならば、leaf nodeでextend_treeの引き分けのスコア(-1,0,+1)の局面だけを延長します。(棋譜として書き出します)

※ やねうら王のV4.84以降だとmakebook thinkのときのContempt = 0なので引き分けのスコアは0のはずですから、extend_range 0 0と指定すれば良いです。

Step 7. 課題局面からの自動延長

勘のいい人であれば、Step 5.→ Step 2.を自動的に繰り返してくれれば課題局面から自動的に定跡が掘れて便利だと気づくかも知れません。そのコマンドもすでに用意してあります。

makebook endless_extend_tree book/db2019.db book/kadai_sfen.txt book/think_sfen.txt depth 12 startmoves 1 moves 32 loop 100 black_eval_limit -50 white_eval_limit -150 nodes 100000

makebook extend_treeとthinkを合体させたコマンド。think_sfen.txtのところは、思考対象局面を書き出す一時ファイル。このときbook/kadai_sfen.txtに “startpos” とだけ書いておけば、平手の初期局面が課題局面になるので、そこから自動的に定跡が掘られていきます。loopの回数だけ繰り返されます。

例)やねうら王の思考エンジンを起動して、

Hash 4096
Threads 8
MultiPV 4
makebook endless_extend_tree book/db2019.db book/kadai_sfen.txt book/think_sfen.txt depth 12 startmoves 1 moves 70 loop 100 black_eval_limit -50 white_eval_limit -150 nodes 100000

みたいな感じで、コマンドを叩けば、課題局面から先手評価値-50以上、後手の評価値-150以上の枝のみを延長しながら70手目までdepth 12でMultiPV 4で掘れます。(気の遠くなるような時間を要します。)

Step 8. 千日手スコアの局面だけ自動延長

Step 7.同様に千日手スコアの局面だけを自動延長して棋譜を書き出し、Step 2.を行うという動作を繰り返して欲しいと思うかも知れません。このコマンドも用意してあります。Step 7.のコマンドにentend_rangeが指定できます。

makebook endless_extend_tree book/db2019.db book/kadai_sfen.txt book/think_sfen.txt depth 12 startmoves 1 moves 32 loop 100 black_eval_limit -50 white_eval_limit -150 nodes 100000 extend_range -1 1

まとめ

テラショック定跡生成部を一般ユーザーが使えるようになりました。夜中のうちにコンピューターに課題局面の研究をさせておいたり、自分だけの振り飛車定跡を作ったりと色々と応用が利くはずです。

Step 2.のdepthを上げると思考時間を要しますが、depthをある程度妥協して、その代わりたくさんの局面を掘るだとか、深い手数まで掘るだとか、色々工夫することで自分だけの洗練された巨大定跡を生成することも夢ではありません。色々試してみてください。

何か良い条件がわかればコメント欄にお願いします。(他のユーザーの参考になると思うので)

追記[2019/06/01 11:00]

えむいーさんが手順をわかりやすく記事にされたので、参考にどうぞー。

相横歩取りギガショック定跡と定跡代行

 

やねうら王アップデート!テラショック定跡の生成に対応しました” への13件のコメント

  1. これってたややんさんの振り飛車評価関数を使って同じように定跡生成すれば振り飛車定跡も作れるってことですかね???そうだとすると夢が膨らみますね!

    • もちろん、そういう使い方もできます。振り飛車用の評価関数を用いなくとも、自動でエンドレスに掘るときに開始局面自体を指定できるので振り飛車の基本形あたりを指定して、そこからMultiPVとかで掘っていくこともできます。

      • 普通の評価関数で掘ると振り飛車側の評価値が大きくマイナスになってしまうので、たややんさんの振電で定跡掘って遊ぼうと思います!

    • テラショック定跡に変換後(makebook buildtreeコマンド後)のものをマージする(makebook merge)ことはできますが、それはあまり意味がないような…。

  2. エンドレスで定跡を掘る際にデフォルトだと一定時間?でブックの保存をやってくれますが、この間隔を伸ばすコマンド等はありますか?
    ブックの容量が大きくなると保存の時間も長くなるので、出来るだけバックアップの間隔を空けたいのですが・・・。
    コマンド説明の項目に記載があり、見落としてたら申し訳ないです。

    • 保存間隔を変更することはできませんが保存中も探索自体はノンストップで進むため、計算資源のロスにはなりません。また、保存は、前回の保存終了から15分経過時点で開始なので、ファイルが大きくなり保存時間が伸びても、それによって保存されなくなるというような事態にはなりません。なので、変更できるように作ってません(´ω`)

    • あと、一度中断したのですがそのままスタートさせるとゼロから更新されてしまいます。どうすればよいですか?

      • どのコマンドのことでしょう?
        makebook thinkコマンドは、中断した場合でも15分ごとに定跡ファイルが保存されているはずなので、そのファイルを指定して再開すれば続きからになるのではないかと…。
        makebook build_treeコマンドは、再開できないですが(´ω`)

    • 将棋所立ち上げて、色んな局面で中盤でそのdepthまで探索させてみて、どれくらいのノード数になるのか確認して、その平均 + αぐらいに設定してみるといいと思います。(終盤で詰み周りの局面でノード数が爆発するのを防止したいので)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です