Computer Chess Club Archives




Subject: Static Exchange Eval (SEE)

Author: Leen Ammeraal

Date: 04:44:50 07/10/01

There was a question about Static Exchange Evaluation
in CCC a short while ago, with reactions from
Bob Hyatt and Bruce Moreland. Strangely enough,
these postings, along with one from myself, seem
to have disappeared, so I send my contribution
once again below.

Here is my function for Static Exchange Evaluation.
It is based on the value cur of the current piece
on the board that is first to be captured, and
two tables:

att[nAtt-1], ..., att[0]  values of attackers
def[nDef-1], ..., def[0]  values of defenders

Note the order: att[nAtt-1] is the first attack, etc.
Let's rewrite Hyatt's example RxR RxR QxR BxQ
as follows, to distinguish between the three rooks

R1xR0 R2xR1 QxR2 BxQ

Then we have:
cur = R0, nAtt = nDef = 2,
att[1] = R1, att[0] = Q
def[1] = R2, def[0] = B
This function returns the value 0 in this case:

// Static Exchange Evaluation:
int gain(int cur, int *att, int nAtt, int *def, int nDef)
{  int retval = 0;
   if (nAtt)
   {  int profit = cur - gain(att[nAtt-1], def, nDef, att, nAtt-1);
      if (profit > 0)
         retval = profit;
   return retval; // Always >= 0

Explanation: the profit of capturing a piece is equal
to the value of that piece minus the profit of the
opponent after this capture, except that a profit is
set to zero when this computation gave a negative result.
So far, I did not succeed in replacing this function
with a faster, nonrecursive one. It would be nice if
anyone of this forum did and showed an equivalent
but faster version.

Leen Ammeraal

This page took 0.02 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.