Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: SEE Function

Author: Robert Hyatt

Date: 06:08:57 04/04/00

Go up one level in this thread


On April 03, 2000 at 19:53:41, KarinsDad wrote:

>On April 03, 2000 at 16:49:22, Dan Newman wrote:
>
>>On April 03, 2000 at 10:56:08, KarinsDad wrote:
>>
>>>On April 03, 2000 at 05:00:20, Jan Pernicka wrote:
>>>
>>>>On March 31, 2000 at 14:17:12, KarinsDad wrote:
>>>>
>>>>>
>>>>>Could someone please explain how they implement their SEE function, when they
>>>>>use it, and what they use it for?
>>>>>
>>>>>Or possibly a good web site that explains it.
>>>>>
>>>>>Any help is appreciated.
>>>>
>>>>  Excuse me, could someone explain to me in several sentences what is
>>>>  SEE function good for?  Thanks
>>>>     Jan
>>>
>>>
>>>Good luck.
>>>
>>>That is what my original post asks for and I did not receive any good answers.
>>>
>>>KarinsDad :)
>>
>>In Shrike I use the SEE everywhere to order the captures before I try them.
>>I don't use the SEE to do actual evaluation but do use it to prune losing
>>captures in the quiescence search and to delay trying losing captures in
>>the full width search.  Currently I put losing captures at the tail end.
>>
>>Implemention.  In my SEE I do some initial stuff to record the results of
>>the first capture which is fixed by the move in question.  Then I create
>>a bunch of bitboards containing the remaining pieces that bear on the square
>>in question.  Then I cycle through them "capturing" with less valuable pieces
>>first, more valuable later, alternating between sides.  As I'm doing this I
>>knock out pieces that bear on the square but are blocked.  I also determine
>>if pieces bearing on the square become unblocked and put them back in their
>>respective bitboards so that they will be found on a later pass.  (The
>>machinery is fairly complicated and does a bit more than described above.)
>>All the while an array is being filled out with the current balance.  After
>>all the attacking pieces of one side or the other are exhuasted and captured,
>>I quit making passes.  At that point I "mini-max" the values in that array
>>to determine where one side or the other can simply stop and retain the best
>>advantage.  The score at this point is the score returned by the SEE.
>>
>>-Dan.
>
>Thanks Dan. How do you min-max?
>
>For example, a knight is on the square and protected by a rook. Two rooks in a
>battery attack it. Rxn rxR Rxr wins a knight. However, after Rxn, the attacking
>side is winning a knight. After rxR, the defending side is winning a rook for a
>knight. After Rxr, the attacking side again is winning a knight.
>
>Since it flip flops, how do you know when to stop? Is it when your capture no
>longer wins for you (regardless of what your opponent's capture just won for
>him)?
>
>KarinsDad :)


The simple way is to do this:  produce a stack of scores, showing the material
score after each capture.  for example, I want to play e8=Q, and see the
following possible outcome according to SEE:

e8=Q  800  (add queen, lose pawn)
Rxe8 -100  (remove queen, -900)
Rxe8 +400  (remove rook, +500)
Bxe8 -100  (remove the rook, -500)
Nxe8 +200  (remove bishop, +300)

start at the end.  White asks the question "do I stand pat at -100, or do I
take the bishop and take +200.  No brainer, we capture and back up +200 to the
previous level.  At that point, black asks "do I stand pat at +400 (remember
this is black, so +400 is bad for black and good for white) or do I play Bxe8
and drop the score to +200.  Again, no brainer, and we back up the 200.  White
now asks "do I stand pat at -100, or capture and bring score to +200".  Answer
is capture.  And finally black asks "do I stand pat at +800 or capture and drop
the score to +200?"  The final score is +200.

The idea is that after enumerating all captures, either side can choose to
stop rather than capturing further if it worsens the score...



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.