Passed STC http://tests.stockfishchess.org/tests/view/
5cda71790ebc5925cf057a84
LLR: 2.95 (-2.94,2.94) [0.50,4.50]
Total: 73454 W: 16482 L: 15954 D: 41018
Passed LTC http://tests.stockfishchess.org/tests/view/
5cdab17b0ebc5925cf05822f
LLR: 2.95 (-2.94,2.94) [0.00,3.50]
Total: 56696 W: 9877 L: 9538 D: 37281
Original idea by @locutus2
bench
3378510
value = bestValue; // Workaround a bogus 'uninitialized' warning under gcc
moveCountPruning = false;
ttCapture = ttMove && pos.capture_or_promotion(ttMove);
value = bestValue; // Workaround a bogus 'uninitialized' warning under gcc
moveCountPruning = false;
ttCapture = ttMove && pos.capture_or_promotion(ttMove);
+ int singularExtensionLMRmultiplier = 0;
// Step 12. Loop through all pseudo-legal moves until no moves remain
// or a beta cutoff occurs.
// Step 12. Loop through all pseudo-legal moves until no moves remain
// or a beta cutoff occurs.
ss->excludedMove = MOVE_NONE;
if (value < singularBeta)
ss->excludedMove = MOVE_NONE;
if (value < singularBeta)
+ singularExtensionLMRmultiplier++;
+ if (value < singularBeta - std::min(3 * depth / ONE_PLY, 39))
+ singularExtensionLMRmultiplier++;
+ }
// Multi-cut pruning
// Our ttMove is assumed to fail high, and now we failed high also on a reduced
// Multi-cut pruning
// Our ttMove is assumed to fail high, and now we failed high also on a reduced
// Decrease reduction if opponent's move count is high (~10 Elo)
if ((ss-1)->moveCount > 15)
r -= ONE_PLY;
// Decrease reduction if opponent's move count is high (~10 Elo)
if ((ss-1)->moveCount > 15)
r -= ONE_PLY;
+ // Decrease reduction if move has been singularly extended
+ r -= singularExtensionLMRmultiplier * ONE_PLY;
if (!captureOrPromotion)
{
if (!captureOrPromotion)
{