Author: Leen Ammeraal
Date: 09:41:57 07/11/01
Go up one level in this thread
On July 11, 2001 at 09:20:15, JW de Kort wrote: >On July 10, 2001 at 07:44:50, Leen Ammeraal wrote: > >>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 >>involved: >> >>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 >>http://home.wxs.nl/~ammeraal/ > >Dear mr Ammeraal, > >Could you plese give some explaination regarding this sources. e.g how do you >fill the att[] en def[] arrays? > >Bedankt! > >Jan Willem de Kort (See also my above explanation.) In the case of RxR RxR QxR BxQ with piece values R = 500, Q = 900, B = 300, you use cur = 500, nAtt = nDef = 2, att[1] = 500, att[0] = 900 def[1] = 500, def[0] = 300 and you call the function 'gain' as follows: value = gain(cur, att, nAtt, def, nDef); This sets values = 0, as it should, since this swapoff is not profitable. But it also works in all other cases, as far as I am aware. Veel succes, Leen
This page took 0 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.