Erik Madsen on the Value of the Pieces
Friday, May 4, 2018 at 2:58PM
Dennis Monokroussos

[DM: This was a comment to the previous post, and it looks interesting enough to turn into a standalone post. Here goes:]

I can offer my programmer's perspective. The values in my chess engine are:

private const int _defaultPawnMaterialScore = 100;
public const int DefaultKnightMaterialScore = 301;
public const int DefaultBishopMaterialScore = 306;
public const int DefaultRookMaterialScore = 485;
public const int DefaultQueenMaterialScore = 962;

Found by examining every position of a large collection of games between GMs, calculating the material difference* at each position, translating that difference into a 0% to 100% winning chance, comparing it to the actual result of the game, and summing the squared error.

Adjust the material values, find the new error, and repeat. Select new combinations of material values to examine using a randomizing function** that balances examination of values near known best with exploration of wildly different values.

Links with more detail on my Thank You page.

* Actually the tuning algorithm considers positional factors too- such as bishop pair, piece mobility, passed pawns, etc.- it doesn't focus only on adjusting material values.

** I chose to use a randomizing function to select parameters because brute force calculation of every possible parameter combination is computational infeasible- on the order of 10 ^ 150 discrete parameter combinations.

Article originally appeared on The Chess Mind (http://www.thechessmind.net/).
See website for complete article licensing information.