Try razoring only for depth > OnePly
authorMarco Costalba <mcostalba@gmail.com>
Wed, 24 Dec 2008 10:27:07 +0000 (11:27 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Wed, 24 Dec 2008 08:35:57 +0000 (09:35 +0100)
Because razoring verification after qsearch() cuts more
then 40% of candidates, do not waste a costly qsearch for
nodes at depth one that will be probably discarded anyway
by futility.

Also tight razoring conditions to keep dangerous false
negatives below 0,05%. Still not clear if it is enough.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/search.cpp

index 768a22a4d36b50ce919248e7c0dc4cc95fe286c8..54ff467c1e563314ffed6804744fb1226ee555cf 100644 (file)
@@ -1239,10 +1239,13 @@ namespace {
     // Null move search not allowed, try razoring
     else if (   !value_is_mate(beta)
              && approximateEval < beta - RazorMargin
-             && depth < RazorDepth)
+             && depth < RazorDepth
+             && depth > OnePly
+             && ttMove == MOVE_NONE
+             && !pos.has_pawn_on_7th(pos.side_to_move()))
     {
         Value v = qsearch(pos, ss, beta-1, beta, Depth(0), ply, threadID);
-        if (v < beta - RazorMargin / 2)
+        if (v < beta - RazorMargin / 2 - int(depth - OnePly) * RazorMargin / 8)
             return v;
     }