From: Joost VandeVondele Date: Sun, 10 Dec 2017 15:46:57 +0000 (+0100) Subject: Make staticEval independent of the search path X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=f6981b1321357866e7aff688572e1d0e1fe57c08 Make staticEval independent of the search path Current master can yield different staticEvals depending on the path used to reach the position. The reason for this is that the evaluation after a null move is always computed subtracting 2 * Eval::Tempo, while this is not the case for lazy or specialized evals. This patch always adds tempo to evals, which doesn't affect playing strength: LTC LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 59911 W: 7616 L: 7545 D: 44750 STC LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 104947 W: 18897 L: 18919 D: 67131 Fixes issue #1335 Bench: 5208264 --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 47a65c59..d9c306e8 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -891,7 +891,7 @@ namespace { Trace::add(TOTAL, score); } - return (pos.side_to_move() == WHITE ? v : -v) + Eval::Tempo; // Side to move point of view + return pos.side_to_move() == WHITE ? v : -v; // Side to move point of view } } // namespace @@ -903,7 +903,7 @@ Score Eval::Contempt = SCORE_ZERO; Value Eval::evaluate(const Position& pos) { - return Evaluation<>(pos).value(); + return Evaluation<>(pos).value() + Eval::Tempo; } /// trace() is like evaluate(), but instead of returning a value, it returns @@ -914,7 +914,7 @@ std::string Eval::trace(const Position& pos) { std::memset(scores, 0, sizeof(scores)); - Value v = Evaluation(pos).value(); + Value v = Evaluation(pos).value() + Eval::Tempo; v = pos.side_to_move() == WHITE ? v : -v; // White's point of view std::stringstream ss;