Stockfish, a UCI chess playing engine derived from Glaurung 2.1
Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad
- Copyright (C) 2015-2016 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad
+ Copyright (C) 2015-2017 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad
Stockfish is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
// Polynomial material imbalance parameters
- // pair pawn knight bishop rook queen
- const int Linear[6] = { 1667, -168, -1027, -166, 238, -138 };
-
const int QuadraticOurs[][PIECE_TYPE_NB] = {
// OUR PIECES
// pair pawn knight bishop rook queen
- { 0 }, // Bishop pair
- { 40, 2 }, // Pawn
+ {1667 }, // Bishop pair
+ { 40, 0 }, // Pawn
{ 32, 255, -3 }, // Knight OUR PIECES
{ 0, 104, 4, 0 }, // Bishop
{ -26, -2, 47, 105, -149 }, // Rook
{ 101, 100, -37, 141, 268, 0 } // Queen
};
+ // PawnsSet[count] contains a bonus/malus indexed by number of pawns
+ const int PawnsSet[FILE_NB + 1] = {
+ 24, -32, 107, -51, 117, -9, -126, -21, 31
+ };
+
// 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) };
const Color Them = (Us == WHITE ? BLACK : WHITE);
- int bonus = 0;
+ int bonus = PawnsSet[pieceCount[Us][PAWN]];
// Second-degree polynomial material imbalance by Tord Romstad
for (int pt1 = NO_PIECE_TYPE; pt1 <= QUEEN; ++pt1)
if (!pieceCount[Us][pt1])
continue;
- int v = Linear[pt1];
+ int v = 0;
for (int pt2 = NO_PIECE_TYPE; pt2 <= pt1; ++pt2)
v += QuadraticOurs[pt1][pt2] * pieceCount[Us][pt2]