Revert storing of TT when returning from "stand pat"
authorMarco Costalba <mcostalba@gmail.com>
Fri, 27 Mar 2009 14:30:45 +0000 (15:30 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Fri, 27 Mar 2009 14:30:45 +0000 (15:30 +0100)
After testing it seems patch is bad:

After 999 games 1+0: +242 -271 =486 -10 ELO

So restore saving of TT at the end but using new Joona
idea of storing as VALUE_TYPE_UPPER/VALUE_TYPE_LOWER instead
of VALUE_TYPE_EXACT.

Some optimization is still possible but better test new ideas
one by one.

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

index 3617853e5f23d2f3589b7af48da9decbf48e4593..434587a87d5c6e40c627ca3a54edfbad779a1f0d 100644 (file)
@@ -1475,15 +1475,12 @@ namespace {
     Value bestValue = staticValue;
 
     if (bestValue >= beta)
-    {
-        // Update transposition table before to leave
-        TT.store(pos, value_to_tt(bestValue, ply), depth, MOVE_NONE, VALUE_TYPE_EXACT);
-        return bestValue;
-    }
-    else if (!isCheck && !tte && ei.futilityMargin == 0)
     {
         // Store the score to avoid a future costly evaluation() call
-        TT.store(pos, value_to_tt(bestValue, ply), Depth(-127*OnePly), MOVE_NONE, VALUE_TYPE_EVAL);
+        if (!isCheck && !tte && ei.futilityMargin == 0)
+            TT.store(pos, value_to_tt(bestValue, ply), Depth(-127*OnePly), MOVE_NONE, VALUE_TYPE_EVAL);
+
+        return bestValue;
     }
 
     if (bestValue > alpha)
@@ -1568,6 +1565,16 @@ namespace {
 
     assert(bestValue > -VALUE_INFINITE && bestValue < VALUE_INFINITE);
 
+    // Update transposition table
+    if (!pvNode)
+    {
+        Depth d = (depth == Depth(0) ? Depth(0) : Depth(-1));
+        if (bestValue < beta)
+            TT.store(pos, value_to_tt(bestValue, ply), d, MOVE_NONE, VALUE_TYPE_UPPER);
+        else
+            TT.store(pos, value_to_tt(bestValue, ply), d, MOVE_NONE, VALUE_TYPE_LOWER);
+    }
+
     // Update killers only for good check moves
     Move m = ss[ply].currentMove;
     if (alpha >= beta && ok_to_history(pos, m)) // Only non capture moves are considered