Two more parameters eliminated

RedundantRook and RedundantQueen replaced by simple
variable RedundantMajor. Also the SameColor coefficient
for Queen<->Queen has been set by definition to 0.

The remaining 5 parameters:

LinearCoefficients[ROOK]
LinearCoefficients[QUEEN]
QuadraticCoefficientsSameColor[ROOK][ROOK]
QuadraticCoefficientsSameColor[QUEEN][ROOK]
RedundantMajor

are sufficient to equate the material imbalances for the
5 common material configurations of R, RR, Q, QR and QRR
to any desired values simultaneously.

With the chosen parameters there should be no functional
change unless one side has more than 2 rooks or more
than 1 queen. For example bench from the start position
using the commands:

./stockfish
go depth 16

produces identical output except for one extra node
in the last iteration.

bench: 8198094
This commit is contained in:
Chris Caino
2013-11-04 17:03:02 +00:00
committed by Marco Costalba
parent 53c04c0429
commit 52ae0efccf

View File

@@ -35,11 +35,10 @@ namespace {
const int NoPawnsSF[4] = { 6, 12, 32 }; const int NoPawnsSF[4] = { 6, 12, 32 };
// Polynomial material balance parameters // Polynomial material balance parameters
const Value RedundantQueen = Value(320); const Value RedundantMajor = Value(160);
const Value RedundantRook = Value(554);
// pair pawn knight bishop rook queen // pair pawn knight bishop rook queen
const int LinearCoefficients[6] = { 1852, -162, -1122, -183, 105, 26 }; const int LinearCoefficients[6] = { 1852, -162, -1122, -183, 302, 1 };
const int QuadraticCoefficientsSameColor[][PIECE_TYPE_NB] = { const int QuadraticCoefficientsSameColor[][PIECE_TYPE_NB] = {
// pair pawn knight bishop rook queen // pair pawn knight bishop rook queen
@@ -47,8 +46,8 @@ namespace {
{ 39, 2 }, // Pawn { 39, 2 }, // Pawn
{ 35, 271, -4 }, // Knight { 35, 271, -4 }, // Knight
{ 0, 105, 4, 0 }, // Bishop { 0, 105, 4, 0 }, // Bishop
{ -27, -2, 46, 100, 56 }, // Rook { -27, -2, 46, 100, -141 }, // Rook
{ 58, 29, 83, 148, -3, -25 } // Queen { 58, 29, 83, 148, -163, 0 } // Queen
}; };
const int QuadraticCoefficientsOppositeColor[][PIECE_TYPE_NB] = { const int QuadraticCoefficientsOppositeColor[][PIECE_TYPE_NB] = {
@@ -106,11 +105,9 @@ namespace {
int pt1, pt2, pc, v; int pt1, pt2, pc, v;
int value = 0; int value = 0;
// Redundancy of major pieces, formula based on Kaufman's paper // Penalty for major piece redundancy
// "The Evaluation of Material Imbalances in Chess" if (pieceCount[Us][ROOK] + pieceCount[Us][QUEEN] > 1)
if (pieceCount[Us][ROOK] > 0) value -= RedundantMajor;
value -= RedundantRook * (pieceCount[Us][ROOK] - 1)
+ RedundantQueen * pieceCount[Us][QUEEN];
// Second-degree polynomial material imbalance by Tord Romstad // Second-degree polynomial material imbalance by Tord Romstad
for (pt1 = NO_PIECE_TYPE; pt1 <= QUEEN; ++pt1) for (pt1 = NO_PIECE_TYPE; pt1 <= QUEEN; ++pt1)