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.