constexpr int QuadraticOurs[][PIECE_TYPE_NB] = {
// OUR PIECES
// pair pawn knight bishop rook queen
- {1667 }, // Bishop pair
+ {1443 }, // Bishop pair
{ 40, 0 }, // Pawn
- { 32, 255, -3 }, // Knight OUR PIECES
+ { 32, 255, -67 }, // Knight OUR PIECES
{ 0, 104, 4, 0 }, // Bishop
- { -26, -2, 47, 105, -149 }, // Rook
+ { -26, -2, 47, 105, -221 }, // Rook
{-189, 24, 117, 133, -134, -10 } // Queen
};
{ 97, 100, -42, 137, 268, 0 } // Queen
};
+ constexpr int PawnCount[] = { 0, 304, 144, -320, -560, -704, -672, -464, -320 };
+
// Endgame evaluation and scaling functions are accessed directly and not through
// the function maps because they correspond to more than one material hash key.
Endgame<KXK> EvaluateKXK[] = { Endgame<KXK>(WHITE), Endgame<KXK>(BLACK) };
constexpr Color Them = (Us == WHITE ? BLACK : WHITE);
- int bonus = 0;
+ int bonus = PawnCount[pieceCount[Us][PAWN]];
// Second-degree polynomial material imbalance, by Tord Romstad
for (int pt1 = NO_PIECE_TYPE; pt1 <= QUEEN; ++pt1)
// OK, we didn't find any special evaluation function for the current material
// configuration. Is there a suitable specialized scaling function?
- EndgameBase<ScaleFactor>* sf;
+ const EndgameBase<ScaleFactor>* sf;
if ((sf = pos.this_thread()->endgames.probe<ScaleFactor>(key)) != nullptr)
{