Adjust reductions based on history and cmh tables
authorStefano80 <stefano.cardanobile@gmail.com>
Wed, 13 Jan 2016 16:05:31 +0000 (16:05 +0000)
committerJoona Kiiski <joona@zoox.com>
Wed, 13 Jan 2016 16:18:35 +0000 (16:18 +0000)
STC:
LLR: 4.06 (-2.94,2.94) [0.00,5.00]
Total: 149395 W: 28029 L: 27208 D: 94158

LTC:
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 9628 W: 1368 L: 1217 D: 7043

bench: 8076724

Resolves #565

src/search.cpp

index 0cee3aa..70052bb 100644 (file)
@@ -1000,10 +1000,11 @@ moves_loop: // When in check search starts from here
                   && cmh[pos.piece_on(to_sq(move))][to_sq(move)] <= VALUE_ZERO))
               r += ONE_PLY;
 
-          // Decrease reduction for moves with a good history
-          if (   thisThread->history[pos.piece_on(to_sq(move))][to_sq(move)] > VALUE_ZERO
-              && cmh[pos.piece_on(to_sq(move))][to_sq(move)] > VALUE_ZERO)
-              r = std::max(DEPTH_ZERO, r - ONE_PLY);
+          // Decrease reduction for moves with a good history and
+          // increase reduction for moves with a bad history
+          int rDecrease = (  thisThread->history[pos.piece_on(to_sq(move))][to_sq(move)] 
+                           + cmh[pos.piece_on(to_sq(move))][to_sq(move)]) / 14980;
+          r = std::max(DEPTH_ZERO, r - rDecrease * ONE_PLY);
 
           // Decrease reduction for moves that escape a capture. Filter out castling
           // moves because are coded as "king captures rook" and break make_move().