]> git.sesse.net Git - stockfish/blobdiff - src/search.cpp
LMR Capture Tweak
[stockfish] / src / search.cpp
index 31b6967c17ff008b97e6c939731a523232d92c17..7c9c1b6936bfc9220f0b7be372e969a529ee2fd8 100644 (file)
@@ -773,11 +773,13 @@ namespace {
             if (nullValue >= VALUE_MATE_IN_MAX_PLY)
                 nullValue = beta;
 
-            if (abs(beta) < VALUE_KNOWN_WIN && (depth < 12 * ONE_PLY || thisThread->nmp_min_ply))
+            if (thisThread->nmp_min_ply || (abs(beta) < VALUE_KNOWN_WIN && depth < 12 * ONE_PLY))
                 return nullValue;
 
-            // Do verification search at high depths. Disable null move pruning
-            // for side to move for the first part of the remaining search tree.
+            assert(!thisThread->nmp_min_ply); // Recursive verification is not allowed
+
+            // Do verification search at high depths, with null move pruning disabled
+            // for us, until ply exceeds nmp_min_ply.
             thisThread->nmp_min_ply = ss->ply + 3 * (depth-R) / 4 - 1;
             thisThread->nmp_color = us;
 
@@ -993,7 +995,14 @@ moves_loop: // When in check, search starts from here
           Depth r = reduction<PvNode>(improving, depth, moveCount);
 
           if (captureOrPromotion) // (~5 Elo)
+          {
+              //Increase reduction by comparing opponent's stat score
+              if (   (ss-1)->statScore >= 0 
+                  && thisThread->captureHistory[movedPiece][to_sq(move)][type_of(pos.captured_piece())] < 0)
+                  r += ONE_PLY;
+                            
               r -= r ? ONE_PLY : DEPTH_ZERO;
+          }
           else
           {
               // Decrease reduction if opponent's move count is high (~5 Elo)