From: Joona Kiiski Date: Sun, 17 Jan 2010 11:55:10 +0000 (+0200) Subject: Retire quick_evaluate() X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=000a975eafc9f509f16ebb75f3dc2c655adf84b1;hp=d4575941974ade5135971b87ff663ef4ff000de9 Retire quick_evaluate() No change in functionality signature The only functional change is that when we reach PLY_MAX, we now return VALUE_DRAW instead of evaluating position. But we reach PLY_MAX only when position is dead drawn and transposition table is filled with draw scores, so this shouldn't matter at all. Signed-off-by: Marco Costalba --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index b50a023b..07a1e210 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -436,21 +436,6 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) { } // namespace -/// quick_evaluate() does a very approximate evaluation of the current position. -/// It currently considers only material and piece square table scores. Perhaps -/// we should add scores from the pawn and material hash tables? - -Value quick_evaluate(const Position &pos) { - - assert(pos.is_ok()); - - static const ScaleFactor sf[2] = {SCALE_FACTOR_NORMAL, SCALE_FACTOR_NORMAL}; - - Value v = scale_by_game_phase(pos.value(), MaterialInfoTable::game_phase(pos), sf); - return (pos.side_to_move() == WHITE ? v : -v); -} - - /// init_eval() initializes various tables used by the evaluation function void init_eval(int threads) { diff --git a/src/evaluate.h b/src/evaluate.h index cf56a58a..43c36123 100644 --- a/src/evaluate.h +++ b/src/evaluate.h @@ -104,7 +104,6 @@ struct EvalInfo { //// extern Value evaluate(const Position& pos, EvalInfo& ei, int threadID); -extern Value quick_evaluate(const Position& pos); extern void init_eval(int threads); extern void quit_eval(); extern void read_weights(Color sideToMove); diff --git a/src/search.cpp b/src/search.cpp index 40808c6a..c740b3c3 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1098,7 +1098,6 @@ namespace { assert(threadID >= 0 && threadID < ActiveThreads); Move movesSearched[256]; - EvalInfo ei; StateInfo st; const TTEntry* tte; Move ttMove, move; @@ -1119,12 +1118,9 @@ namespace { if (AbortSearch || thread_should_stop(threadID)) return Value(0); - if (pos.is_draw()) + if (pos.is_draw() || ply >= PLY_MAX - 1) return VALUE_DRAW; - if (ply >= PLY_MAX - 1) - return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID); - // Mate distance pruning oldAlpha = alpha; alpha = Max(value_mated_in(ply), alpha); @@ -1349,12 +1345,9 @@ namespace { if (AbortSearch || thread_should_stop(threadID)) return Value(0); - if (pos.is_draw()) + if (pos.is_draw() || ply >= PLY_MAX - 1) return VALUE_DRAW; - if (ply >= PLY_MAX - 1) - return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID); - // Mate distance pruning if (value_mated_in(ply) >= beta) return beta; @@ -1379,22 +1372,24 @@ namespace { isCheck = pos.is_check(); ei.futilityMargin = Value(0); // Manually initialize futilityMargin - // Evaluate the position statically - if (isCheck) - staticValue = quick_evaluate(pos); - else if (tte && (tte->type() & VALUE_TYPE_EVAL)) - staticValue = value_from_tt(tte->value(), ply); - else - staticValue = evaluate(pos, ei, threadID); - // Calculate depth dependant futility pruning parameters const int FutilityMoveCountMargin = 3 + (1 << (3 * int(depth) / 8)); const int FutilityValueMargin = 112 * bitScanReverse32(int(depth) * int(depth) / 2); - // Enhance score accuracy with TT value if possible - ss[ply].eval = staticValue; - futilityValue = staticValue + FutilityValueMargin; - staticValue = refine_eval(tte, staticValue, ply); + // Evaluate the position statically + if (isCheck) + ss[ply].eval = VALUE_NONE; + else + { + if (tte && (tte->type() & VALUE_TYPE_EVAL)) + staticValue = value_from_tt(tte->value(), ply); + else + staticValue = evaluate(pos, ei, threadID); + + ss[ply].eval = staticValue; + futilityValue = staticValue + FutilityValueMargin; + staticValue = refine_eval(tte, staticValue, ply); // Enhance accuracy with TT value if possible + } // Null move search if ( allowNullmove @@ -1660,12 +1655,9 @@ namespace { if (AbortSearch || thread_should_stop(threadID)) return Value(0); - if (pos.is_draw()) + if (pos.is_draw() || ply >= PLY_MAX - 1) return VALUE_DRAW; - if (ply >= PLY_MAX - 1) - return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID); - // Transposition table lookup. At PV nodes, we don't use the TT for // pruning, but only for move ordering. tte = TT.retrieve(pos.get_key());