5

I’m writing my own chess engine where I’ll be implementing something called a tapered eval which is one that evaluates the position with an endgame specific evaluation function and a middle game specific evaluation function. Then it will interpolate between these two depending on the amount of material on the board.

I don’t know if this is the right forum, but I thought since it is not related to programming itself and more related to actually playing the game, I would ask chess players themselves.

My question is then: If the value of a pawn is set to ~100 (centi-pawns, or hundredths of a pawn) in the middle game and opening, what should it be in the endgame? I would think that it needs to be higher because they are more important in the endgame, and thus being one pawn up should create a bigger imbalance. I know that this value changes dynamically depending on promotion ability, but what would you think a general value should be?

Any input is much appreciated!

Glorfindel
  • 24,745
  • 6
  • 67
  • 114

1 Answers1

3

I've tried programming with the relative values of pieces changing with relation to material. I've found that a maximum value of 110 centipawns*, without bonuses, was a fair value. (FYI, the knight's value decreases as material is reduced, so this dynamic adjustment of value decreases for the knight.)

A square value, where the pawn gets a bonus the farther advanced pawn is worth more, is useful for both promotion and attacking values. (The promotion square has a value of 800, so there's huge gain to get to the eighth rank.) The gives the engine an incentive to aim for a promotion and encourages aggressive pawn moves in front of the opponent's king. However, another function is written to prevent a general weakening in front of our king.

Good luck in programming your engine.

-To fine tune the program, I set the normal value of a pawn to 2000. The highest value was a little over 2200, so I adjusted to the normal 100 value used in most programs.

Mike Jones
  • 5,151
  • 14
  • 19