IncrementalFutilityMargin to 4 and increased pruning
authorMarco Costalba <mcostalba@gmail.com>
Thu, 26 Nov 2009 10:37:21 +0000 (11:37 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Fri, 27 Nov 2009 20:17:34 +0000 (21:17 +0100)
Increase pruning at low depths while tone downa bit at
higher depths (linearize a bit the logaritmic behaviour)

This goes togheter with IncrementalFutilityMargin decreased
to 4 compensate the bigger pruning effect.

Total pruned nodes are more or less the same. We go from 36%
of nodes after prune to 37% with this patch.

After 999 games at 1+0
Mod vs Orig +250 =526 -223 +9 ELO

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

index 95d8be98bc858cad282f233abf5dad0b011eb3fc..d8e60a129317f90acda38e5f6f1ae6b5c6b090bf 100644 (file)
@@ -180,7 +180,7 @@ namespace {
   const Value FutilityMarginQS = Value(0x80);
 
   // Each move futility margin is decreased
-  const Value IncrementalFutilityMargin = Value(0x8);
+  const Value IncrementalFutilityMargin = Value(0x4);
 
   // Remaining depth:                  1 ply         1.5 ply       2 ply         2.5 ply       3 ply         3.5 ply
   const Value FutilityMargins[12] = { Value(0x100), Value(0x120), Value(0x200), Value(0x220), Value(0x250), Value(0x270),
@@ -1452,6 +1452,12 @@ namespace {
     // Move count pruning limit
     const int MCLimit = 3 + (1 << (3*int(depth)/8));
 
+    /*
+    for (int d = 2; d < 16; d++)
+        std::cout << d << " -> " << 56*(0+2*bitScanReverse32(1 * int(d) * int(d) / 2)) << std::endl;
+        //std::cout << d << " -> " << 32*(1+3*bitScanReverse32(1 * int(d) * int(d))) << std::endl;
+    */
+
     // Loop through all legal moves until no moves remain or a beta cutoff occurs
     while (   bestValue < beta
            && (move = mp.get_next_move()) != MOVE_NONE
@@ -1513,10 +1519,10 @@ namespace {
 
           // Value based pruning
           if (approximateEval < beta)
-          {
+          {//dbg_before();
               if (futilityValue == VALUE_NONE)
                   futilityValue =  evaluate(pos, ei, threadID)
-                                 + 64*(2+bitScanReverse32(int(depth) * int(depth)));
+                                 + 56*(0+2*bitScanReverse32(1 * int(depth) * int(depth) / 2));
 
               futilityValueScaled = futilityValue - moveCount * IncrementalFutilityMargin;
 
@@ -1526,6 +1532,7 @@ namespace {
                       bestValue = futilityValueScaled;
                   continue;
               }
+           //dbg_after(); // 36% (inc == 8), 40% (inc == 4), 37%(56)
           }
       }