factor[BLACK] = sf;
}
- // If we don't already have an unusual scale factor, use pawn
- // evaluation ones.
- if (factor[WHITE] == SCALE_FACTOR_NORMAL)
- factor[WHITE] = ei.pi->scale_factor(WHITE);
- if (factor[BLACK] == SCALE_FACTOR_NORMAL)
- factor[BLACK] = ei.pi->scale_factor(BLACK);
-
// Interpolate between the middle game and the endgame score
Color stm = pos.side_to_move();
{
if ( pos.non_pawn_material(c) == pos.non_pawn_material(opposite_color(c))
|| pos.non_pawn_material(c) < RookValueMidgame)
- mi->factor[c] = SCALE_FACTOR_ZERO;
+ mi->factor[c] = 0;
else
{
switch (pos.piece_count(c, BISHOP)) {
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[16] = { 32, 48, 64, 80, 96, 112, 128, 128, 128 };
-
- // PawnsQtyTable[] gives a score according to the number of panws
- const int PawnsQtyTable[16] = { 16, 16, 16, 16, 16, 16, 16, 16, 16 };
-
// Pawn storm tables for positions with opposite castling
const int QStormTable[64] = {
0, 0, 0, 0, 0, 0, 0, 0,
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++)
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.
value += CandidateBonus[relative_rank(Us, s)];
}
- // Calculate a scale factor to be used to evaluate if position is drawish
- pi->factor[Us] = UnpairedPawnsTable[unpairedPawnsNum] * PawnsQtyTable[pos.piece_count(Us, PAWN)] / 16;
-
return value;
}
////
#include "bitboard.h"
-#include "scale.h"
#include "value.h"
////
Value queenside_storm_value(Color c) const;
Bitboard pawn_attacks(Color c) const;
Bitboard passed_pawns() const;
- ScaleFactor scale_factor(Color c) const;
int file_is_half_open(Color c, File f) const;
int has_open_file_to_left(Color c, File f) const;
int has_open_file_to_right(Color c, File f) const;
Square kingSquares[2];
Score value;
int16_t ksStormValue[2], qsStormValue[2];
- uint8_t halfOpenFiles[2], kingShelters[2], factor[2];
+ uint8_t halfOpenFiles[2];
+ uint8_t kingShelters[2];
};
/// The PawnInfoTable class represents a pawn hash table. It is basically
return Value(qsStormValue[c]);
}
-inline ScaleFactor PawnInfo::scale_factor(Color c) const {
- return ScaleFactor(factor[c]);
-}
-
inline int PawnInfo::file_is_half_open(Color c, File f) const {
return (halfOpenFiles[c] & (1 << int(f)));
}
////
enum ScaleFactor {
- SCALE_FACTOR_ZERO = 0,
+ SCALE_FACTOR_ZERO = 0,
SCALE_FACTOR_NORMAL = 64,
- SCALE_FACTOR_MAX = 128,
- SCALE_FACTOR_NONE = 255
+ SCALE_FACTOR_MAX = 128,
+ SCALE_FACTOR_NONE = 255
};