The present evaluation function of my chess program (Rotor) is really a hack, and I am looking for just this kind of discussion
on how to develop a good evaluation function.
Searching through the archives, I found the following ideas:
- - use symmetries to catch bugs
- divide evaluation features into "static" and "dynamic" features; static features (e.g. material imbalance, pawn structure)
change less oftern, are important, can be determined quite reliably, and can not easily be replaced by deeper search (Don Dailey)
- consider non-linear functions
- battle horizon effects by avoiding “step” functions, try to “smell” big changes in evaluation far in advance
Is it possible to measure how large the noisy part of a particular feature is?
And how do you measure the goodness of an evaluation function in general? By playing many games?
Vasik Rajlich wrote: “The key to having a good evaluation is coming up with some way to test it, piece by piece.
Self-play is not enough, you'll never play enough games to show a 10-point improvement.”