Reintroduce null move dynamic reduction
authorMarco Costalba <mcostalba@gmail.com>
Thu, 16 Jul 2009 06:05:54 +0000 (07:05 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 18 Jul 2009 05:08:06 +0000 (06:08 +0100)
Test extension of LMR horizon to 3 plies alone, without
touching null move search. To keep the patch minimal we still
don't change LMR horizon in PV search. This will be the object
of the next patch.

Result seems good after 998 games:

Mod vs Orig  +252/=518/-228 51.20%  511.0/998 +8 ELO

So dynamic null move reduction seems a bit stronger then
fixed reduction even with LMR horizon set to 3.

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

index 08e3a997c4d3c63365e24040e1803d298e8b3075..b4e9b14c6c5073c540cb33fc5657c80991a96ba2 100644 (file)
@@ -1243,8 +1243,9 @@ namespace {
 
         StateInfo st;
         pos.do_null_move(st);
+        int R = (depth >= 5 * OnePly ? 4 : 3); // Null move dynamic reduction
 
-        Value nullValue = -search(pos, ss, -(beta-1), depth-4*OnePly, ply+1, false, threadID);
+        Value nullValue = -search(pos, ss, -(beta-1), depth-R*OnePly, ply+1, false, threadID);
 
         pos.undo_null_move();
 
@@ -1363,7 +1364,7 @@ namespace {
 
       // Try to reduce non-pv search depth by one ply if move seems not problematic,
       // if the move fails high will be re-searched at full depth.
-      if (    depth >= (ss[ply-1].currentMove == MOVE_NULL ? 3 : 2) * OnePly
+      if (    depth >= 3*OnePly
           &&  moveCount >= LMRNonPVMoves
           && !dangerous
           && !moveIsCapture