Author: Steve Maughan
Date: 04:16:43 07/12/01
Go up one level in this thread
Leen, Do you sort the tables att[] amd def[]? I ask since I cannot see a loop in the SEE routine. If there is no ordering it is possible that the scores returned are incorrect e.g. it may be profitable to take with a Bishop but not a Queen since the piece is defended by a Rook. Am I missing something? Regards, Steve Maughan >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.01 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.