Revert "Retire null search verification"
authorMarco Costalba <mcostalba@gmail.com>
Wed, 12 Feb 2014 13:16:21 +0000 (14:16 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Wed, 12 Feb 2014 13:16:21 +0000 (14:16 +0100)
Although does not change ELO level, it seems
verification is useful in many zugzwang positions
as reported by many sources.

So revert this simplification.

bench: 8430785

src/search.cpp

index 097faf90f7c2fc4d15f5845335c306fa792ae99f..7188925c0e73c2f3e2fae8d5e2c1b77e5dea2374 100644 (file)
@@ -640,8 +640,24 @@ namespace {
         (ss+1)->skipNullMove = false;
         pos.undo_null_move();
 
-        if (nullValue >= beta) // Do not return unproven mate scores
-            return nullValue >= VALUE_MATE_IN_MAX_PLY ? beta : nullValue;
+        if (nullValue >= beta)
+        {
+            // Do not return unproven mate scores
+            if (nullValue >= VALUE_MATE_IN_MAX_PLY)
+                nullValue = beta;
+
+            if (depth < 12 * ONE_PLY)
+                return nullValue;
+
+            // Do verification search at high depths
+            ss->skipNullMove = true;
+            Value v = depth-R < ONE_PLY ? qsearch<NonPV, false>(pos, ss, beta-1, beta, DEPTH_ZERO)
+                                        :  search<NonPV>(pos, ss, beta-1, beta, depth-R, false);
+            ss->skipNullMove = false;
+
+            if (v >= beta)
+                return nullValue;
+        }
     }
 
     // Step 9. ProbCut (skipped when in check)