Skip to content

思考エンジンオプション

yaneurao edited this page May 8, 2022 · 34 revisions

思考エンジンオプションとは?

思考エンジンオプションとは、将棋所やShogiGUIなどのエンジンオプションの設定画面に出てくる項目のことです。 ここでは、各オプションの意味について解説します。

通常対局に関係するエンジンオプションで最重要なもの

以下では、通常対局で用いるエンジンオプションのうち、最重要なものに関して説明します。これらを設定しておけば、対局自体は普通にできます。

USI_Hash

置換表サイズを設定します。単位は MB (メガバイト)です。

🖋 置換表とは、探索した局面の情報を格納しておく表のことです。このサイズが小さいと探索した局面の情報を残しておけないので長時間思考させる時に、探索効率が悪化します。(棋力が低下します) 空きメモリの許す限り大きな値を設定することをお勧めします。

👉 1GB (ギガバイト)を割り当てるのであれば、1024を指定します。(1024 MB = 1 GB なので)

💡 やねうら王では、他の将棋ソフトにあるように、この数値が2の累乗でないといけないという制約はありませんし、また、サイズ制限も実質的にありません。128 GBでも1 TBでも空きメモリの許す限り確保できます。(タスクマネージャーで見ながら、空きメモリが枯渇しない範囲で設定しましょう。)

⚠ この値はデフォルトでは16 MBとなっていて、ほとんどメモリを消費しませんが、その代わり、現代のPCでは少なすぎます。かならず、お使いのPCの空きメモリに合わせた値を設定してください。 ⚠ ふかうら王では、現状(V7.50で)、このオプションは未使用です。今後使用するようになるかも知れませんが、現在このオプションの値は用いられません。ふかうら王では使用するメモリ量はNodesLimitで調整してください。

Threads

思考に用いるスレッド数を設定します。

🖋 スレッドとは、並列探索を行う時の並列数のことです。この値を4にすれば、4並列で探索します。例えば、CPUが「32コア64スレッド」であれば、64を設定するとCPUを完全に使い切ることができます。(少し余力を持たせたい時は、それより少し小さな値に設定します。) CPUが何コア何スレッドであるかは、CPUの名前で検索すればメーカーなどのページでその仕様を知ることができます。

👉 64スレッド(64並列)を割り当てるのであれば、64を指定します。

💡 スレッド数が2倍になると単位時間当たりに調べられる局面の数がおおよそ2倍になりますが、実効(実際の効果)が2倍あるわけではありません。例えば100スレッドで並列探索しても実効はその平方根である10倍程度の価値しかないと言われています。すなわち、100スレッドで1秒思考させるのは、1スレッドで10秒思考させる程度の価値しかありません。

⚠ スレッド数を増やすとCPU負荷も上がります。CPUに長時間100%の負荷をかけ続けるとそういう動作を想定されていないようなノートパソコンなどではCPUが熱暴走したり、最悪CPUが焼けて故障する場合があります。CPU温度を見るツールなどでCPU温度を見ながら、CPU温度が上がりすぎないように注意しましょう。

USI_Ponder

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に対する特別なオプションであるとも言えます。

Stochastic_Ponder

確率的ponder。

💡 dlshogiにある同名のオプションと同じ。ponderについては、USI_Ponderの説明を読むこと。

🖋 "go ponder"(ある局面に対してponderで思考せよという司令)でponderする時に、1手前の局面(相手番)で思考することによってそこからすべての指し手が探索されるので、ponderの指し手(予想手)のハズれがなくなり、dlshogiでは通常のponder動作より効率が良い(こうしたほうが強い)とされています。

⚠ やねうら王で、これをオンにしたほうが通常のponderより強くなるのかは計測できていないのでわかりません。ふかうら王では、これをオンにしたほうが強いと思われます。

⚠ これを有効化するとponderの1手前(相手番)の局面で思考しているため、GUIに表示される読み筋はおかしくなります。(GUI側に相手番のときにその1手前の局面でgoコマンドで思考させてくれる機能があると良いのですが…。)

MultiPV

その局面で評価値が良い上位N個の候補手を出力する機能です。

💡デフォルトではこの値は1に設定されているため、一番良いと思う指し手しか出力 しません。

🖋 ShogiGUIの場合、検討モードで「候補手」の数を変更すると、ShogiGUIから思考エンジンに、このMultiPVの値を変更する指示がきます。そうして、複数の候補手とその読み筋を出力しています。

⚠ この値を2以上に設定した場合、2つ目以降の指し手についても読み筋を調べないといけないため、やねうら王においては棋力が低下します。ふかうら王においては棋力はほぼ低下しません。

💡 MultiPVについて詳しい説明は、やねうら王公式ちゃんねるの動画 将棋ソフトで複数の読み筋が見たい時はどうすれば良いのか?がわかりやすいです。

EvalDir

評価関数用のファイルの配置フォルダ。

💡 デフォルト値は "eval"となっています。なので、思考エンジンの実行ファイルが存在するのと同じフォルダに"eval"という名前のフォルダが存在していて、そのなかに評価関数用のファイルが配置されていることを想定しています。

💡 絶対Pathでの指定もできます。例) "C:/YaneuraOu/Eval"

⚠ 開発者向け情報 : USIプロトコルの"isready"コマンド(GUI側から送られてくる、思考エンジンに対して準備が出来ているかを尋ねるコマンド)が送られてきてから評価関数ファイルを読み込むので、起動後"isready"までに"setoption"コマンドでこの設定を変更しないと効果がありません。

