Skip to content

Commit

Permalink
Store only unchanged static evaluations in TT
Browse files Browse the repository at this point in the history
A recent commit introduced a decrease of the static evaluation of
an inner node dependent on the previous stat score, which finally
was also stored in the transposition table. Now only the unchanged
static evaluation are stored there.

Remark:
For the case that a static evaluation can be retrieved from the
transposition table the value is now used unchanged. Another test
which also applies the modification in this case failed:
http://tests.stockfishchess.org/tests/view/5b7af6df0ebc5902bdbae2f6

STC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 6707 W: 1547 L: 1383 D: 3777
http://tests.stockfishchess.org/tests/view/5b7a92df0ebc5902bdbadcf3

LTC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 36203 W: 6046 L: 5781 D: 24376
http://tests.stockfishchess.org/tests/view/5b7abaa10ebc5902bdbadfa9

Closes #1742

Bench: 4457440
  • Loading branch information
locutus2 authored and snicolet committed Aug 20, 2018
1 parent f3b8a69 commit 28543cd
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions src/search.cpp
Expand Up @@ -556,7 +556,7 @@ namespace {
Key posKey;
Move ttMove, move, excludedMove, bestMove;
Depth extension, newDepth;
Value bestValue, value, ttValue, eval, maxValue;
Value bestValue, value, ttValue, eval, maxValue, pureStaticEval;
bool ttHit, inCheck, givesCheck, improving;
bool captureOrPromotion, doFullDepthSearch, moveCountPruning, skipQuiets, ttCapture, pvExact;
Piece movedPiece;
Expand Down Expand Up @@ -705,15 +705,15 @@ namespace {
// Step 6. Static evaluation of the position
if (inCheck)
{
ss->staticEval = eval = VALUE_NONE;
ss->staticEval = pureStaticEval = eval = VALUE_NONE;
improving = false;
goto moves_loop; // Skip early pruning when in check
}
else if (ttHit)
{
// Never assume anything on values stored in TT
if ((ss->staticEval = eval = tte->eval()) == VALUE_NONE)
eval = ss->staticEval = evaluate(pos) - 10 * ((ss-1)->statScore > 0);
if ((ss->staticEval = pureStaticEval = eval = tte->eval()) == VALUE_NONE)
eval = ss->staticEval = (pureStaticEval = evaluate(pos)) - 10 * ((ss-1)->statScore > 0);

// Can ttValue be used as a better position evaluation?
if ( ttValue != VALUE_NONE
Expand All @@ -726,10 +726,10 @@ namespace {
int malus = p > 0 ? (p + 5000) / 1024 :
p < 0 ? (p - 5000) / 1024 : 0;

ss->staticEval = eval = (ss-1)->currentMove != MOVE_NULL ? evaluate(pos) - malus
: -(ss-1)->staticEval + 2 * Eval::Tempo;
ss->staticEval = eval = (ss-1)->currentMove != MOVE_NULL ? (pureStaticEval = evaluate(pos)) - malus
: (pureStaticEval = -(ss-1)->staticEval + 2 * Eval::Tempo);

tte->save(posKey, VALUE_NONE, BOUND_NONE, DEPTH_NONE, MOVE_NONE, ss->staticEval);
tte->save(posKey, VALUE_NONE, BOUND_NONE, DEPTH_NONE, MOVE_NONE, pureStaticEval);
}

// Step 7. Razoring (~2 Elo)
Expand Down Expand Up @@ -1179,7 +1179,7 @@ namespace {
tte->save(posKey, value_to_tt(bestValue, ss->ply),
bestValue >= beta ? BOUND_LOWER :
PvNode && bestMove ? BOUND_EXACT : BOUND_UPPER,
depth, bestMove, ss->staticEval);
depth, bestMove, pureStaticEval);

assert(bestValue > -VALUE_INFINITE && bestValue < VALUE_INFINITE);

Expand Down

0 comments on commit 28543cd

Please sign in to comment.