Erik Madsen on the Value of the Pieces
[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.
Reader Comments (3)
Thanks Dennis. I figured it was worth explaining the empirical approach. That is, use material values to predict the outcome of a game. Settle on the material values that produce the most accurate prediction (or least error, depending how you look at it).
Why is only the constant for pawn score private?
One less variable to tune. Material values are only meaningful relative to one another. So there's no reason to allow the pawn value to vary. Set it to 100 and let all other values be adjusted by the tuning algorithm.
Even though my chess engine is not the strongest (about 2500 ELO against other engines, likely stronger against humans), it, like most chess engines, is complex. My position evaluation routine uses 85 parameters- so piece material values are only a small fraction of what's considered.
All of these parameters are adjusted by the tuning algorithm, except pawn material value. Which in effect, sets the scale of position scores to something familiar to humans. 100 is used instead of 1 (in the typical 1, 3, 3, 5, 9 material values) to allow for a more granular scores without introducing the slowness inherent in floating point math. PCs process integer math much faster.