Do more extensions in nodes far from the root

Parameters found by @FauziAkram in the latest tune.

Passed VVLTC w/ LTC Bound:
LLR: 2.95 (-2.94,2.94) <0.50,2.50>
Total: 243264 W: 63452 L: 62774 D: 117038
Ptnml(0-2): 18, 22494, 75934, 23164, 22
https://tests.stockfishchess.org/tests/view/680e82b23629b02d74b15e27

Passed VVLTC w/ STC Bound:
LLR: 2.94 (-2.94,2.94) <0.00,2.00>
Total: 37838 W: 9935 L: 9667 D: 18236
Ptnml(0-2): 6, 3383, 11873, 3651, 6
https://tests.stockfishchess.org/tests/view/681e707a3629b02d74b176e8

STC Elo Estimate:
Elo: -0.49 ± 2.4 (95%) LOS: 34.8%
Total: 20000 W: 5118 L: 5146 D: 9736
Ptnml(0-2): 55, 2365, 5182, 2349, 49
nElo: -0.96 ± 4.8 (95%) PairsRatio: 0.99
https://tests.stockfishchess.org/tests/view/6822af4b3629b02d74b17be6

closes https://github.com/official-stockfish/Stockfish/pull/6059

Bench: 2135382
This commit is contained in:
Shawn Xu
2025-04-27 12:16:19 -07:00
committed by Disservin
parent 1f9af9966f
commit b5f11085dd

View File

@@ -1100,9 +1100,6 @@ moves_loop: // When in check, search starts here
}
// Step 15. Extensions
// We take care to not overdo to avoid search getting stuck.
if (ss->ply < thisThread->rootDepth * 2)
{
// Singular extension search. If all moves but one
// fail low on a search of (alpha-s, beta-s), and just one fails high on
// (alpha, beta), then that move is singular and should be extended. To
@@ -1114,16 +1111,15 @@ moves_loop: // When in check, search starts here
// and lower extension margins scale well.
if (!rootNode && move == ttData.move && !excludedMove
&& depth >= 6 - (thisThread->completedDepth > 27) + ss->ttPv
&& is_valid(ttData.value) && !is_decisive(ttData.value)
&& (ttData.bound & BOUND_LOWER) && ttData.depth >= depth - 3)
&& depth >= 6 - (thisThread->completedDepth > 27) + ss->ttPv && is_valid(ttData.value)
&& !is_decisive(ttData.value) && (ttData.bound & BOUND_LOWER)
&& ttData.depth >= depth - 3)
{
Value singularBeta = ttData.value - (58 + 76 * (ss->ttPv && !PvNode)) * depth / 57;
Depth singularDepth = newDepth / 2;
ss->excludedMove = move;
value =
search<NonPV>(pos, ss, singularBeta - 1, singularBeta, singularDepth, cutNode);
value = search<NonPV>(pos, ss, singularBeta - 1, singularBeta, singularDepth, cutNode);
ss->excludedMove = Move::none();
if (value < singularBeta)
@@ -1131,12 +1127,13 @@ moves_loop: // When in check, search starts here
int corrValAdj1 = std::abs(correctionValue) / 248400;
int corrValAdj2 = std::abs(correctionValue) / 249757;
int doubleMargin = -4 + 244 * PvNode - 206 * !ttCapture - corrValAdj1
- 997 * ttMoveHistory / 131072;
int tripleMargin =
84 + 269 * PvNode - 253 * !ttCapture + 91 * ss->ttPv - corrValAdj2;
- 997 * ttMoveHistory / 131072
- (ss->ply * 2 > thisThread->rootDepth * 3) * 47;
int tripleMargin = 84 + 269 * PvNode - 253 * !ttCapture + 91 * ss->ttPv
- corrValAdj2 - (ss->ply * 2 > thisThread->rootDepth * 3) * 54;
extension = 1 + (value < singularBeta - doubleMargin)
+ (value < singularBeta - tripleMargin);
extension =
1 + (value < singularBeta - doubleMargin) + (value < singularBeta - tripleMargin);
depth++;
}
@@ -1166,7 +1163,6 @@ moves_loop: // When in check, search starts here
else if (cutNode)
extension = -2;
}
}
// Step 16. Make the move
do_move(pos, move, st, givesCheck);