I am programming a (relatively basic) chess engine: while it is a lot of fun, it is also an interesting way to improve my chess skills! In order to evaluate a position, I need to extract features from the board. At the moment, I am using basic features such as the total value of the pieces, some features associated to piece mobility, open rank/files, whether the king is castled, some features related to the position of the pieces (eg. occupying the center is good), etc...

I was wondering whether there were resources describing more comprehensive list of features that would likely to be useful. This line of approaches has indeed been done a thousand of times (before the advent of neural-net / convolutional / AlphaZero types of methods) but I have not found many articles describing the features used.

  • 1
    Someone created an engine that did nothing but try to play the move that allowed it the most mobility for its pieces (but did a depth search for long term mobility as well). It reached a rating above average and almost club level.
    – pkr
    Commented Feb 11, 2021 at 21:37
  • Interesting! Do you have a reference for this fun experiment? Commented Feb 13, 2021 at 2:34

1 Answer 1


The best way is read source code yourself. https://github.com/official-stockfish/Stockfish/blob/master/src/evaluate.cpp has the commented state-of-the-art rules defined in Stockfish.

  • Thank you, that is exactly what I was looking for. I am also surprised that Stockfish can reach such a level with such basic features: impressive. Commented Feb 10, 2021 at 2:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.