From ff95bbd41f88bc3c4002218fd14b2d869c6f7d8c Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 30 Oct 2010 14:22:57 +0100 Subject: [PATCH] Use margins[] array in evaluate It will be used by future patches. No functional change. Signed-off-by: Marco Costalba --- src/evaluate.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index e167bb69..7695b3bb 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -230,7 +230,7 @@ namespace { Score evaluate_pieces_of_color(const Position& pos, EvalInfo& ei, Score& mobility); template - Score evaluate_king(const Position& pos, EvalInfo& ei, Value& margin); + Score evaluate_king(const Position& pos, EvalInfo& ei, Value margins[]); template Score evaluate_threats(const Position& pos, EvalInfo& ei); @@ -276,6 +276,7 @@ template Value do_evaluate(const Position& pos, Value& margin) { EvalInfo ei; + Value margins[2]; Score mobilityWhite, mobilityBlack; assert(pos.is_ok()); @@ -286,9 +287,9 @@ Value do_evaluate(const Position& pos, Value& margin) { // in the position object (material + piece square tables). Score bonus = pos.value(); - // margin is the uncertainty estimation of position's evaluation - // and typically is used by the search for pruning decisions. - margin = VALUE_ZERO; + // margins[] store the uncertainty estimation of position's evaluation + // that typically is used by the search for pruning decisions. + margins[WHITE] = margins[BLACK] = VALUE_ZERO; // Probe the material hash table MaterialInfo* mi = MaterialTable[pos.thread()]->get_material_info(pos); @@ -297,7 +298,10 @@ Value do_evaluate(const Position& pos, Value& margin) { // If we have a specialized evaluation function for the current material // configuration, call it and return. if (mi->specialized_eval_exists()) + { + margin = VALUE_ZERO; return mi->evaluate(pos); + } // Probe the pawn hash table ei.pi = PawnTable[pos.thread()]->get_pawn_info(pos); @@ -315,8 +319,8 @@ Value do_evaluate(const Position& pos, Value& margin) { // Evaluate kings after all other pieces because we need complete attack // information when computing the king safety evaluation. - bonus += evaluate_king(pos, ei, margin) - - evaluate_king(pos, ei, margin); + bonus += evaluate_king(pos, ei, margins) + - evaluate_king(pos, ei, margins); // Evaluate tactical threats, we need full attack information including king bonus += evaluate_threats(pos, ei) @@ -360,6 +364,7 @@ Value do_evaluate(const Position& pos, Value& margin) { } // Interpolate between the middle game and the endgame score + margin = margins[pos.side_to_move()]; Value v = scale_by_game_phase(bonus, phase, sf); return pos.side_to_move() == WHITE ? v : -v; } @@ -650,7 +655,7 @@ namespace { // evaluate_king<>() assigns bonuses and penalties to a king of a given color template - Score evaluate_king(const Position& pos, EvalInfo& ei, Value& margin) { + Score evaluate_king(const Position& pos, EvalInfo& ei, Value margins[]) { const BitCountType Max15 = HasPopCnt ? CNT_POPCNT : CpuIs64Bit ? CNT64_MAX15 : CNT32_MAX15; const Color Them = (Us == WHITE ? BLACK : WHITE); @@ -751,8 +756,7 @@ namespace { // be very big, and so capturing a single attacking piece can therefore // result in a score change far bigger than the value of the captured piece. bonus -= KingDangerTable[Us][attackUnits]; - if (pos.side_to_move() == Us) - margin += mg_value(KingDangerTable[Us][attackUnits]); + margins[Us] += mg_value(KingDangerTable[Us][attackUnits]); } return bonus; } -- 2.39.2