From a5e58a44cebff1628370195b26981784fa6c0d14 Mon Sep 17 00:00:00 2001 From: yaneurao Date: Sat, 12 Oct 2024 01:03:55 +0900 Subject: [PATCH] =?UTF-8?q?-=20multipleExtensions=E5=BB=83=E6=AD=A2=20-=20?= =?UTF-8?q?=E3=81=B5=E3=81=8B=E3=81=86=E3=82=89=E7=8E=8B=E3=81=A7=E3=83=A2?= =?UTF-8?q?=E3=83=87=E3=83=AB=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=8C?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E3=81=97=E3=81=AA=E3=81=84=E3=81=A8=E3=81=8D?= =?UTF-8?q?=E3=81=ABFileOpenError=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8FFileN?= =?UTF-8?q?otFound=E3=82=92=E8=BF=94=E3=81=99=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yaneuraou-engine/yaneuraou-search.cpp | 25 ++++++------------- source/eval/deep/nn_types.cpp | 2 +- source/search.h | 1 - 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/source/engine/yaneuraou-engine/yaneuraou-search.cpp b/source/engine/yaneuraou-engine/yaneuraou-search.cpp index 37b2ea1b4..b180e09ac 100644 --- a/source/engine/yaneuraou-engine/yaneuraou-search.cpp +++ b/source/engine/yaneuraou-engine/yaneuraou-search.cpp @@ -1576,8 +1576,6 @@ Value search(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth, boo (ss + 2)->killers[0] = (ss + 2)->killers[1] = MOVE_NONE; (ss + 2)->cutoffCnt = 0; - ss->multipleExtensions = (ss - 1)->multipleExtensions; - // 前の指し手で移動させた先の升目 // → null moveのときにprevSq == 1 == SQ_12になるのどうなのか…。 // → Stockfish 16でMOVE_NULLの時は、prevSq == SQ_NONEとして扱うように変更になった。[2023/10/15] @@ -2620,20 +2618,16 @@ Value search(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth, boo ss->excludedMove = MOVE_NONE; // 置換表の指し手以外がすべてfail lowしているならsingular延長確定。 + // (延長され続けるとまずいので何らかの考慮は必要) if (value < singularBeta) { - extension = 1; - - // We make sure to limit the extensions in some way to avoid a search explosion - // 2重延長を制限することで探索の組合せ爆発を回避する。 - - // TODO : ここのパラメーター、調整すべきかも? - if (!PvNode && value < singularBeta - 2 && ss->multipleExtensions <= 15) - { - // この200調整したほうがよさげ。 - extension = 2 + (value < singularBeta - 200 && !ttCapture); - depth += depth < 15; - } + int doubleMargin = 262 * PvNode - 204 * !ttCapture; + int tripleMargin = 97 + 266 * PvNode - 255 * !ttCapture + 94 * ss->ttPv; + + extension = 1 + (value < singularBeta - doubleMargin) + + (value < singularBeta - tripleMargin); + + depth += ((!PvNode) && (depth < 14)); } // Multi-cut pruning @@ -2735,9 +2729,6 @@ Value search(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth, boo // これはsingluar extensionの探索が終わってから決めなければならない。(singularなら延長したいので) newDepth += extension; - // multipleExtensionsは、前のノードで延長したかと本ノードで延長したかを加算した値 - ss->multipleExtensions = (ss - 1)->multipleExtensions + (extension >= 2); - // ----------------------- // 1手進める // ----------------------- diff --git a/source/eval/deep/nn_types.cpp b/source/eval/deep/nn_types.cpp index c72a9ca0a..60e7c6024 100644 --- a/source/eval/deep/nn_types.cpp +++ b/source/eval/deep/nn_types.cpp @@ -660,7 +660,7 @@ namespace Eval::dlshogi } } if (is_err) - return ResultCode::FileOpenError; + return ResultCode::FileNotFound; return ResultCode::Ok; } diff --git a/source/search.h b/source/search.h index b797775d7..5b14c62e6 100644 --- a/source/search.h +++ b/source/search.h @@ -56,7 +56,6 @@ struct Stack { bool inCheck; // この局面で王手がかかっていたかのフラグ bool ttPv; // 置換表にPV nodeで調べた値が格納されていたか(これは価値が高い) bool ttHit; // 置換表にhitしたかのフラグ - int multipleExtensions; // 前のノードで延長した手数と今回のノードで延長したか手数を加算した値 int cutoffCnt; // cut off(betaを超えたので枝刈りとしてreturn)した回数。 };