Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: SEE Result

Author: Tony Werten

Date: 11:50:40 08/12/04

Go up one level in this thread


On August 12, 2004 at 14:08:18, Stuart Cracraft wrote:

>On August 12, 2004 at 14:02:27, Tony Werten wrote:
>
>>On August 12, 2004 at 13:24:37, Stuart Cracraft wrote:
>>
>>>On August 12, 2004 at 10:42:20, Tony Werten wrote:
>>>
>>>>On August 12, 2004 at 10:18:45, Stuart Cracraft wrote:
>>>>
>>>>>Here is the result of the 30 second per position test on 300 positions
>>>>>using nothing, see>=0 to search a capture, see having to bring the score
>>>>>within alpha and a margin (futility/delta), and with both.
>>>>
>>>>I'm not sure how it is usually done, but I don't think it is safe to prune the
>>>>see score against alpha but rather the captured piece value. Else it makes your
>>>>qsearch even more blind.
>>>>
>>>Hi Tony,
>>>
>>>What I do is this:
>>>
>>>quiesce
>>>:
>>>  baseval = eval(bd);
>>>:
>>>  while next capture move available; do
>>>#define MARGIN 200     // 200 millipawns, 1000 = 1 pawn in my program
>>>    delta = MAX(alpha-MARGIN-baseval,0);
>>>    seeok=see(bd,qml[mvi].to);
>>>    if (seeok < delta || seeok < 0) { skip this capture move }
>>>    else {
>>>      make capture move
>>>      search capture move
>>>      unmake capture move
>>>      look for cutoff, etc.
>>>    }
>>>  endwhile
>>>endquiesce
>>
>>Funny, we have quite a different way of writing code. But what I mean is a safer
>>way of the pruning.
>>
>>quiesce
>>:
>>  baseval = eval(bd);
>>:
>>  while next capture move available; do
>>#define MARGIN 200     // 200 millipawns, 1000 = 1 pawn in my program
>>
>>    //delta = MAX(alpha-MARGIN-baseval,0); no need for delta variable
>>    seeok=see(bd,qml[mvi].to);
>>    if (baseeval+pieceval[qml[mvi].captured_piece]<alpha || seeok < 0) { skip
>>this capture move }
>>    else {
>>      make capture move
>>      search capture move
>>      unmake capture move
>>      look for cutoff, etc.
>>    }
>>  endwhile
>>endquiesce
>>
>>
>>>
>>>The part about the delta is the same as what GNU 5 presently does.
>>>The other part of seeok < 0 is based on Bob
>>>I am thinking that instead of using MARGIN of 200 I should just use
>>>maxposnscore[sidetomove] since this is a dynamic maximum positional
>>>score calculated for the side on move.
>>
>>That would be the safe way.
>>
>>>
>>>The above, separately and together, have been tested and do not provide
>>>any huge improvement over using neither in a fixed time search. However,
>>>in long fixed depth searches a 50% nodes reduction and 50% time reduction
>>>has been seen.
>>
>>I believe it can safe a lot of nodes, I would be more worried however about the
>>loss of precision. ie a rook exchange, wich would score -500, when alpha is 0.
>>Your code says: prune it, the opponent recaptures and we are still below alpha.
>>My code would say: if the opponent can't recapture we are way above alpha, so
>>give it a try.
>>
>>Tony
>>
>>>
>>>Stuart
>
>Others have said that this:
>
>baseeval+pieceval[qml[mvi].captured_piece]<alpha
>
>is unsafe.
>
>You have to include a full see() in that exchange, like I do, for
>it to be safe.
>
>If you don't, you are unsafe. The entire line of captures including
>standpat needs to be used for the futility pruning / delta pruning.
>A single piecevalue is no good, nor a piecevalue plus a recapture, etc.
>That is limited non-see and no good.

I don't get it. This is much less restrictive, too optimistic, so it's always
safer. Just less effective ( in node count)

What it is saying is that if I capture your rook and you don't recapture and I
still don't make it to alpha then skip it. (If it does, then try it although
most likely it still won't make it to alpha but let the search decide that)

With SEE it says: If I take the rook and you recapture and that doesn't make it
to alpha then skip. wich is much less safe.

Tony

>
>Stuart



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.