]> git.sesse.net Git - stockfish/blobdiff - src/search.cpp
Always extend full ply in PV
[stockfish] / src / search.cpp
index d0ddbd55045639a4e0a0ea87b8d46753c015bb83..7efb3928bf4a86c2efca25b7ead1b4d766eb461d 100644 (file)
@@ -1135,7 +1135,7 @@ namespace {
       moveIsCheck = pos.move_is_check(move, ci);
       captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
-      movesSearched[moveCount++] = ss[ply].currentMove = move;
+      movesSearched[moveCount++] = move;
 
       // Decide the new search depth
       ext = extension(pos, move, true, captureOrPromotion, moveIsCheck, singleReply, mateThreat, &dangerous);
@@ -1143,7 +1143,7 @@ namespace {
       // Only move extension
       if (   moveCount == 1
           && ext < OnePly
-          && depth >= 8 * OnePly
+          && depth >= 4 * OnePly
           && tte
           && (tte->type() & VALUE_TYPE_LOWER)
           && tte->move() != MOVE_NONE
@@ -1152,7 +1152,7 @@ namespace {
           Value ttValue = value_from_tt(tte->value(), ply);
           if (abs(ttValue) < VALUE_KNOWN_WIN)
           {
-              Value excValue = search(pos, ss, ttValue - OnlyMoveMargin, depth / 2, ply, false, threadID, tte->move());
+              Value excValue = search(pos, ss, ttValue - OnlyMoveMargin, Max(Min(depth / 2,  depth - 4 * OnePly), OnePly), ply, false, threadID, tte->move());
               if (excValue < ttValue - OnlyMoveMargin)
                   ext = OnePly;
           }
@@ -1160,6 +1160,9 @@ namespace {
 
       newDepth = depth - OnePly + ext;
 
+      // Update current move
+      ss[ply].currentMove = move;
+
       // Make and search the move
       pos.do_move(move, st, ci, moveIsCheck);
 
@@ -1434,7 +1437,7 @@ namespace {
       moveIsCheck = pos.move_is_check(move, ci);
       captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
-      movesSearched[moveCount++] = ss[ply].currentMove = move;
+      movesSearched[moveCount++] = move;
 
       // Decide the new search depth
       ext = extension(pos, move, false, captureOrPromotion, moveIsCheck, singleReply, mateThreat, &dangerous);
@@ -1443,7 +1446,7 @@ namespace {
       if (   forbiddenMove == MOVE_NONE
           && moveCount == 1
           && ext < OnePly
-          && depth >= 8 * OnePly
+          && depth >= 4 * OnePly
           && tte
           && (tte->type() & VALUE_TYPE_LOWER)
           && tte->move() != MOVE_NONE
@@ -1452,14 +1455,17 @@ namespace {
           Value ttValue = value_from_tt(tte->value(), ply);
           if (abs(ttValue) < VALUE_KNOWN_WIN)
           {
-              Value excValue = search(pos, ss, ttValue - OnlyMoveMargin, depth / 2, ply, false, threadID, tte->move());
+              Value excValue = search(pos, ss, ttValue - OnlyMoveMargin, Max(Min(depth / 2,  depth - 4 * OnePly), OnePly), ply, false, threadID, tte->move());
               if (excValue < ttValue - OnlyMoveMargin)
-                  ext = OnePly;
+                  ext = (depth >= 8 * OnePly)? OnePly : ext + OnePly / 2;
           }
       }
 
       newDepth = depth - OnePly + ext;
 
+      // Update current move
+      ss[ply].currentMove = move;
+
       // Futility pruning
       if (    useFutilityPruning
           && !dangerous