# Is there a standard way of scoring a position for chess programs?

It seems most chess programs score a position basically the same way, give or take a few tenths of a point, for a given position. For example, Stockfish might score a position as .65 while Houdini might score the same position .80. If this is essentially the case, are there general "rules" for scoring a position?

This is certainly not the case. Traditional engines "score" a position by running their evaluation function (which differs from engine to engine) on the best position at the end of their search tree (which also differs from engine to engine, since this position depends on their search algorithm).

Sure there are standard concepts for scoring a position - e.g. which side has more material, which side has doubled pawns, which side has rooks on open files - but ultimately each engine does it differently, and there are positions which one engine can be very optimistic on while another is not. There are even positions where one engine thinks White has an advantage and another engine thinks Black has an advantage. Example from the ongoing TCEC Season 18 superfinal.

• I understand each chess engine incorporates different scoring algorithms. But it seems to me most engines, like I said, are in close agreement on a positional score. In other words, you generally don't see Stockfish score a position 1.0 and Houdini score it 4.5. In fact, when watching a tournament online, I've often see commentary from someone that says, "Stockfish has this as 1 for white and Houdini has this .6 for white". Therefore, however these two engines are scoring a position, they must be sharing a lot of things in common. Jun 28, 2020 at 12:58
• @RandyMinder why wouldn't they be in close agreement? Are you expecting most grandmasters to disagree on who has an advantage in a given position? Eval divergence should be the exception, not the norm. Jun 28, 2020 at 13:41
• There can only be evaluation divergence if most chess engines are scoring a position the same way or close. This means each engine essentially scores double pawns the same way, two rooks on the 7th rank the same way, bishop pair the same way etc. And, by the same way I mean they each assign a similar numeric value to each of these considerations. That was the point of my question. What are these considerations and what numerical values (roughly) are being assigned to each. Jun 28, 2020 at 13:51
• @RandyMinder well of course. Everyone knows doubled pawns are usually bad, rooks on the 7th are usually good, etc, and that's why these things get coded into the static evaluation function. It should be absolutely no surprise engines return roughly the same centipawn eval, since the eval is supposed to be "1 pawn" worth of advantage. I cannot understand what you're asking. Maybe look at Stockfish's eval.cpp and find what you need yourself. github.com/official-stockfish/Stockfish/blob/master/src/… Jun 28, 2020 at 14:03
• Doubled pawns aren't inherently bad. They generally will open a file for a rook and often can improve control of the center and/or speed up development. If engines evaluated that simplistically they'd be very easy to beat. Jun 29, 2020 at 4:40

You're right.

Everything is based off of the assumption that 1 point= 1 pawn. Everything else is relative to that.

If an engine is evaluating a position at +3 that means either it thinks that white can win the material advantage of three pawns or that white can obtain a positional advantage equivalent to three pawns or some combination of the two.

How things are weighted vary from engine to engine but the basic concept is the same.