mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-22 18:17:02 +08:00
Movecount pruning reduction logic
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
This commit is contained in:
committed by
Joost VandeVondele
parent
f2430bf034
commit
b7ecdaada7
3
AUTHORS
3
AUTHORS
@@ -1,4 +1,4 @@
|
|||||||
# List of authors for Stockfish, as of January 7, 2020
|
# List of authors for Stockfish, as of March 30, 2020
|
||||||
|
|
||||||
Tord Romstad (romstad)
|
Tord Romstad (romstad)
|
||||||
Marco Costalba (mcostalba)
|
Marco Costalba (mcostalba)
|
||||||
@@ -123,6 +123,7 @@ Pasquale Pigazzini (ppigazzini)
|
|||||||
Patrick Jansen (mibere)
|
Patrick Jansen (mibere)
|
||||||
pellanda
|
pellanda
|
||||||
Peter Zsifkovits (CoffeeOne)
|
Peter Zsifkovits (CoffeeOne)
|
||||||
|
Praveen Kumar Tummala (praveentml)
|
||||||
Rahul Dsilva (silversolver1)
|
Rahul Dsilva (silversolver1)
|
||||||
Ralph Stößer (Ralph Stoesser)
|
Ralph Stößer (Ralph Stoesser)
|
||||||
Raminder Singh
|
Raminder Singh
|
||||||
|
|||||||
@@ -962,6 +962,7 @@ moves_loop: // When in check, search starts from here
|
|||||||
value = bestValue;
|
value = bestValue;
|
||||||
singularLMR = moveCountPruning = false;
|
singularLMR = moveCountPruning = false;
|
||||||
ttCapture = ttMove && pos.capture_or_promotion(ttMove);
|
ttCapture = ttMove && pos.capture_or_promotion(ttMove);
|
||||||
|
bool formerPv = ttPv && !PvNode;
|
||||||
|
|
||||||
// Mark this node as being searched
|
// Mark this node as being searched
|
||||||
ThreadHolding th(thisThread, posKey, ss->ply);
|
ThreadHolding th(thisThread, posKey, ss->ply);
|
||||||
@@ -1054,8 +1055,8 @@ moves_loop: // When in check, search starts from here
|
|||||||
&& tte->depth() >= depth - 3
|
&& tte->depth() >= depth - 3
|
||||||
&& pos.legal(move))
|
&& pos.legal(move))
|
||||||
{
|
{
|
||||||
Value singularBeta = ttValue - (((ttPv && !PvNode) + 4) * depth) / 2;
|
Value singularBeta = ttValue - ((formerPv + 4) * depth) / 2;
|
||||||
Depth singularDepth = (depth - 1 + 3 * (ttPv && !PvNode)) / 2;
|
Depth singularDepth = (depth - 1 + 3 * formerPv) / 2;
|
||||||
ss->excludedMove = move;
|
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;
|
ss->excludedMove = MOVE_NONE;
|
||||||
@@ -1143,13 +1144,16 @@ moves_loop: // When in check, search starts from here
|
|||||||
if (ttPv)
|
if (ttPv)
|
||||||
r -= 2;
|
r -= 2;
|
||||||
|
|
||||||
|
if (moveCountPruning && !formerPv)
|
||||||
|
r++;
|
||||||
|
|
||||||
// Decrease reduction if opponent's move count is high (~5 Elo)
|
// Decrease reduction if opponent's move count is high (~5 Elo)
|
||||||
if ((ss-1)->moveCount > 14)
|
if ((ss-1)->moveCount > 14)
|
||||||
r--;
|
r--;
|
||||||
|
|
||||||
// Decrease reduction if ttMove has been singularly extended (~3 Elo)
|
// Decrease reduction if ttMove has been singularly extended (~3 Elo)
|
||||||
if (singularLMR)
|
if (singularLMR)
|
||||||
r -= 1 + (ttPv && !PvNode);
|
r -= 1 + formerPv;
|
||||||
|
|
||||||
if (!captureOrPromotion)
|
if (!captureOrPromotion)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user