From 4626ec2890b140829e9971658ca948005b945fd4 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 7 Nov 2009 14:05:55 +0100 Subject: [PATCH 1/1] Convert MaterialInfo and PawnInfo to use Score No functional change. Signed-off-by: Marco Costalba --- src/evaluate.cpp | 17 ++++++++++------- src/material.h | 6 +++--- src/pawns.h | 11 +++-------- src/position.cpp | 2 +- 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 0b4ffd5d..e84cf44e 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -320,6 +320,7 @@ namespace { void evaluate_trapped_bishop_a7h7(const Position& pos, Square s, Color us, EvalInfo& ei); void evaluate_trapped_bishop_a1h1(const Position& pos, Square s, Color us, EvalInfo& ei); inline Value apply_weight(Value v, int w); + inline Score apply_weight(Score v, int wmg, int weg); Value scale_by_game_phase(const Score& v, Phase ph, const ScaleFactor sf[]); int weight_option(const std::string& opt, int weight); void init_safety(); @@ -356,7 +357,7 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) { // Probe the material hash table ei.mi = MaterialTable[threadID]->get_material_info(pos); - ei.value += Score(ei.mi->material_value(), ei.mi->material_value()); + ei.value += ei.mi->material_value(); // If we have a specialized evaluation function for the current material // configuration, call it and return @@ -370,8 +371,7 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) { // Probe the pawn hash table ei.pi = PawnTable[threadID]->get_pawn_info(pos); - ei.value += Score(apply_weight(ei.pi->mg_value(), WeightPawnStructureMidgame), - apply_weight(ei.pi->eg_value(), WeightPawnStructureEndgame)); + ei.value += apply_weight(ei.pi->value(), WeightPawnStructureMidgame, WeightPawnStructureEndgame); // Initialize king attack bitboards and king attack zones for both sides ei.attackedBy[WHITE][KING] = pos.attacks_from(pos.king_square(WHITE)); @@ -436,8 +436,7 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) { } // Mobility - ei.value += Score(apply_weight(ei.mgMobility, WeightMobilityMidgame), - apply_weight(ei.egMobility, WeightMobilityEndgame)); + ei.value += apply_weight(Score(ei.mgMobility, ei.egMobility), WeightMobilityMidgame, WeightMobilityEndgame); // If we don't already have an unusual scale factor, check for opposite // colored bishop endgames, and use a lower scale for those @@ -789,7 +788,7 @@ namespace { if (relative_rank(Us, s) <= RANK_4) { shelter = ei.pi->get_king_shelter(pos, Us, s); - ei.value += Score(Sign[Us] * Value(shelter), 0); + ei.value += Sign[Us] * Score(shelter, 0); } // King safety. This is quite complicated, and is almost certainly far @@ -938,7 +937,7 @@ namespace { // change far bigger than the value of the captured piece. Value v = apply_weight(SafetyTable[attackUnits], WeightKingSafety[Us]); - ei.value -= Score(Sign[Us] * v, 0); + ei.value -= Sign[Us] * Score(v, 0); if (Us == pos.side_to_move()) ei.futilityMargin += v; @@ -1240,6 +1239,10 @@ namespace { return (v*w) / 0x100; } + inline Score apply_weight(Score v, int wmg, int weg) { + return Score(v.mg()*wmg, v.eg()*weg) / 0x100; + } + // scale_by_game_phase() interpolates between a middle game and an endgame // score, based on game phase. It also scales the return value by a diff --git a/src/material.h b/src/material.h index 8f9f3751..0c582968 100644 --- a/src/material.h +++ b/src/material.h @@ -51,7 +51,7 @@ class MaterialInfo { public: MaterialInfo() : key(0) { clear(); } - Value material_value() const; + Score material_value() const; ScaleFactor scale_factor(const Position& pos, Color c) const; int space_weight() const; bool specialized_eval_exists() const; @@ -95,9 +95,9 @@ private: /// MaterialInfo::material_value simply returns the material balance /// evaluation that is independent from game phase. -inline Value MaterialInfo::material_value() const { +inline Score MaterialInfo::material_value() const { - return Value(value); + return Score(value, value); } diff --git a/src/pawns.h b/src/pawns.h index afb456c9..557580e1 100644 --- a/src/pawns.h +++ b/src/pawns.h @@ -47,8 +47,7 @@ class PawnInfo { public: PawnInfo() { clear(); } - Value mg_value() const; - Value eg_value() const; + Score value() const; Value kingside_storm_value(Color c) const; Value queenside_storm_value(Color c) const; Bitboard pawn_attacks(Color c) const; @@ -99,12 +98,8 @@ private: //// Inline functions //// -inline Value PawnInfo::mg_value() const { - return Value(mgValue); -} - -inline Value PawnInfo::eg_value() const { - return Value(egValue); +inline Score PawnInfo::value() const { + return Score(mgValue, egValue); } inline Bitboard PawnInfo::passed_pawns() const { diff --git a/src/position.cpp b/src/position.cpp index c43cde79..b6c0a522 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -721,7 +721,7 @@ void Position::do_move(Move m, StateInfo& newSt, Bitboard dcCandidates) { Key key, pawnKey, materialKey; int castleRights, rule50, pliesFromNull; Square epSquare; - Value mgValue, egValue; + Value value; Value npMaterial[2]; }; -- 2.39.2