思考エンジンオプション - mizar/YaneuraOu GitHub Wiki
思考エンジンオプションとは、将棋所やShogiGUIなどのエンジンオプションの設定画面に出てくる項目のことです。 ここでは、各オプションの意味について解説します。
以下では、通常対局で用いるエンジンオプションのうち、最重要なものに関して説明します。これらを設定しておけば、対局自体は普通にできます。
置換表サイズを設定します。単位は MB (メガバイト)です。
🌙 このオプションは、やねうら王や詰将棋エンジンで用います。ふかうら王にはこのオプションは存在しません。ふかうら王は、メモリを探索時に確保していきます。
🖋 置換表とは、探索した局面の情報を格納しておく表のことです。このサイズが小さいと探索した局面の情報を残しておけないので長時間思考させる時に、探索効率が悪化します。(棋力が低下します) 空きメモリの許す限り大きな値を設定することをお勧めします。
👉 1GB (ギガバイト)を割り当てるのであれば、1024を指定します。(1024 MB = 1 GB なので)
💡 やねうら王では、他の将棋ソフトにあるように、この数値が2の累乗でないといけないという制約はありませんし、また、サイズ制限も実質的にありません。128 GBでも1 TBでも空きメモリの許す限り確保できます。(タスクマネージャーで見ながら、空きメモリが枯渇しない範囲で設定しましょう。)
⚠ この値はデフォルトでは16 MBとなっていて、ほとんどメモリを消費しませんが、その代わり、現代のPCでは少なすぎます。かならず、お使いのPCの空きメモリに合わせた値を設定してください。 ⚠ ふかうら王では、現状(V7.50で)、このオプションは未使用です。今後使用するようになるかも知れませんが、現在このオプションの値は用いられません。ふかうら王では使用するメモリ量はNodesLimitで調整してください。
思考に用いるスレッド数を設定します。
🖋 スレッドとは、並列探索を行う時の並列数のことです。この値を4にすれば、4並列で探索します。例えば、CPUが「32コア64スレッド」であれば、64を設定するとCPUを完全に使い切ることができます。(少し余力を持たせたい時は、それより少し小さな値に設定します。) CPUが何コア何スレッドであるかは、CPUの名前で検索すればメーカーなどのページでその仕様を知ることができます。
⚠ BIOSの設定でHyperThreadingを有効にしていないと、CPUが「32コア64スレッド」対応であっても32スレッドまでしか使えません。最近のPCでは、BIOSにこの設定自体がないか、あったとしても最初からHyperThreadingが有効になっていると思いますが。
👉 64スレッド(64並列)を割り当てるのであれば、64を指定します。
💡 スレッド数が2倍になると単位時間当たりに調べられる局面の数がおおよそ2倍になりますが、実効(実際の効果)が2倍あるわけではありません。例えば100スレッドで並列探索しても実効はその平方根である10倍程度の価値しかないと言われています。すなわち、100スレッドで1秒思考させるのは、1スレッドで10秒思考させる程度の価値しかありません。
⚠ スレッド数を増やすとCPU負荷も上がります。CPUに長時間100%の負荷をかけ続けるとそういう動作を想定されていないようなノートパソコンなどではCPUが熱暴走したり、最悪CPUが焼けて故障する場合があります。CPU温度を見るツールなどでCPU温度を見ながら、CPU温度が上がりすぎないように注意しましょう。PCの排熱に自信がない場合は、論理コア数ではなく物理コア数(通常、論理コア数の半分)に設定することをお勧めします。
🕊 CPUの温度を見るツール 👉 Core Temp : https://www.alcpu.com/CoreTemp/
ponderを有効にするかどうか。
🖋 ponderとは、相手番で思考することです。
👉 有効にするなら true 、無効にするなら false を設定します。
💡 相手の次の一手を予想した指し手は、日本語では「予想手」と呼ばれますが、これをコンピュータ将棋では、「ponderの指し手」と呼びます。また予想手が当たることを「ponderがhitした」と言います。
💡 やねうら王では思考時間制御(今回に使用する時間の計算)の時に、USI_Ponderがオンであるかどうかを見ています。なぜなら、USI_Ponderがオン(true)であれば、ponderがhitした時に思考時間を節約できるからで、時間があまり気味になることが予想されるので、それを見越して、1手に通常より少し多めに思考時間を割り当てて良いと思われるからです。
⚠ USI_Ponderに関する注意点
USI_Ponderがオン(true)の時は、思考エンジンは相手の予想手も返すことになっています。通常、思考が完了した時に、最善と思われる指し手XXを
bestmove XX
の形でGUIに返すのですが、この時に、USI_Ponderがオンであれば、相手の予想手YYを付随して
bestmove XX ponder YY
のように返します。
しかし、やねうら王ではUSI_Ponderの設定値に拘わらず、常に"ponder YY"の部分も返すようにしています。なので、実際はこのオプションはやねうら王に対してponderの指し手を促す効力は持ちません。
では、何のためにこのオプションがあるかと言うと、これをGUI側でオンに設定すると、GUI側が相手番で、思考エンジンに対して、直前に予想手として返した指し手を指したあとの局面について思考するように局面を送ってきてくれます。(USIプロトコルの"go ponder"コマンド) そういう意味では、これはエンジンに対する司令ではなく、GUIに対する特別なオプションであるとも言えます。
確率的ponder。
💡 dlshogiにある同名のオプションと同じ。ponderについては、USI_Ponderの説明を読むこと。
🖋 "go ponder"(ある局面に対してponderで思考せよという司令)でponderする時に、1手前の局面(相手番)で思考することによってそこからすべての指し手が探索されるので、ponderの指し手(予想手)のハズれがなくなり、dlshogiでは通常のponder動作より効率が良い(こうしたほうが強い)とされています。
⚠ やねうら王で、これをオンにしたほうが通常のponderより強くなるのかは計測できていないのでわかりません。ふかうら王では、これをオンにしたほうが強いと思われます。
⚠ これを有効化するとponderの1手前(相手番)の局面で思考しているため、GUIに表示される読み筋はおかしくなります。(GUI側に相手番のときにその1手前の局面でgoコマンドで思考させてくれる機能があると良いのですが…。)
その局面で評価値が良い上位N個の候補手を出力する機能です。
💡デフォルトではこの値は1に設定されているため、一番良いと思う指し手しか出力 しません。
🖋 ShogiGUIの場合、検討モードで「候補手」の数を変更すると、ShogiGUIから思考エンジンに、このMultiPVの値を変更する指示がきます。そうして、複数の候補手とその読み筋を出力しています。
⚠ この値を2以上に設定した場合、2つ目以降の指し手についても読み筋を調べないといけないため、やねうら王においては棋力が低下します。ふかうら王においては棋力はほぼ低下しません。
💡 MultiPVについて詳しい説明は、やねうら王公式ちゃんねるの動画 将棋ソフトで複数の読み筋が見たい時はどうすれば良いのか?がわかりやすいです。
評価関数用のファイルの配置フォルダ。
🖋 デフォルト値は "eval"となっています。なので、思考エンジンの実行ファイルが存在するのと同じフォルダに"eval"という名前のフォルダが存在していて、そのなかに評価関数用のファイルが配置されていることを想定しています。
💡 絶対Pathでの指定もできます。例) "C:/YaneuraOu/Eval"
⚠ 開発者向け情報 : USIプロトコルの"isready"コマンド(GUI側から送られてくる、思考エンジンに対して準備が出来ているかを尋ねるコマンド)が送られてきてから評価関数ファイルを読み込むので、起動後"isready"までに"setoption"コマンドでこの設定を変更しないと効果がありません。
定跡関係のエンジンオプションは複数あり、用いる定跡ファイルの種類によっても最適値は異なるので、単純ではありません。
以下は、定跡関係の基本となるオプションです。これらはどんな定跡ファイルに対しても共通で使えます。
本思考エンジン側の定跡を有効にするか。
⚠ このオプションは、デフォルトでtrueなので、デフォルトで思考エンジン側の定跡は有効になっています。
💡このエンジンオプションは、USIプロトコル原案に書いてあり、ShogiGUI、ShogiDroidがこのオプションに対応しているので、本エンジンでもサポートをすることにしました。
定跡ファイルを配置しているフォルダ。
🖋 思考エンジンの実行ファイルが存在するフォルダ相対で指定する。(絶対pathでも指定できる)
💡 デフォルトでは、"book"なので、思考エンジンの実行ファイルが存在するフォルダ内に"book"というフォルダがあり、そこに定跡ファイルが配置されていると想定している。
定跡として読み込むファイルの選択。
選択した値 | 内容 |
---|---|
no_book | 定跡なし |
standard_book.db | 標準定跡 |
yaneura_book1.db | やねうら大定跡(公開用 concept proof) |
yaneura_book2.db | 超やねうら定跡(大会用2015) |
yaneura_book3.db | 真やねうら定跡(大会用2016) |
yaneura_book4.db | 極やねうら定跡(大会用2017) |
user_book1.db | ユーザー定跡1 |
user_book2.db | ユーザー定跡2 |
user_book3.db | ユーザー定跡3 |
💡 standard_book.dbは以前公開していた。yaneura_book1.db~yaneura_book4.dbは、『将棋神やねうら王』に収録した。(かも)
👉 一般ユーザーは、自分の用意した定跡ファイルを"user_book1.db"のようにファイル名を変更してBookDirオプションで指定しているフォルダに配置すると良いと思う。
定跡ファイルをメモリに丸読みしない機能。
このオプションをオン(true)にすると、定跡ファイルを丸読みせず、その局面での思考を開始する時にファイルの必要な箇所だけ読みに行きます。
🖋 やねうら大定跡のような巨大な定跡を試合開始時に読み込まれるとその読み込みに時間がかかるため、対局中、1手指すごとにファイルを読みに行くためのものです。
⚠ この機能をオンにする場合、定跡は事前にソートされている必要があります。これはmakebook sortコマンドで行なえます。
💡 なお、やねうら王の公式サイトで配布している定跡ファイルはすべてソートされています。
💡 定跡ファイル内をバイナリサーチで調べているのでファイルサイズが10GBを超える超巨大な定跡でも取り扱えます。
💡 ランダムアクセスに近いアクセスになるので、このオプションを用いるならHDDよりはSSDのほうが好ましいです。
⚠ このオプションをオンにした時に、32bit環境で2GB以上の定跡ファイルが扱えないのはOSの制限によるもので、仕様です。64bit環境でならこの制限はありません。
定跡を用いる開始局面からの手数。
👉 例えば、このオプションを16に設定した場合、開始局面から16手目の局面まで定跡にヒットする。そこ以降は定跡DBの内容を無視する。
💡 このオプションに0を設定した場合、定跡を一切用いない。
一定確率で定跡を無視する。(ヒットしなかったことにする)
百分率で指定します。
👉 例えば、30を指定すると30%の確率で定跡にヒットしなかったことにします。
定跡にヒットしたときにPV(読み筋)をその先、何手目まで表示するかを設定します。
⚠ あまり長いとPVの出力に時間がかかる場合があります。(HDD使ってて巨大定跡でBookOnTheFly有効だと特に…) これは、定跡の指し手で1手実際に局面を進めて、再度定跡にヒットするか判定することを繰り返すためです。
定跡DB上の局面の手数を無視する。
🖋 定跡DBには、局面について、それが初期局面から数えて何手目の局面であるかという情報が付随しています。その何手目であるかという情報を無視して定跡にhitするようにします。
👉 このオプションをオンにすると、局面図が同じであれば、定跡上の36手目の局面に40手目の局面でもヒットするようになります。
💡 例えば、角換わりで先後がお互いに2手ずつ手損をした場合、定跡の36手目の局面が40手目に出現します。その時に定跡DBにはhitして欲しいならば、このオプションをオンにします。
以下は、定跡DBの各局面の指し手に、その指し手が指された回数が記録してある定跡でのみ使用できるオプションです。
⚠ 採択回数が記録されていない定跡ファイルに対しては使えません。
実現確率の低い定跡の指し手を採用しない。
🖋 このオプションをオン(true)にするとその局面で、指された回数が10%未満の指し手は除外する。デフォルトではオフ(false)。
💡 Bonanzaに採用されていた同名のオプションと同じ。
⚠ 定跡DB上の評価値ベースで指し手を選択したい場合、このオプションはオンにすべきではないです。なぜなら、評価値のついている定跡ファイルには、採択回数のところにその生成した思考エンジンのバージョンナンバーを書いてあることがあるので、評価値の良い指し手を採択回数が低いとして除外してしまうことがあります。
指し手の採択率に比例した確率で指し手をランダムに選びます。
👉 例えば、76歩の採択回数が10回、26歩の採択回数が30回であれば、76歩は25%、26歩は75%の確率で選ばれます。
⚠ 評価値ベースの定跡。以下のオプションを用いるときの注意点。
-
NarrowBookを必ずオフに。(やねうら大定跡では、「出現頻度」のところが、思考エンジンのバージョンナンバーになっています!このため、出現頻度順で並び替えても意味がありません。)
-
「やねうら大定跡」「真やねうら定跡」など評価値がきちんとついている定跡を用いる。
定跡の第一候補手との評価値の差。
🖋 定跡の指し手で(評価値が高い順に見て)1番目の候補の指し手と、2番目以降の候補の指し手との評価値の差が、この範囲内であれば採用します。
💡 1番目の候補の指し手しか選ばれて欲しくないときはこのオプションの値を0に設定すると良いです。
定跡の先手の評価値下限。
🖋 定跡の指し手のうち、先手のときの評価値の下限。これより低い値の評価値がついている指し手は選択しません。
定跡の後手の評価値下限。
🖋 定跡の指し手のうち、後手のときの評価値の下限。これより低い値の評価値がついている指し手は選択しません。
定跡のdepth下限。
🖋 定跡に登録されている指し手のdepthがこの設定した値を下回るならその指し手を採用しません。
💡 このオプションに0を設定すると、定跡DBのdepthの値を無視します。(0を下回るdepthの指し手は登録されていないので、depthで足切りされることはない。)
以下では、それほど重要ではないエンジンオプションについて解説します。設定はデフォルト値のままで対局に支障はないはずですが、気になる人はきちんと設定してみてください。
通信時の平均遅延時間。単位は ms(ミリ秒)。
👉 これを例えば200に設定しておくと、5.0秒で指さずに、4.8秒(200ms早め)で指すようになります。
🖋 デフォルト値は、0ではありません。150~300程度の値が設定されているはずです。(やねうら王のバージョンにより差異があります)
💡 このオプションの値を0にするのはお勧めしません。GUIに指し手が伝わるのに0.1秒程度の遅延は必ずあるので、思考エンジンは3秒未満で指している(秒未満は切り捨てるので計測上は2秒)はずが、GUI側からすると3.1秒で指していることになります。(この時、計測上は3秒) つまり思考エンジンは1手ごとに1秒近く損をすることになります。この場合、思考エンジンは少ない思考時間で指していることになるので本来の強さが発揮できません。
⚠ 開発者向け情報 : 思考エンジン同士を自己対局によってその棋力を計測する時、1手X秒だけ考えさせたいような場合、このオプションは 0 に設定すべきです。(このオプションを300に設定していると300msだけ早めに指すので思考時間が減らされていることになって、正確な計測とは言えないため)
通信時の最大遅延時間。単位は ms(ミリ秒)
👉 これを例えば600に設定しておくと秒読み10秒で、これが切れたら負けという瞬間に限り、9.4秒(600ms早め)に指し手を返します。エンジンオプション NetworkDelay の方もご確認ください。
💡 floodgateなどときどき大きな遅延が発生するサーバーで対局させるときは、この値を1200(1.2秒早め)ぐらいに設定することをお勧めします。
⚠ これを0に設定すると、秒読み 5秒で指す設定の時に、5秒ジャストで指すため、GUI側は時間を超えてから思考エンジンが指し手を返したという扱いになってしまい、切れ負けになります。
最小思考時間。単位は ms(ミリ秒)。
🖋 2秒以内に指すとすべて計測1秒となる場合、2000を指定すると得。
⚠ ただし、NetworkDelay , NetworkDelay2 の分は減じて思考する。
終局までの手数。256手ルールなら256と設定します。0なら手数制限なし。
💡 この手数を超えたところで引き分け(評価値0)とみなして思考します。
⚠ 安全を見て、256手ルールなら258ぐらいに設定するほうが良いかも知れません。👉 やねうら王ブログ 多くの将棋ソフトで256手ルールの実装がバグっている件 → このバグ自体は現在修正されていますが、置換表を使う以上、256手ルールが絡んで引き分けになった局面の情報を256手目以前で使ってしまうというようなケースは考えられます。
投了する評価値。
🖋 例えば3000にすると相手から見た評価値が3000以上(自分から見たら-3000以下)になった場合に自ら投了します。
💡 このオプションのデフォルト値は99999なので形勢がどれだけ悪くなっても投了はしません。
👉 ふかうら王では、このオプションは存在していなくて、Resign_Thresholdで設定する。
読みの各局面ですべての合法手を生成するかどうか。
🖋 普通、歩の2段目での不成などは指し手自体を生成しないのですが、これのせいで不成が必要な詰みが絡む問題が解けないことがあるので、このオプションを用意しました。オンにすると勝率が少し下がるのでデフォルトではオフになっています。
⚠ このオプションがオフの場合、定跡に含まれている歩の不成での移動などの指し手は、定跡にhitしなかった扱いになります。
入玉ルールを変更できます。
設定値 | 意味 |
---|---|
NoEnteringKing | 入玉ルールなし |
CSARule24 | 24点法。31点で宣言勝ちなので31点にならないと宣言勝ちはしない。 |
CSARule24H | 24点法 , 駒落ち対応 |
CSARule27 | 27点法(CSAルール。先手は28点、後手は27点で宣言勝ちできる) |
CSARule27H | 27点法 , 駒落ち対応 |
TryRule | トライルール(敵の玉が最初にいた升に自玉が移動できたら入玉とみなす) |
🖋 駒落ち対応と書いてあるものは、例えば二枚落ちならば、上手(うわて)は5点×2枚=10点だけ事前に点数を持っているとみなして宣言勝ちの条件を満たすかをチェックします。駒落ちでは上手は後手とみなすのでこのとき、上手は 27 - 10 = 17点の駒点で入玉できます。(敵陣に10枚の駒がないといけない等の条件は元のまま)
⚠ 盤上で足りない駒は、上手の駒を落としているとみなします。 詳しくは やねうら王ブログ やねうら王がAobaZeroに駒落ちで負けまくっている件について をご覧ください。
⚠ 将棋所、ShogiGUIなどではトライルール、駒落ちの宣言法に対応していないので注意。(思考エンジンはトライすれば勝ちだと思ってトライしますが、条件を満たしてもGUI側が勝ちだという判定をしてくれないため、対局が続行してしまいます。)
🌙 CSAの入玉宣言のルールについて
以下にCSAの入玉宣言のルールについて参考のため引用しておきます。
第17条
次の各号に掲げる条件がすべて成立する場合、勝ちを宣言できる(以下「入玉宣言」という)。1つでも条件を満たしていない場合、宣言した方が負けとなる。
一 宣言側の手番である。
二 宣言側の玉が敵陣三段目以内に入っている。
三 宣言側が、大駒5点小駒1点の計算で
先手の場合28点以上の持点がある。
後手の場合27点以上の持点がある。
点数の対象となるのは、宣言側の持駒と敵陣三段目以内に存在する玉を除く宣言側の駒のみである。
四 宣言側の敵陣三段目以内の駒は、玉を除いて10枚以上存在する。
五 宣言側の玉に王手がかかっていない。
六 宣言側の持ち時間が残っている。
序盤重視率。単位は%。
1手に使う思考時間を調整します。百分率で指定します。
👉 例えば200を指定すると本来の最適時間(基準思考時間)の200%(2倍)思考するようになります。
⚠ この値を大きくすると初期局面からの対局だと序盤のほうに時間を使いすぎて終盤の時間が足りなくなります。
⚠ 逆にこの値を小さくすると序盤に時間を使わなくなり、終盤に時間が残るようになります。ただし小さくしすぎると終盤でも使用する時間が、(最適時間 × SlowMover / 100)ですから、終盤でも早指しになります。
💡 終盤に時間を余らせたいなら70ぐらいにしておくと良いでしょう。
💡 対人のときに小さめ(10とか)に設定して強制的に早指しにすることができます。
検討モード用の読み筋出力にするための機能です。
🖋 この機能は、やねうら王のみ。ふかうら王には存在しません。
これはShogiGUIなどの検討モードで用いるためのもので、このオプションをオン(true)にすると中途半端な読み筋が出力されることが減ります。
⚠ なお、このオプションがオンの時は、置換表(一度調べた局面の情報を格納しておく表のこと)から読み筋をかき集めてくるので、置換表が破壊されてると読み筋が途中で途切れることがあります。
💡 読み筋が途切れるときは置換表用のメモリ(思考エンジン設定のUSI_Hashオプションで設定できる)を大きめに確保してみてください。
🌈 なお、この機能をオンにすると、読み筋が千日手のときは読み筋の末尾に以下のように出力されるようになります。ShogiGUIでは、これを解釈して【千日手】のように表示されるはずです。将棋所など、この解釈に対応していないGUIでは解釈せずにそのまま表示されると思います。
文字列 | 意味 |
---|---|
"rep_draw" | 普通の千日手 |
"rep_sup" | 優等局面(盤上の駒配置が同一で手駒が一方的に増えている局面への突入。 相手からの歩の成り捨て~同金~歩打ち~金引きみたいな循環) |
"rep_inf" | 劣等局面(盤上の駒配置が同一で手駒が一方的に減っている局面への突入) |
"rep_win" | 王手を含む千日手(反則勝ち) ※ これ実際には出力されないはずだが…。 |
"rep_lose" | 王手を含む千日手(反則負け) ※ これ実際には出力されないはずだが…。 |
"win" | 宣言勝ち |
"resign" | 投了の局面で呼び出されたとき |
と出力されます。
より詳しい解説記事はこちらをどうぞ。 👉 やねうら王ブログ 検討モード用の読み筋出力について
- 優等局面、劣等局面について詳しくは、優等局面 - よくある質問をご覧ください。
fail low/highのときにPVを出力するかどうか。
💡 このオプションは、ConsiderationModeがオンの時にも有効です。
fail low/highについて詳しい説明は、こちらの記事をご覧ください。👉 fail low/highしたときの読み筋の出力
PV(読み筋)の出力を抑制します。前回出力時間から、この時間(単位はミリ秒)だけ経過するまでは次のPVを出力しません。
💡 探索開始直後は一気にPVが出力されるため、そこで出力が詰まりGUI側で処理が遅延して時間をロスしやすいので、この機能があります。
DrawValueBlack : (探索開始局面が)先手番の時の、引き分けの時のスコア。 DrawValueWhite : (探索開始局面が)後手番の時の、引き分けの時のスコア。
🖋 千日手を回避したい時や千日手になるべくしたい時などに用います。
💡 やねうら王では、単位は、cp(歩を100とする単位)で指定します。
💡 ふかうら王では、単位は、勝率の1000倍(千分率)で指定します。0~1000の値。
例えば、やねうら王で、これが -100 なら、引き分けの局面が -100 だとみなされます。この時、やねうら王が互角(評価値が0)と思っている局面であるなら引き分けを選ばずに他の指し手を選びます。(引き分けは-100点なので、他の指し手を選んだほうが得。)
⚠ この値のデフォルト値は-2にしてあります。こうすることで千日手を回避しやすくなるからです。-1 だと内部的な計算で切り捨てられてしまい 0 として扱われるので効果がありませんので注意してください。
👉 例 : やねうら王で、 DrawValueBlack = -100 とした場合で、探索開始局面が先手番のとき(DrawValueBlackは、この時しか無効)、引き分けに至った局面はそれが 先手番の局面なら -100 、後手番の局面なら +100 とみなして探索を行います。
LargePageを有効化するか。
💡 LargePageとは、Windowsで大きなメモリを扱う時に特殊な割り当て方をすることで、そこへのアクセスを高速化する技術です。
💡 デフォルトではこのオプションはオン(true)ですが、これを無効化(falseに)できないと自己対局の時に片側のエンジンだけがLargePageを使うことがあり、不公平になるため、無効化する方法が必要でした。
👉 LargePageを使うための設定。
WindowsのLarge Pageという方法で置換表用のメモリを確保すると10数%高速化するようです。
このためには、以下の方法で、Large Pageを使う許可をしてやる必要があります。
Large Pageを使うには、SeLockMemoryPrivilegeが必要。
Group Policy Editorで変更する手順。
1. グループポリシーエディター(gpedit.msc)を起動する
2. ローカルコンピューターポリシー → コンピュータの構成 → Windowsの設定 → セキュリティの設定 → ローカルポリシー
→ ユーザー権利の割り当て → メモリ内のページのロック
3. ここで適切なユーザーに権限を付与する。
4. OSを再起動する
cf.
Enable the Lock Pages in Memory Option (Windows)
https://msdn.microsoft.com/en-us/library/ms190730.aspx
やねうら王で、Large Pageが確保できた時に表示されるメッセージ
info string Hash table allocation: Windows Large Pages used.
やねうら王で、Large Pageが確保できない時に表示されるメッセージ
info string Hash table allocation: Windows Large Pages not used.
なお、KPPT/KPP_KKPT型の評価関数の場合は、EvalShareがオン(default)の場合、Large Pageは(使える環境であっても)使いません。
EvalShareをオフにする必要があります。NNUE型は、EvalShareの機能がないため、Large Pageを(使えるなら)使います。
NNUE評価関数の時のみ使えるエンジンオプションです。
評価関数の計算の時に、最終的にいくらで割って整数値にするかの値です。
🖋 この設定値はデフォルトで16なので、例えばNNUEのネットワークが計算した出力値が 48 なら 48 / 16 = 3という評価値になります。
水匠5ではFV_SCALEを16から24に変更したほうが強いらしいので、この値をエンジンオプションで調整できるようにしました。
🍙 水匠5を用いる時は、評価関数ファイルを配置するフォルダに eval_options.txtを配置して、そのファイルに FV_SCALE = 24 のように書いておくと便利でしょう。
KPPT評価関数とKPP_KPPT評価関数でのみ使えるエンジンオプションです。
評価関数のパラメーターをプロセス間で共用するためのオプションです。思考エンジンを複数起動した時に、EvalShareがオン(true)であれば、思考エンジン1つ分しかメモリを消費しません。
💡 KPPT型の評価関数は1GB程度あったため、80並列で自己対局させようと思った時に160個思考エンジンが動作している状態になり、評価関数パラメーターのメモリへの読み込みによって1GB × 160 = 160GBもメモリを消費してしまうことを回避したくてこのオプションを用意しました。
⚠ 共有する条件は、評価関数の格納フォルダ(エンジンオプションの"EvalDir"で決まる)のフルパス名が合致したときです。この時のみにしないと、異種の評価関数で対局させようとした時に、EvalShareで共有してしまっていて、同じ評価関数で対局させていることになるからです。(これに嵌まる人が続出したため)
💡 複数起動したとして、最初に"isready"コマンド(対局の準備が出来たかを思考エンジンに確認するコマンド)がGUI側から送られてきた時点でそのやねうら王に評価関数ファイルを読み込みます。以降に立ち上げたやねうら王は、isreadyコマンドを送った時点で、1つ目にisreadyを送られたやねうら王の評価関数テーブルを共用します。
isreadyコマンドに対して評価関数ファイルを読み込むときに表示されるメッセージについて
メッセージ | 意味 |
---|---|
use non-shared eval_memory. | EvalShareがオフになっていたので共有メモリは用いなかった。 |
created shared eval memory. | EvalShareがオンになっていて、他に起動している同じバージョンのやねうら王がなかったので 共有メモリ上に新規に評価関数パラメーターを展開した。 |
use shared eval memory. | EvalShareがオンになっていて、他に起動している同じバージョンのやねうら王がすでに存在したので その共有メモリ上にある評価関数パラメーターを利用させてもらうことにした。 |
EvalHash(評価関数の計算した値を保存しておくメモリ)の大きさを MB(メガバイト)単位で指定します。2の累乗でなければなりません。
🖋 この機能を用いることで、一度計算した局面の評価を記憶しておくので、少し高速化されます。
💡 デフォルト128 MB。もう少し大きいほうが成績がいいかも知れません。魔女(SilentMajority)ではAVX2用は1024 MBに設定されています。
ふかうら王は、dlshogi互換エンジンであるため、dlshogiでサポートされているエンジンオプションを追加しています。
- 定跡関連のオプションは、やねうら王通常探索エンジンの時と同様。
- 引き分けの時のスコアは、やねうら王通常探索エンジンの時と同様。(ただしふかうら王は千分率で勝率の値を指定)
手っ取り早くふかうら王の設定を済ませたい方は、ふかうら王のお勧めエンジン設定をご覧ください。
🌈 dlshogiのパラメーターで、ふかうら王でサポートされているもの。
重要なのは、以下の3つです。
- DNN_Model : 評価関数で用いるモデルファイル名の設定
- DNN_Batch_Size : 推論の時のbatch size(1度にGPUに渡す局面の数)の設定
- UCT_Threads : 探索スレッド数の設定(この数だけ並列探索する)
GPUが最大で16個ある時を考慮して、例えば、DNN_Modelであれば、DNN_Model1~DNN_Model16まで16個のパラメーターが用意されています。
DNN_Model2~DNN_Model16は、デフォルト値は空の文字列("")になっており、省略された場合(空文字である場合)、DNN_Model1と同じ値が指定されたものとみなします。(そのスレッド数(UCT_Threads2~16)に1以上が設定されているとき)
DNN_Batch_Size2~16も同様に、0が設定されている場合、DNN_Batch_Size1の値が採用されます。(そのスレッド数(UCT_Threads2~16)に1以上が設定されているとき)
なので、同種のGPUが複数ある場合は、DNN_Model2以降は省略できます。(UCT_Threads2~16は省略できません。そのGPUを使うのであれば、この設定値を0のままにしないでください。)
⚠ dlshogiのエンジンオプションでは、"DNN_Model1"ではなく、"DNN_Model"となっているので注意。(2つ目以降は"DNN_Model2"のようになっています。)
👉 ふかうら王では、モデルファイルは、EvalDirで指定されているフォルダから読み込もうとします。この点、dlshogiと動作が異なるので注意してください。
パラメーター | 設定 |
---|---|
DNN_Model1 | モデルファイル名。デフォルトでは"model.onnx" |
DNN_Batch_Size1 | 推論のバッチサイズ。NPSが最大になるように調整する。128が推奨値。検討モードでは256が推奨値。 |
UCT_Threads1 | GPU1枚当たりの探索のスレッド数。基本は2~3にする。 |
⚠ DNN_Batch_Sizeを上げると、GPUからの結果を待つ時間が増えるので、時間超過になりやすいです。その場合、NetworkDelay,NetworkDelay2の値を調整してください。
投了値。この値を現在の局面の期待勝率が下回ったら投了する。千分率で指定。
0なら詰みの局面まで投了しない。(0がデフォルト値)
探索したノード(局面)を次の手番のときに再利用するかのフラグ。再利用したほうが探索効率が良い。
デフォルト、オン(true)。
デバッグ用のメッセージ出力します。
💡 この値を見ながら、NetworkDelay、NetworkDelay2を調整すると良いと思います。
例) DebugMessageをオンにすると以下のようなログが出力されます。(将棋所のデバッグウィンドウのところに出力されていることが確認できます。ShogiGUIだと、確認する手段がないので、WriteDebugLogオプションを用いて、思考ログをファイルに書き出すと良いでしょう。)
info string search search_end = 3600[ms], interruption time = 3604[ms]
info nps 172 time 4257 nodes 735 hashfull 0 depth 4 score cp 176 pv 2g2f 8c8d 1g1f 1c1d
これは、3600[ms]の時点で停止するようにそれより前の段階で計画した、そして3604[ms]の時点で探索スレッドに停止信号を送った、ところが全スレッドが停止したのは4257[ms]の時点であった。このとき4257-3604 = 653[ms]だけ停止させるための遅延が発生している。(GPUが処理中ですぐに停止できていない)
この場合、NetworDelayは 653 + α = 800ぐらいに設定するのが順当です。
NetworkDelay2 は(ネット対戦であれば)そこに1秒ぐらい足して、1800ぐらいが順当です。(←切れたら即負けなので少しマージンを持たせたいです)
ネット対戦でなければ、+500程度のマージンで良いと思います。
探索するときに調べたノード(=局面)の数に比例してメモリを使用しますが、このノードの上限値。この値におおよそ比例したメモリが最大で必要となります。
⚠ これはノード制限ではなく、ノード上限です。この値を超えたら思考を中断しますが、 この値を超えていなくとも、持ち時間制御によって思考は中断します。指定したノード数だけ思考させたい場合は、このオプションではなく、NodesLimitオプションを用います。
💡 1ノード(1局面)あたり 約2KB のメモリが必要。デフォルト値は10000000。
root node(探索開始局面)でのdf-pnによる詰み探索を行う時の調べるノード(局面)数。
これが0だと詰み探索を行いません。最大で指定したノード数まで詰み探索を行います。
ここで指定した数×16×8(王手の分岐数を考慮するとそれくらい) Byte、詰み探索用に消費します。
例) 100万を指定すると128MB消費する。
1秒間に100万~200万局面ぐらい調べられると思うので、最大で3秒調べさせたいのであれば300万~600万ぐらいを設定します。
デフォルト値は30万。
🖋 不詰が証明できた場合はそこで詰み探索は終了します。
💡 dlshogiは、300 ms(ミリ秒)探索するのがデフォルトなので、おそらく30万ノードぐらい。そんな長い詰み、そうそう実戦で出現しないのでそれくらいで十分なのかも。
👉 デフォルト値で良いが、持時間が長ければ少し増やしても。
勝率を評価値に変換する時の定数値。dlshogiの同名のオプションと同じ機能。
Ponanza定数の場合 a = 600。デフォルト値は a = 285。(285にすると評価値の膨らみ方が水匠とだいたい同じになるそうです。)
以下の6つは、探索に関係するパラメーターです。dlshogiの同名のパラメーターと同じ意味です。dlshogiの設定に倣ってください。
評価関数モデルによって最適値は異なります。最新のモデルであれば、デフォルトのままで良いはずです。
- C_fpu_reduction
- C_fpu_reduction_root
- C_init
- C_base
- C_init_root
- C_base_root
👉 評価関数モデルを配布する時に、配布する人が、eval_options.txtを配布してくれていて、それによって自動的に設定できるかも知れません。
探索のSoftmaxの温度。100分率で指定します。
⚠ ふかうら王V7.61までは千分率で指定するようになっていましたが、V7.62からはdlshogiに合わせて百分率で設定するように変わりました。
💡 以下記事に書いてあるように、従来は1.74でしたが、hcpe3形式の教師ファイルから学習させると1.40~1.50ぐらいが最適値となるようです。
評価関数モデルに合わせてベストな値を設定しましょう。
👉 評価関数モデルを配布する時に、配布する人が、eval_options.txtを配布してくれていて、それによって自動的に設定できるかも知れません。
leaf node(探索の末端の局面)でdf-pn詰みルーチンを呼び出す時のノード数上限。
デフォルト50。50でだいたい3~5手詰め相当。CPU側で調べるのでCPUに負担がかかる。0を設定した場合、df-pn詰め将棋ルーチンを呼び出さない。
💡 dlshogiでは、leaf nodeでは3手詰めを呼び出している。(設定により5手詰めに変更することはできる) ふかうら王では、3手詰めよりはdf-pn詰みルーチンの方が少ない計算コストでより多くの詰みが発見できると思って、こうしてある。
- dlshogiのほうの設定の説明も確認すること。世界将棋AI 電竜戦バージョン(「GCT電竜」同梱)
パラメータ | 設定値 | 備考 |
---|---|---|
Book_File | Apery形式のbookファイルが使用可能。デフォルトは「GCT電竜」の定跡(book.bin)になっている。 | やねうら王ではBookDirで定跡ファイルのフォルダを変更し、BookFileで定跡ファイルを指定する。 |
OwnBook | 定跡を使用する場合オンにする。 | やねうら王ではUSIプロトコルのUSI_OwnBookを用いる。 |
Mate_Root_Search | df-pnによる詰み探索の深さ制限値。ルートノードでの詰み探索を行わない場合は0にする。 | ふかうら王では詰み探索のノード数を制限するオプションRootMateSearchNodesLimitを用いる。 |
USI_Ponder | 同一マシンでのエンジン同士の対局の場合オフにする | ふかうら王も同様。 |
Byoyomi_Margin | デフォルト0。切れ負けする場合は増やす。 | ふかうら王では、NetworkDelay, NetworkDelay2で調整する。 |
Stochastic_Ponder | Ponderが有効な場合、相手局面に対して探索するかのフラグ。オンを推奨。 | ふかうら王も同様。 |
🕊 WCSC32版dlshogiで追加されたもの
🚧 ふかうら王では、現在、対応作業中。
パラメータ | 設定値 |
---|---|
PV_Mate_Search_Threads | 探索中に読み筋(PV)上に詰みがないかをチェックするスレッドの数(デフォルト0)。CPUコア数が、UCT_Threads+1(Mate_Root_Searchが1以上の場合)の場合に設定する。CPUのコアが余っていない場合、設定すると弱くなる場合がある。 |
Random_Ply | N手まで訪問回数に応じた確率で指し手を選択する。0の場合使用しない。 |
Random_Temperature | Random_Plyが有効な場合、訪問回数に応じて指し手を選択する際の温度パラメータ(千分率)。高いほど確率が均一になる。 |
Random_Temperature_Drop | 1手ごとに温度(Random_Temperature)を低下する(千分率)。 |
Random_Cutoff | Random_Plyが有効な場合、最善手の勝率から閾値の範囲内の勝率の手を選択する(千分率)。 |
Random_Cutoff_Drop | 1手ごとに勝率の閾値(Random_Cutoff)を低下する(千分率)。 |
以下では、思考エンジンの開発者向けのエンジンオプションの説明をします。 ここに出てくるエンジンオプションは、将棋の通常の対局をするだけでしたら、必要ありません。
GUIとのやりとりをログファイルへ書き出す。その時のファイル名を指定します。
🖋 思考エンジン(やねうら王)は、GUI側(将棋所やShogiGUI)と、USIプロトコルという仕様に基づいてやりとりをしています。その内容をそのままファイルに書き出すためのエンジンオプションです。
💡 このオプションは初期設定では、""(空の文字列)になっています。つまり何も設定されていないので、ログファイルは書き出されません。
👉 "log.txt"のように書き出したいログファイル名を設定すると、そのファイルが実行ファイルと同じ場所に作られて、そこに書き出されます。
💡 やねうら王では、USI拡張コマンドの"log"コマンドを実行するとそこ以降のGUIとのやりとりを、ログファイルに書き出す機能もあります。
複数のプロセッサグループが存在する環境で、思考エンジンを複数起動した時に、各プロセッサグループに思考エンジンを割り振るための調整用。
🖋 Windows版でのみ必要となる項目です。Linuxなど他のOSですと、プロセッサグループに分かれていません。
3990XのようなWindows上で複数のプロセッサグループを持つCPUで、思考エンジンを同時起動したときに同じプロセッサグループに割り当てられてしまうのを避けるために、スレッドオフセットを指定します。
例えば、128スレッドあって、4つ思考エンジンを起動してそれぞれにThreads = 32を指定する場合、何も指定しないとどのプロセッサグループに思考エンジンが割り当てられるかは決められていません。運悪く同じプロセッサグループに割り当てられることがあります。
そこで、この時、それぞれの思考エンジンにはThreadIdOffset = 0,32,64,96をそれぞれ指定します。
💡 プロセッサグループは64論理コアごとに1つ作られます。上のケースでは、ThreadIdOffset = 0,0,64,64でも同じ意味です。
⚠ 1つのPCで複数の思考エンジンを同時に起動して対局させる場合はこれを適切に設定すべきです。並列自己対局させるようなプログラムは、このオプションに対応するか、各エンジンを起動するNUMAノードを調整できるようになっているべきだと思います。
learnコマンドを使ったときに評価関数ファイルを保存するフォルダ。
🖋 このオプションは、学習コマンド(learn)に対応しているやねうら王(LEARN版)でのみ有効。
パラメーターの自動調整フレームワークを使ってパラメーターを外部から思考エンジンに何らかの値を渡したい時に用います。それ以外では使いません。
- Param1 : パラメーターの自動調整用X軸
- Param2 : パラメーターの自動調整用Y軸
💡 パラメーターの自動調整の方法については、パラメーター自動調整フレームワークについてご覧ください。