通常対局に関係するエンジンオプションでそれほど大切ではないもの

以下では、それほど重要ではないエンジンオプションについて解説します。設定はデフォルト値のままで対局に支障はないはずですが、気になる人はきちんと設定してみてください。

NetworkDelay

通信時の平均遅延時間。単位は 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だけ早めに指すので思考時間が減らされていることになって、正確な計測とは言えないため)

NetworkDelay2

通信時の最大遅延時間。単位は ms(ミリ秒)

👉 これを例えば600に設定しておくと秒読み10秒で、これが切れたら負けという瞬間に限り、9.4秒(600ms早め)に指し手を返します。エンジンオプション NetworkDelay の方もご確認ください。

💡 floodgateなどときどき大きな遅延が発生するサーバーで対局させるときは、この値を1200(1.2秒早め)ぐらいに設定することをお勧めします。

⚠ これを0に設定すると、秒読み 5秒で指す設定の時に、5秒ジャストで指すため、GUI側は時間を超えてから思考エンジンが指し手を返したという扱いになってしまい、切れ負けになります。

ResignValue

投了する評価値。

🖋 例えば3000にすると相手から見た評価値が3000以上(自分から見たら-3000以下)になった場合に自ら投了します。

💡 このオプションのデフォルト値は99999なので形勢がどれだけ悪くなっても投了はしません。

EnteringKingRule

入玉ルールを変更できます。

設定値 意味
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枚以上存在する。
五 宣言側の玉に王手がかかっていない。
六 宣言側の持ち時間が残っている。

SlowMover

序盤重視率。単位は%。

1手に使う思考時間を調整します。百分率で指定します。

👉 例えば200を指定すると本来の最適時間(基準思考時間)の200%(2倍)思考するようになります。

⚠ この値を大きくすると初期局面からの対局だと序盤のほうに時間を使いすぎて終盤の時間が足りなくなります。

⚠ 逆にこの値を小さくすると序盤に時間を使わなくなり、終盤に時間が残るようになります。ただし小さくしすぎると終盤でも使用する時間が、(最適時間 × SlowMover / 100)ですから、終盤でも早指しになります。

💡 終盤に時間を余らせたいなら70ぐらいにしておくと良いでしょう。

💡 対人のときに小さめ(10とか)に設定して強制的に早指しにすることができます。

開発者向けのエンジンオプション

以下では、思考エンジンの開発者向けのエンジンオプションの説明をします。 ここに出てくるエンジンオプションは、将棋の通常の対局をするだけでしたら、必要ありません。

WriteDebugLog

GUIとのやりとりをログファイルへ書き出す。その時のファイル名を指定します。

🖋 思考エンジン(やねうら王)は、GUI側(将棋所やShogiGUI)と、USIプロトコルという仕様に基づいてやりとりをしています。その内容をそのままファイルに書き出すためのエンジンオプションです。

💡 このオプションは初期設定では、""(空の文字列)になっています。つまり何も設定されていないので、ログファイルは書き出されません。

👉 "log.txt"のように書き出したいログファイル名を設定すると、そのファイルが実行ファイルと同じ場所に作られて、そこに書き出されます。

💡 やねうら王では、USI拡張コマンドの"log"コマンドを実行するとそこ以降のGUIとのやりとりを、ログファイルに書き出す機能もあります。

Param1,Param2

パラメーターの自動調整フレームワークを使ってパラメーターを外部から思考エンジンに何らかの値を渡したい時に用います。それ以外では使いません。

Param1 : パラメーターの自動調整用X軸 Param2 : パラメーターの自動調整用Y軸

かきかけ

かきかけ

なくなったエンジンオプションの資料

以下は、廃止された思考エンジンに採用されていたエンジンオプションや、廃止されたエンジンオプションで、資料目的でそのまま掲載してあります。

// 協力詰めsolver時

CM_Hash			: 協力詰め時の置換表サイズ(単位[MB])


// local-game-server時

EngineConfigDir			: "engine_configX.txt"が配置してあるフォルダ

EngineNuma				: 子プロセスでEngineを実行するプロセッサグループ(Numa node)
						  -1なら、指定なし。

BookSfenFile			: 連続自己対戦のときに定跡の局面まで進めるためのsfenファイル。
						  このファイルの棋譜のまま32手目まで進める。
						  book/book.sfen
						  のように指定する。

DepthLimit				: 探索深さ制限する(0 = 制限なし)
NodesLimit				: 探索node数を制限する(0 = 制限なし)
	→ この2つは、GUI側がgoコマンドのときにdepthとかnodeとか指定すべきような気はするが、
		とりあえずGUI側がそうなっていないので用意した。
		NodesLimitは正確にそのnodeで停止するわけではなく多少の誤差はある。

SkipLoadingEval  : 評価関数の読み込みをskipさせる。ゼロで埋めた評価関数を用意できないときや、
	新しい形式の評価関数が用意できないときに、評価関数の読み込みをskipさせるために用いる。
	"test evalconvert"コマンドと組み合わせて使う。詳しくは、解説.txtのほうを参照のこと。

SkillLevel : 手加減のためのもの。この値が 20 なら手加減なし。(通常のモード) 20未満であれば、手加減が有効。
	0 だと最弱。(R2000以上弱くなる) Stockfishの"Skill Level"をそのまま移植。