Allow some LMR double extensions
authorStéphane Nicolet <cassio@free.fr>
Sun, 17 Oct 2021 09:56:35 +0000 (11:56 +0200)
committerJoost VandeVondele <Joost.VandeVondele@gmail.com>
Sun, 17 Oct 2021 10:29:11 +0000 (12:29 +0200)
Allow some LMR double extensions for the second and third sons of each node.

STC:
LLR: 2.94 (-2.94,2.94) <-0.50,2.50>
Total: 170320 W: 42608 L: 42187 D: 85525
Ptnml(0-2): 516, 19635, 44422, 20086, 501
https://tests.stockfishchess.org/tests/view/616a9e3899b580bf37797cf4

LTC:
LLR: 2.93 (-2.94,2.94) <0.50,3.50>
Total: 74400 W: 18783 L: 18423 D: 37194
Ptnml(0-2): 46, 7812, 21129, 8162, 51
https://tests.stockfishchess.org/tests/view/616b378499b580bf37797d61

closes https://github.com/official-stockfish/Stockfish/pull/3742

Bench: 4877152

src/search.cpp

index 9f005587aa4c5845a0a1fcf0b9031be23f59bbc2..39bb1fdb94867728840b0653658da19645bb1de7 100644 (file)
@@ -1219,13 +1219,13 @@ moves_loop: // When in check, search starts here
 
           // In general we want to cap the LMR depth search at newDepth. But if reductions
           // are really negative and movecount is low, we allow this move to be searched
-          // deeper than the first move (this may lead to hidden double extensions if
-          // newDepth got its own extension before).
-          int deeper =   r >= -1               ? 0
-                       : noLMRExtension        ? 0
-                       : moveCount <= 5        ? 1
-                       : (depth > 6 && PvNode) ? 1
-                       :                         0;
+          // deeper than the first move (this may lead to hidden double extensions).
+          int deeper =   r >= -1                   ? 0
+                       : noLMRExtension            ? 0
+                       : moveCount <= 3 && r <= -3 ? 2
+                       : moveCount <= 5            ? 1
+                       : PvNode && depth > 6       ? 1
+                       :                             0;
 
           Depth d = std::clamp(newDepth - r, 1, newDepth + deeper);