Expose new futility margin interface to UCI
authorMarco Costalba <mcostalba@gmail.com>
Thu, 25 Dec 2008 18:41:24 +0000 (19:41 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Thu, 25 Dec 2008 18:41:24 +0000 (19:41 +0100)
Now futility margin it's actually a scale factor
to apply to the base ones.

No functional change.

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

index c583e7b647af3d83a3c4389c33ebc08d2c761ae2..ffd484266b2196d0167c93b377c59b7a15230814 100644 (file)
@@ -162,13 +162,11 @@ namespace {
   bool UseQSearchFutilityPruning = true;
   bool UseFutilityPruning = true;
 
-  // Margins for futility pruning in the quiescence search, at frontier
-  // nodes, and at pre-frontier nodes
-  Value FutilityMargin0 = Value(0x80);
-  Value FutilityMargin1 = Value(0x100);
-  Value FutilityMargin2 = Value(0x200);
-  const Value FutilityMargins[6] = { Value(0x120), Value(0x220), Value(0x250),
-                                     Value(0x280), Value(0x320), Value(0x360) };
+  // Margins for futility pruning in the quiescence search, and at frontier
+  // and near frontier nodes
+  Value FutilityMarginQS = Value(0x80);
+  Value FutilityMargins[6] = { Value(0x120), Value(0x220), Value(0x250),
+                               Value(0x280), Value(0x320), Value(0x360) };
 
   // Razoring
   Depth RazorDepth = 4*OnePly;
@@ -417,9 +415,10 @@ void think(const Position &pos, bool infinite, bool ponder, int side_to_move,
   UseQSearchFutilityPruning = get_option_value_bool("Futility Pruning (Quiescence Search)");
   UseFutilityPruning = get_option_value_bool("Futility Pruning (Main Search)");
 
-  FutilityMargin0 = value_from_centipawns(get_option_value_int("Futility Margin 0"));
-  FutilityMargin1 = value_from_centipawns(get_option_value_int("Futility Margin 1"));
-  FutilityMargin2 = value_from_centipawns(get_option_value_int("Futility Margin 2"));
+  FutilityMarginQS = value_from_centipawns(get_option_value_int("Futility Margin (Quiescence Search)"));
+  int fmScale = get_option_value_int("Futility Margin (Main Serach)");
+  for (int i = 0; i < 6; i++)
+      FutilityMargins[i] = (FutilityMargins[i] * fmScale) / 100;
 
   RazorDepth = (get_option_value_int("Maximum Razoring Depth") + 1) * OnePly;
   RazorMargin = value_from_centipawns(get_option_value_int("Razoring Margin"));
@@ -1495,7 +1494,7 @@ namespace {
                               + Max(pos.midgame_value_of_piece_on(move_to(move)),
                                     pos.endgame_value_of_piece_on(move_to(move)))
                               + (move_is_ep(move) ? PawnValueEndgame : Value(0))
-                              + FutilityMargin0
+                              + FutilityMarginQS
                               + ei.futilityMargin;
 
           if (futilityValue < alpha)
index 936d8cd81b88318a63c2cde1cddec995ed86e494..6788a996dd3393b80480449522c4932c294f08ac 100644 (file)
@@ -123,9 +123,8 @@ namespace {
     o.push_back(Option("Null driven IID", false));
     o.push_back(Option("Futility Pruning (Main Search)", true));
     o.push_back(Option("Futility Pruning (Quiescence Search)", true));
-    o.push_back(Option("Futility Margin 0", 50, 0, 1000));
-    o.push_back(Option("Futility Margin 1", 100, 0, 1000));
-    o.push_back(Option("Futility Margin 2", 200, 0, 1000));
+    o.push_back(Option("Futility Margin (Quiescence Search)", 50, 0, 1000));
+    o.push_back(Option("Futility Margin (Main Serach)", 100, 0, 1000));
     o.push_back(Option("Maximum Razoring Depth", 3, 0, 4));
     o.push_back(Option("Razoring Margin", 300, 150, 600));
     o.push_back(Option("LSN filtering", true));