Do not razor after a null move
authorMarco Costalba <mcostalba@gmail.com>
Thu, 30 Apr 2009 06:55:38 +0000 (08:55 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Thu, 30 Apr 2009 06:55:38 +0000 (08:55 +0200)
We don't want to return unproven null move fails high, so
that if a position is so good that null move fails high we
want to check this with real do_move() / undo_move() test,
not just razoring the position because, from the opponent
point of view, is very bad.

These are tests results at 1+0

Mod vs Orig +252 -264 =483  49.40%
Mod vs Toga II 1.4.1SE  +365 -325 =309  52.00%

So it seems a very slightly regression regarding orig version (but
withing error bar) and a nice increase against Toga that is what we
are interested most. Orig version scores 49.75% against Toga, so
we welcome this change ;-)

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

index 67369ad..3838375 100644 (file)
@@ -1309,6 +1309,7 @@ namespace {
     else if (   !value_is_mate(beta)
              && depth < RazorDepth
              && approximateEval < beta - RazorApprMargins[int(depth) - 2]
     else if (   !value_is_mate(beta)
              && depth < RazorDepth
              && approximateEval < beta - RazorApprMargins[int(depth) - 2]
+             && ss[ply - 1].currentMove != MOVE_NULL
              && ttMove == MOVE_NONE
              && !pos.has_pawn_on_7th(pos.side_to_move()))
     {
              && ttMove == MOVE_NONE
              && !pos.has_pawn_on_7th(pos.side_to_move()))
     {