Stat score initialization: children
authorStefan Geschwentner <locutus2@users.noreply.github.com>
Tue, 27 Feb 2018 17:18:07 +0000 (18:18 +0100)
committerStéphane Nicolet <cassio@free.fr>
Tue, 27 Feb 2018 17:18:56 +0000 (18:18 +0100)
Let the parent node initialize stat score to zero once for all siblings.

Initialize statScore to zero for the children of the current position.
So statScore is shared between sibling positions and only the first sibling
starts with statScore = 0. Later siblings start with the last calculated
statScore of the previous sibling. This influences the reduction rules in
in LMR which are based on the statScore of parent position.

STC:
LLR: 2.96 (-2.94,2.94) [0.00,4.00]
Total: 22683 W: 5202 L: 4946 D: 12535
http://tests.stockfishchess.org/tests/view/5a93315f0ebc590297cc894f

LTC:
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 48548 W: 8346 L: 8035 D: 32167
http://tests.stockfishchess.org/tests/view/5a933ba90ebc590297cc8962

Bench: 5833683

src/search.cpp

index 394f228..a5b07d2 100644 (file)
@@ -514,10 +514,16 @@ namespace {
     Thread* thisThread = pos.this_thread();
     inCheck = pos.checkers();
     moveCount = captureCount = quietCount = ss->moveCount = 0;
-    ss->statScore = 0;
     bestValue = -VALUE_INFINITE;
     maxValue = VALUE_INFINITE;
 
+    // Initialize statScore to zero for the childs of the current position.
+    // So statScore is shared between sibling positions and only the first sibling
+    // starts with statScore = 0. Later siblings start with the last calculated
+    // statScore of the previous sibling. This influences in LMR the reduction rules
+    // which based on the statScore of parent position.
+    (ss+1)->statScore = 0;
+
     // Check for the available remaining time
     if (thisThread == Threads.main())
         static_cast<MainThread*>(thisThread)->check_time();