From: Michael Chaly Date: Fri, 8 Oct 2021 23:15:43 +0000 (+0300) Subject: Reduce more if multiple moves exceed alpha X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=c8459b18ba2d6ddc76d6db90d6eab346ed682e69;ds=sidebyside Reduce more if multiple moves exceed alpha Idea of this patch is the following: in case we already have four moves that exceeded alpha in the current node, the probability of finding fifth should be reasonably low. Note that four is completely arbitrary - there could and probably should be some tweaks, both in tweaking best move count threshold for more reductions and tweaking how they work - for example making more reductions with best move count linearly. passed STC: https://tests.stockfishchess.org/tests/view/615f614783dd501a05b0aee2 LLR: 2.94 (-2.94,2.94) <-0.50,2.50> Total: 141816 W: 36056 L: 35686 D: 70074 Ptnml(0-2): 499, 15131, 39273, 15511, 494 passed LTC: https://tests.stockfishchess.org/tests/view/615fdff683dd501a05b0af35 LLR: 2.94 (-2.94,2.94) <0.50,3.50> Total: 68536 W: 17221 L: 16891 D: 34424 Ptnml(0-2): 38, 6573, 20725, 6885, 47 closes https://github.com/official-stockfish/Stockfish/pull/3736 Bench: 6131513 --- diff --git a/src/search.cpp b/src/search.cpp index ac6b8608..73fc8a55 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -591,13 +591,13 @@ namespace { bool captureOrPromotion, doFullDepthSearch, moveCountPruning, ttCapture, singularQuietLMR, noLMRExtension; Piece movedPiece; - int moveCount, captureCount, quietCount; + int moveCount, captureCount, quietCount, bestMoveCount; // Step 1. Initialize node ss->inCheck = pos.checkers(); priorCapture = pos.captured_piece(); Color us = pos.side_to_move(); - moveCount = captureCount = quietCount = ss->moveCount = 0; + moveCount = bestMoveCount = captureCount = quietCount = ss->moveCount = 0; bestValue = -VALUE_INFINITE; maxValue = VALUE_INFINITE; @@ -1186,8 +1186,9 @@ moves_loop: // When in check, search starts here { Depth r = reduction(improving, depth, moveCount, rangeReduction > 2); - // Decrease reduction if on the PV (~1 Elo) - if (PvNode) + // Decrease reduction if on the PV (~2 Elo) + if ( PvNode + && bestMoveCount <= 3) r--; // Decrease reduction if the ttHit running average is large (~0 Elo) @@ -1340,7 +1341,10 @@ moves_loop: // When in check, search starts here update_pv(ss->pv, move, (ss+1)->pv); if (PvNode && value < beta) // Update alpha! Always alpha < beta + { alpha = value; + bestMoveCount++; + } else { assert(value >= beta); // Fail high