Skip to content

Commit

Permalink
Two more parameters eliminated
Browse files Browse the repository at this point in the history
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
  • Loading branch information
ceebo authored and mcostalba committed Nov 7, 2013
1 parent 53c04c0 commit 52ae0ef
Showing 1 changed file with 7 additions and 10 deletions.
17 changes: 7 additions & 10 deletions src/material.cpp
Expand Up @@ -35,20 +35,19 @@ namespace {
const int NoPawnsSF[4] = { 6, 12, 32 };

// Polynomial material balance parameters
const Value RedundantQueen = Value(320);
const Value RedundantRook = Value(554);
const Value RedundantMajor = Value(160);

// 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] = {
// pair pawn knight bishop rook queen
{ 0 }, // Bishop pair
{ 39, 2 }, // Pawn
{ 35, 271, -4 }, // Knight
{ 0, 105, 4, 0 }, // Bishop
{ -27, -2, 46, 100, 56 }, // Rook
{ 58, 29, 83, 148, -3, -25 } // Queen
{ -27, -2, 46, 100, -141 }, // Rook
{ 58, 29, 83, 148, -163, 0 } // Queen
};

const int QuadraticCoefficientsOppositeColor[][PIECE_TYPE_NB] = {
Expand Down Expand Up @@ -106,11 +105,9 @@ namespace {
int pt1, pt2, pc, v;
int value = 0;

// Redundancy of major pieces, formula based on Kaufman's paper
// "The Evaluation of Material Imbalances in Chess"
if (pieceCount[Us][ROOK] > 0)
value -= RedundantRook * (pieceCount[Us][ROOK] - 1)
+ RedundantQueen * pieceCount[Us][QUEEN];
// Penalty for major piece redundancy
if (pieceCount[Us][ROOK] + pieceCount[Us][QUEEN] > 1)
value -= RedundantMajor;

// Second-degree polynomial material imbalance by Tord Romstad
for (pt1 = NO_PIECE_TYPE; pt1 <= QUEEN; ++pt1)
Expand Down

0 comments on commit 52ae0ef

Please sign in to comment.