Vary reduction aggressiveness as a function of thinking time
authorJoona Kiiski <joona.kiiski@gmail.com>
Sun, 21 Mar 2010 20:44:56 +0000 (22:44 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Tue, 23 Mar 2010 22:29:23 +0000 (23:29 +0100)
In the beginning use milder reduction and at the end be
more aggressive.

After 1500 games on Joona's QUAD
Mod - Orig: 791 - 720 +16 elo

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

index 8558bf155bb390d3ff4252d528768efdfeb5932c..ab37e480fc5d50bdb10f79b6e3f08b8e2d0d1e5a 100644 (file)
@@ -215,12 +215,14 @@ namespace {
 
   // Step 14. Reduced search
 
 
   // Step 14. Reduced search
 
+  int ReductionLevel = 2; // 0 = most aggressive reductions, 7 = minimum reductions
+
   // Reduction lookup tables (initialized at startup) and their getter functions
   int8_t    PVReductionMatrix[8][64][64]; // [depth][moveNumber]
   int8_t NonPVReductionMatrix[8][64][64]; // [depth][moveNumber]
 
   // Reduction lookup tables (initialized at startup) and their getter functions
   int8_t    PVReductionMatrix[8][64][64]; // [depth][moveNumber]
   int8_t NonPVReductionMatrix[8][64][64]; // [depth][moveNumber]
 
-  inline Depth    pv_reduction(Depth d, int mn) { return (Depth)    PVReductionMatrix[0][Min(d / 2, 63)][Min(mn, 63)]; }
-  inline Depth nonpv_reduction(Depth d, int mn) { return (Depth) NonPVReductionMatrix[0][Min(d / 2, 63)][Min(mn, 63)]; }
+  inline Depth    pv_reduction(Depth d, int mn) { return (Depth)    PVReductionMatrix[ReductionLevel][Min(d / 2, 63)][Min(mn, 63)]; }
+  inline Depth nonpv_reduction(Depth d, int mn) { return (Depth) NonPVReductionMatrix[ReductionLevel][Min(d / 2, 63)][Min(mn, 63)]; }
 
   // Common adjustments
 
 
   // Common adjustments
 
@@ -671,6 +673,19 @@ namespace {
             beta  = Min(ValueByIteration[Iteration - 1] + AspirationDelta,  VALUE_INFINITE);
         }
 
             beta  = Min(ValueByIteration[Iteration - 1] + AspirationDelta,  VALUE_INFINITE);
         }
 
+        // Choose optimum reduction level
+        ReductionLevel = 2;
+
+        if (UseTimeManagement)
+        {
+            int level = int(floor(log(float(MaxSearchTime) / current_search_time()) / log(2.0) + 1.0));
+            ReductionLevel = Min(Max(level, 0), 7);
+        }
+        else
+        {
+            //FIXME
+        }
+
         // Search to the current depth, rml is updated and sorted, alpha and beta could change
         value = root_search(p, ss, rml, &alpha, &beta);
 
         // Search to the current depth, rml is updated and sorted, alpha and beta could change
         value = root_search(p, ss, rml, &alpha, &beta);