Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Correct values if all moves are pruned?

Author: Scott Gasch

Date: 15:43:30 01/05/01

Go up one level in this thread


On January 05, 2001 at 15:21:18, Severi Salminen wrote:

>Hi!
>
>1.If I prune a move in normal search: if(material+gain(move)+FMARGIN<=alpha)
>what should I assign to the best score so far? Material+gain, material+FMARGIN,
>material+gain+FMARGIN or material only? Now I'm using material+FMARGIN but it
>can't be right. Material+gain sounds right because that would be returned from
>qsearch if stand pat fails high?

If you are extended futility pruning only some moves in Search (and allowing
some through) your best score so far should be set by the best move that gets
through as normal.  If only one move makes it through its the best move.

If you are pruning ALL moves you think there are no winning moves at this
position.  In this case you should fail low and return alpha.  Note DO NOT just
return best score (which is probably set to -INFINITY)... I learned that from
experience -- it caused the nullmove mate threat extension to go nuts and
exploded the tree.

So now I always allow at least the first move through the extended futility
checkpoint... so I am certain that the best score gets set before i prune the
branches.  This may or may not be more accurate than simply returning alpha;
when you fail low the Search one level above you is going to fail high.  If you
simply return alpha it will fail high "hard" with a value of beta.  If you allow
one move through and prune the rest, the one move through should still set the
best score to something <= alpha... but then you can return this value.
Therefore when the node above you fails high and sticks a lower bound in the
hashtable it will be a more accurate bound.  Of course by allowing that one move
through you are searching more nodes than you would if you had realized all
moves were pruned and returned alpha.  Try it out and see I guess.

>2.I'm using now SEE and I wonder what is the "correct" value to return from
>qsearch if I prune all captures: if(eval()+seescore(move)+MARGIN<=alpha)? Now I
>just return alpha. If all moves result a score<=alpha should I return
>eval+seescore or something else.

In a normal qsearch you compute a static eval score... test if its >= beta and
you can stand pat... If not set best score to the static eval with an assumption
like nullmove -- that there will be some move at this point that can improve (or
at least maintain) the score... some move should be better than no move at
all...

When you are going to prune away the rest of (or all) the captures (because of
futility condition or because the SEE says they are losing) return the best
score thus far.

If all moves were pruned this best score is the static eval of this node you
computed at the top.  If any captures got through, this best score is the score
of the best move considered at this node OR the score of the static eval if none
ever beat it.

>I ask this because PVS or aspiration window search doesn't seem to like "wrong
>values"

I don't understand this.

Good luck,
Scott



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.