mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-24 19:16:49 +08:00
Introduce scale factor in pawn evaluation
The idea is to reduce the score if we have many pawns opposing an enemy pawn so that the draw possibility increases. Just introduced the logic, but no functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
@@ -70,6 +70,13 @@ namespace {
|
||||
S(34,68), S(83,166), S(0, 0), S( 0, 0)
|
||||
};
|
||||
|
||||
// UnpairedPawnsTable[] gives a score according to the number
|
||||
// of panws that do not have an enemy pawn in front of them.
|
||||
const int UnpairedPawnsTable[8] = {
|
||||
SCALE_FACTOR_NORMAL, SCALE_FACTOR_NORMAL, SCALE_FACTOR_NORMAL, SCALE_FACTOR_NORMAL,
|
||||
SCALE_FACTOR_NORMAL, SCALE_FACTOR_NORMAL, SCALE_FACTOR_NORMAL, SCALE_FACTOR_NORMAL
|
||||
};
|
||||
|
||||
// Pawn storm tables for positions with opposite castling
|
||||
const int QStormTable[64] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@@ -187,6 +194,7 @@ Score PawnInfoTable::evaluate_pawns(const Position& pos, Bitboard ourPawns,
|
||||
int bonus;
|
||||
Score value = make_score(0, 0);
|
||||
const Square* ptr = pos.piece_list_begin(Us, PAWN);
|
||||
int unpairedPawnsNum = pos.piece_count(Us, PAWN);
|
||||
|
||||
// Initialize pawn storm scores by giving bonuses for open files
|
||||
for (f = FILE_A; f <= FILE_H; f++)
|
||||
@@ -211,6 +219,10 @@ Score PawnInfoTable::evaluate_pawns(const Position& pos, Bitboard ourPawns,
|
||||
doubled = ourPawns & squares_behind(Us, s);
|
||||
opposed = theirPawns & squares_in_front_of(Us, s);
|
||||
|
||||
// Decrease number of unpaired pawns
|
||||
if (opposed)
|
||||
unpairedPawnsNum--;
|
||||
|
||||
// We calculate kingside and queenside pawn storm
|
||||
// scores for both colors. These are used when evaluating
|
||||
// middle game positions with opposite side castling.
|
||||
@@ -337,6 +349,9 @@ Score PawnInfoTable::evaluate_pawns(const Position& pos, Bitboard ourPawns,
|
||||
value += CandidateBonus[relative_rank(Us, s)];
|
||||
}
|
||||
|
||||
// Calculate a scale factor to be used to evaluate if position is drawish
|
||||
pi->factor[Us] = UnpairedPawnsTable[unpairedPawnsNum];
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user