From: Marco Costalba Date: Fri, 13 Nov 2009 16:23:21 +0000 (+0100) Subject: Convert pawns evaluation to Score X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=4c58db0dab8e80cf8e57beef6ed9d3a8e2c56795 Convert pawns evaluation to Score No functional change. Signed-off-by: Marco Costalba --- diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 1e8dae95..95cdaf3b 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -64,8 +64,7 @@ namespace { const Score WeightKingOppSafetyInternal = make_score(259, 0); // Mobility and outposts bonus modified by Joona Kiiski - // - // Visually better to define tables constants + typedef Value V; #define S(mg, eg) make_score(mg, eg) @@ -330,7 +329,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 += apply_weight(ei.pi->value(), WeightPawnStructure); + ei.value += apply_weight(ei.pi->pawns_value(), WeightPawnStructure); // Initialize king attack bitboards and king attack zones for both sides ei.attackedBy[WHITE][KING] = pos.attacks_from(pos.king_square(WHITE)); diff --git a/src/pawns.cpp b/src/pawns.cpp index aefda8d2..58f93713 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -38,64 +38,36 @@ namespace { /// Constants and variables - // Doubled pawn penalty by file, middle game - const Value DoubledPawnMidgamePenalty[8] = { - Value(13), Value(20), Value(23), Value(23), - Value(23), Value(23), Value(20), Value(13) - }; - - // Doubled pawn penalty by file, endgame - const Value DoubledPawnEndgamePenalty[8] = { - Value(43), Value(48), Value(48), Value(48), - Value(48), Value(48), Value(48), Value(43) - }; + #define S(mg, eg) make_score(mg, eg) - // Isolated pawn penalty by file, middle game - const Value IsolatedPawnMidgamePenalty[8] = { - Value(25), Value(36), Value(40), Value(40), - Value(40), Value(40), Value(36), Value(25) + // Doubled pawn penalty by file + const Score DoubledPawnPenalty[8] = { + S(13, 43), S(20, 48), S(23, 48), S(23, 48), + S(23, 48), S(23, 48), S(20, 48), S(13, 43) }; - // Isolated pawn penalty by file, endgame - const Value IsolatedPawnEndgamePenalty[8] = { - Value(30), Value(35), Value(35), Value(35), - Value(35), Value(35), Value(35), Value(30) + // Isolated pawn penalty by file + const Score IsolatedPawnPenalty[8] = { + S(25, 30), S(36, 35), S(40, 35), S(40, 35), + S(40, 35), S(40, 35), S(36, 35), S(25, 30) }; - // Backward pawn penalty by file, middle game - const Value BackwardPawnMidgamePenalty[8] = { - Value(20), Value(29), Value(33), Value(33), - Value(33), Value(33), Value(29), Value(20) + // Backward pawn penalty by file + const Score BackwardPawnPenalty[8] = { + S(20, 28), S(29, 31), S(33, 31), S(33, 31), + S(33, 31), S(33, 31), S(29, 31), S(20, 28) }; - // Backward pawn penalty by file, endgame - const Value BackwardPawnEndgamePenalty[8] = { - Value(28), Value(31), Value(31), Value(31), - Value(31), Value(31), Value(31), Value(28) + // Pawn chain membership bonus by file + const Score ChainBonus[8] = { + S(11,-1), S(13,-1), S(13,-1), S(14,-1), + S(14,-1), S(13,-1), S(13,-1), S(11,-1) }; - // Pawn chain membership bonus by file, middle game - const Value ChainMidgameBonus[8] = { - Value(11), Value(13), Value(13), Value(14), - Value(14), Value(13), Value(13), Value(11) - }; - - // Pawn chain membership bonus by file, endgame - const Value ChainEndgameBonus[8] = { - Value(-1), Value(-1), Value(-1), Value(-1), - Value(-1), Value(-1), Value(-1), Value(-1) - }; - - // Candidate passed pawn bonus by rank, middle game - const Value CandidateMidgameBonus[8] = { - Value( 0), Value( 6), Value(6), Value(14), - Value(34), Value(83), Value(0), Value( 0) - }; - - // Candidate passed pawn bonus by rank, endgame - const Value CandidateEndgameBonus[8] = { - Value( 0), Value( 13), Value(13), Value(29), - Value(68), Value(166), Value( 0), Value( 0) + // Candidate passed pawn bonus by rank + const Score CandidateBonus[8] = { + S( 0, 0), S( 6, 13), S(6,13), S(14,29), + S(34,68), S(83,166), S(0, 0), S( 0, 0) }; // Pawn storm tables for positions with opposite castling @@ -197,11 +169,8 @@ PawnInfo* PawnInfoTable::get_pawn_info(const Position& pos) { pi->pawnAttacks[BLACK] = ((blackPawns >> 7) & ~FileABB) | ((blackPawns >> 9) & ~FileHBB); // Evaluate pawns for both colors - Values whiteValues = evaluate_pawns(pos, whitePawns, blackPawns, pi); - Values blackValues = evaluate_pawns(pos, blackPawns, whitePawns, pi); - - pi->mgValue = int16_t(whiteValues.first - blackValues.first); - pi->egValue = int16_t(whiteValues.second - blackValues.second); + pi->value = evaluate_pawns(pos, whitePawns, blackPawns, pi) + - evaluate_pawns(pos, blackPawns, whitePawns, pi); return pi; } @@ -209,15 +178,14 @@ PawnInfo* PawnInfoTable::get_pawn_info(const Position& pos) { /// PawnInfoTable::evaluate_pawns() evaluates each pawn of the given color template -PawnInfoTable::Values PawnInfoTable::evaluate_pawns(const Position& pos, Bitboard ourPawns, - Bitboard theirPawns, PawnInfo* pi) { +Score PawnInfoTable::evaluate_pawns(const Position& pos, Bitboard ourPawns, + Bitboard theirPawns, PawnInfo* pi) { Square s; File f; Rank r; bool passed, isolated, doubled, chain, backward, candidate; int bonus; - Value mgValue = Value(0); - Value egValue = Value(0); + Score value = make_score(0, 0); const Square* ptr = pos.piece_list_begin(Us, PAWN); // Initialize pawn storm scores by giving bonuses for open files @@ -358,42 +326,27 @@ PawnInfoTable::Values PawnInfoTable::evaluate_pawns(const Position& pos, Bitboar if (isolated) { - mgValue -= IsolatedPawnMidgamePenalty[f]; - egValue -= IsolatedPawnEndgamePenalty[f]; + value -= IsolatedPawnPenalty[f]; if (!(theirPawns & file_bb(f))) - { - mgValue -= IsolatedPawnMidgamePenalty[f] / 2; - egValue -= IsolatedPawnEndgamePenalty[f] / 2; - } + value -= IsolatedPawnPenalty[f] / 2; } if (doubled) - { - mgValue -= DoubledPawnMidgamePenalty[f]; - egValue -= DoubledPawnEndgamePenalty[f]; - } + value -= DoubledPawnPenalty[f]; + if (backward) { - mgValue -= BackwardPawnMidgamePenalty[f]; - egValue -= BackwardPawnEndgamePenalty[f]; + value -= BackwardPawnPenalty[f]; if (!(theirPawns & file_bb(f))) - { - mgValue -= BackwardPawnMidgamePenalty[f] / 2; - egValue -= BackwardPawnEndgamePenalty[f] / 2; - } + value -= BackwardPawnPenalty[f] / 2; } if (chain) - { - mgValue += ChainMidgameBonus[f]; - egValue += ChainEndgameBonus[f]; - } + value += ChainBonus[f]; + if (candidate) - { - mgValue += CandidateMidgameBonus[relative_rank(Us, s)]; - egValue += CandidateEndgameBonus[relative_rank(Us, s)]; - } + value += CandidateBonus[relative_rank(Us, s)]; } - return Values(mgValue, egValue); + return value; } diff --git a/src/pawns.h b/src/pawns.h index 4bd3e214..684697ac 100644 --- a/src/pawns.h +++ b/src/pawns.h @@ -47,7 +47,7 @@ class PawnInfo { public: PawnInfo() { clear(); } - Score value() const; + Score pawns_value() const; Value kingside_storm_value(Color c) const; Value queenside_storm_value(Color c) const; Bitboard pawn_attacks(Color c) const; @@ -64,7 +64,7 @@ private: Key key; Bitboard passedPawns; Bitboard pawnAttacks[2]; - int16_t mgValue, egValue; + Score value; int16_t ksStormValue[2], qsStormValue[2]; uint8_t halfOpenFiles[2]; Square kingSquares[2]; @@ -84,10 +84,8 @@ public: PawnInfo* get_pawn_info(const Position& pos); private: - typedef std::pair Values; - template - Values evaluate_pawns(const Position& pos, Bitboard ourPawns, Bitboard theirPawns, PawnInfo* pi); + Score evaluate_pawns(const Position& pos, Bitboard ourPawns, Bitboard theirPawns, PawnInfo* pi); unsigned size; PawnInfo* entries; @@ -98,8 +96,8 @@ private: //// Inline functions //// -inline Score PawnInfo::value() const { - return make_score(mgValue, egValue); +inline Score PawnInfo::pawns_value() const { + return value; } inline Bitboard PawnInfo::passed_pawns() const {