This patch refines search reduction logic in case the position is not a former PV node and is pruned based on move count.
passed STC
https://tests.stockfishchess.org/tests/view/
5e8092bde42a5c3b3ca2ed35
LLR: 2.94 (-2.94,2.94) {-0.50,1.50}
Total: 78848 W: 15480 L: 15170 D: 48198
Ptnml(0-2): 1406, 9310, 17773, 9438, 1497
passed LTC
https://tests.stockfishchess.org/tests/view/
5e80bb13e42a5c3b3ca2ed4b
LLR: 2.94 (-2.94,2.94) {0.25,1.75}
Total: 86596 W: 11451 L: 11033 D: 64112
Ptnml(0-2): 624, 7993, 25687, 8329, 665
closes https://github.com/official-stockfish/Stockfish/pull/2605
Bench:
5138771
-# List of authors for Stockfish, as of January 7, 2020
+# List of authors for Stockfish, as of March 30, 2020
Tord Romstad (romstad)
Marco Costalba (mcostalba)
Tord Romstad (romstad)
Marco Costalba (mcostalba)
Patrick Jansen (mibere)
pellanda
Peter Zsifkovits (CoffeeOne)
Patrick Jansen (mibere)
pellanda
Peter Zsifkovits (CoffeeOne)
+Praveen Kumar Tummala (praveentml)
Rahul Dsilva (silversolver1)
Ralph Stößer (Ralph Stoesser)
Raminder Singh
Rahul Dsilva (silversolver1)
Ralph Stößer (Ralph Stoesser)
Raminder Singh
value = bestValue;
singularLMR = moveCountPruning = false;
ttCapture = ttMove && pos.capture_or_promotion(ttMove);
value = bestValue;
singularLMR = moveCountPruning = false;
ttCapture = ttMove && pos.capture_or_promotion(ttMove);
+ bool formerPv = ttPv && !PvNode;
// Mark this node as being searched
ThreadHolding th(thisThread, posKey, ss->ply);
// Mark this node as being searched
ThreadHolding th(thisThread, posKey, ss->ply);
&& tte->depth() >= depth - 3
&& pos.legal(move))
{
&& tte->depth() >= depth - 3
&& pos.legal(move))
{
- Value singularBeta = ttValue - (((ttPv && !PvNode) + 4) * depth) / 2;
- Depth singularDepth = (depth - 1 + 3 * (ttPv && !PvNode)) / 2;
+ Value singularBeta = ttValue - ((formerPv + 4) * depth) / 2;
+ Depth singularDepth = (depth - 1 + 3 * formerPv) / 2;
ss->excludedMove = move;
value = search<NonPV>(pos, ss, singularBeta - 1, singularBeta, singularDepth, cutNode);
ss->excludedMove = MOVE_NONE;
ss->excludedMove = move;
value = search<NonPV>(pos, ss, singularBeta - 1, singularBeta, singularDepth, cutNode);
ss->excludedMove = MOVE_NONE;
+ if (moveCountPruning && !formerPv)
+ r++;
+
// Decrease reduction if opponent's move count is high (~5 Elo)
if ((ss-1)->moveCount > 14)
r--;
// Decrease reduction if ttMove has been singularly extended (~3 Elo)
if (singularLMR)
// Decrease reduction if opponent's move count is high (~5 Elo)
if ((ss-1)->moveCount > 14)
r--;
// Decrease reduction if ttMove has been singularly extended (~3 Elo)
if (singularLMR)
- r -= 1 + (ttPv && !PvNode);
if (!captureOrPromotion)
{
if (!captureOrPromotion)
{