PV refutation penalty
authorVoyagerOne <excelgeek@gmail.com>
Wed, 29 Jul 2015 16:50:45 +0000 (00:50 +0800)
committerGary Linscott <glinscott@gmail.com>
Wed, 29 Jul 2015 16:51:49 +0000 (00:51 +0800)
Extra penalty for PV move in previous ply when it gets refuted.

STC:
LLR: 4.49 (-2.94,2.94) [-1.50,4.50]
Total: 41094 W: 7889 L: 7620 D: 25585

LTC:
LLR: 2.95 (-2.94,2.94) [0.00,6.00]
Total: 12304 W: 1967 L: 1811 D: 8526

Bench: 8373608

Resolves #386

src/search.cpp
src/search.h

index 9689668..3ac52f8 100644 (file)
@@ -553,7 +553,7 @@ namespace {
         goto moves_loop;
     }
 
-    moveCount = quietCount = 0;
+    moveCount = quietCount =  ss->moveCount = 0;
     bestValue = -VALUE_INFINITE;
     ss->ply = (ss-1)->ply + 1;
 
@@ -826,6 +826,8 @@ moves_loop: // When in check and at SpNode search starts from here
       }
       else
           ++moveCount;
+      
+      ss->moveCount = moveCount;
 
       if (RootNode)
       {
@@ -934,6 +936,7 @@ moves_loop: // When in check and at SpNode search starts from here
       if (!RootNode && !SpNode && !pos.legal(move, ci.pinned))
       {
           moveCount--;
+          ss->moveCount = moveCount;
           continue;
       }
 
@@ -1425,8 +1428,8 @@ moves_loop: // When in check and at SpNode search starts from here
             cmh.update(pos.moved_piece(quiets[i]), to_sq(quiets[i]), -bonus);
     }
 
-    // Extra penalty for TT move in previous ply when it gets refuted
-    if (is_ok((ss-2)->currentMove) && (ss-1)->currentMove == (ss-1)->ttMove && !pos.captured_piece_type())
+    // Extra penalty for PV move in previous ply when it gets refuted
+    if (is_ok((ss-2)->currentMove) && (ss-1)->moveCount==1 && !pos.captured_piece_type())
     {
         Square prevPrevSq = to_sq((ss-2)->currentMove);
         HistoryStats& ttMoveCmh = CounterMovesHistory[pos.piece_on(prevPrevSq)][prevPrevSq];
index 4e1d3c3..5ba95fe 100644 (file)
@@ -47,6 +47,7 @@ struct Stack {
   Depth reduction;
   Value staticEval;
   bool skipEarlyPruning;
+  int moveCount;
 };
 
 /// RootMove struct is used for moves at the root of the tree. For each root move