Author: Dan Honeycutt
Date: 15:10:57 08/07/04
Go up one level in this thread
On August 07, 2004 at 13:50:46, Stuart Cracraft wrote:
>On August 07, 2004 at 13:47:41, Dan Honeycutt wrote:
>
>>On August 07, 2004 at 13:40:16, Dan Honeycutt wrote:
>>
>>>On August 07, 2004 at 13:00:31, Stuart Cracraft wrote:
>>>
>>>>So I heard a lot about SEE from a lot of people
>>>>and was fortunate enough to receive some good code
>>>>from Alessandro. I implemented and tested it with
>>>>many test cases and in all cases it gave the
>>>>expected return from the exchange ok.
>>>>
>>>>Then with some other help I implemented this in
>>>>the capture search.
>>>>
>>>>This program has some things that make SEE() not
>>>>give a good result, in fact slightly worse (fewer
>>>>nodes in same time) -- no speedup.
>>>>
>>>>1) evaluator is material and pc/sq lookup only
>>>>2) routine to find attackers/defenders (to give to see)
>>>> is not much faster or slower than makemv()
>>>>3) I order all moves partly with MVV/LVA but do not
>>>> discard directly on that unless the alpha/beta/pvs
>>>> says to disard/cutoff.
>>>>
>>>>With these, the program did not speedup with SEE
>>>>and slowed down. The program is PVS with null move.
>>>>
>>>>So that is the story -- I will leave the code in
>>>>for a future day and future need.
>>>>
>>>>If someone with #1 and #2 got a good speedup from SEE,
>>>>let me know. I am doing something wrong in that case.
>>>>Or if you think there is some other way SEE can be used
>>>>advantageously, let me know. Currently I only have it
>>>>in the capture search since that's where I heard it had
>>>>the most effect.
>>>>
>>>>Stuart
>>>
>>>
>>>Stuart:
>>>What captures are you discarding in qsearch? ie
>>>
>>>if (see < 0) discard_capture;
>>>if (see + standpat < alpha) discard_capture;
>>>if (see + standpat + margin < alpha) discard_capture;
>>>
>>>You may want to tinker with this some. For me the third one with a margin of a
>>>pawn or 2 works best.
>>>
>>>Dan H.
>>
>>
>>I should add I also do:
>>
>>if (mvv_lva + standpat + margin >= alpha) keep_capture_and_skip_see;
>>
>>mvv_lva is victim value - attackor value.
>>Dan H.
>
>Dan - thanks for the input. What value of standpat do you use?
>(Assume the see() routine does all its internal standpat
>in its minimax.)
>
>Stuart
Stuart:
My standpat is what you call base - eval() for the current position. I have
something like:
val = eval(); //standpat
if (val >= beta) return beta;
if (val > alpha) alpha = val;
need_to_win = alpha - val - margin;
if (need_to_win < 0) need_to_win = 0;
generate_captures();
while (move = next_capture) {
if (mvv_lva(move) < need_to_win)
if (see(move) < need_to_win) continue; //discard capture
make(move);
val = -quies(-beta, -alpha);
unmake(move);
if (val >= beta) return beta;
if (val > alpha) alpha = val;
}
return alpha;
I actually pass the need_to_win value to generate_captures(). Each move gets a
value, mvv_lva() if good enough, or see() otherwise. I discard all that don't
meet need_to_win as above and then I sort the ones that remain.
Dan H.
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.