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.