From 08753771fc800ce85b8f3218219e5db8c7ef7817 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Fri, 6 Jun 2014 09:35:34 +0200 Subject: [PATCH] Move Tempo to evaluation No functional change. --- src/evaluate.cpp | 2 +- src/evaluate.h | 2 ++ src/search.cpp | 15 ++++++--------- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 804e1dd7..bea0e306 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -855,7 +855,7 @@ namespace Eval { /// of the position always from the point of view of the side to move. Value evaluate(const Position& pos) { - return do_evaluate(pos); + return do_evaluate(pos) + Tempo; } diff --git a/src/evaluate.h b/src/evaluate.h index 73df76a9..eb323b4c 100644 --- a/src/evaluate.h +++ b/src/evaluate.h @@ -26,6 +26,8 @@ class Position; namespace Eval { +const int Tempo = 17; // Must be visible to search + extern void init(); extern Value evaluate(const Position& pos); extern std::string trace(const Position& pos); diff --git a/src/search.cpp b/src/search.cpp index 37a96266..529345e9 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -76,9 +76,6 @@ namespace { return (Depth) Reductions[PvNode][i][std::min(int(d) / ONE_PLY, 63)][std::min(mn, 63)]; } - // Tempo bonus. Must be handled by search to preserve eval symmetry. - const int Tempo = 17; - size_t MultiPV, PVIdx; TimeManager TimeMgr; double BestMoveChanges; @@ -484,7 +481,7 @@ namespace { { // Step 2. Check for aborted search and immediate draw if (Signals.stop || pos.is_draw() || ss->ply > MAX_PLY) - return ss->ply > MAX_PLY && !inCheck ? evaluate(pos) + Tempo : DrawValue[pos.side_to_move()]; + return ss->ply > MAX_PLY && !inCheck ? evaluate(pos) : DrawValue[pos.side_to_move()]; // Step 3. Mate distance pruning. Even if we mate at the next move our score // would be at best mate_in(ss->ply+1), but if alpha is already bigger because @@ -539,7 +536,7 @@ namespace { { // Never assume anything on values stored in TT if ((ss->staticEval = eval = tte->eval_value()) == VALUE_NONE) - eval = ss->staticEval = evaluate(pos) + Tempo; + eval = ss->staticEval = evaluate(pos); // Can ttValue be used as a better position evaluation? if (ttValue != VALUE_NONE) @@ -548,7 +545,7 @@ namespace { } else { - eval = ss->staticEval = ss->nullChild ? -(ss-1)->staticEval + 2 * Tempo : evaluate(pos) + Tempo; + eval = ss->staticEval = ss->nullChild ? -(ss-1)->staticEval + 2 * Eval::Tempo : evaluate(pos); TT.store(posKey, VALUE_NONE, BOUND_NONE, DEPTH_NONE, MOVE_NONE, ss->staticEval); } @@ -1066,7 +1063,7 @@ moves_loop: // When in check and at SpNode search starts from here // Check for an instant draw or if the maximum ply has been reached if (pos.is_draw() || ss->ply > MAX_PLY) - return ss->ply > MAX_PLY && !InCheck ? evaluate(pos) + Tempo : DrawValue[pos.side_to_move()]; + return ss->ply > MAX_PLY && !InCheck ? evaluate(pos) : DrawValue[pos.side_to_move()]; // Decide whether or not to include checks: this fixes also the type of // TT entry depth that we are going to use. Note that in qsearch we use @@ -1103,7 +1100,7 @@ moves_loop: // When in check and at SpNode search starts from here { // Never assume anything on values stored in TT if ((ss->staticEval = bestValue = tte->eval_value()) == VALUE_NONE) - ss->staticEval = bestValue = evaluate(pos) + Tempo; + ss->staticEval = bestValue = evaluate(pos); // Can ttValue be used as a better position evaluation? if (ttValue != VALUE_NONE) @@ -1111,7 +1108,7 @@ moves_loop: // When in check and at SpNode search starts from here bestValue = ttValue; } else - ss->staticEval = bestValue = ss->nullChild ? -(ss-1)->staticEval + 2 * Tempo : evaluate(pos) + Tempo; + ss->staticEval = bestValue = ss->nullChild ? -(ss-1)->staticEval + 2 * Eval::Tempo : evaluate(pos); // Stand pat. Return immediately if static value is at least beta if (bestValue >= beta) -- 2.39.2