Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Null move question

Author: Omid David Tabibi

Date: 06:04:12 08/02/03

Go up one level in this thread


On August 02, 2003 at 08:25:43, Tim Foden wrote:

>On August 02, 2003 at 03:44:06, Tony Werten wrote:
>
>>On August 01, 2003 at 22:45:11, Robert Hyatt wrote:
>>
>>>On August 01, 2003 at 05:09:59, Tony Werten wrote:
>>>
>>>>On July 31, 2003 at 18:15:47, Robert Hyatt wrote:
>>>>
>>>>>On July 31, 2003 at 14:23:34, Tony Werten wrote:
>>>>>
>>>>>>On July 30, 2003 at 17:18:12, Rick Bischoff wrote:
>>>>>>
>>>>>>>>>
>>>>>>>>>a. at depth 3- hash table is empty for this position.  alpha = -INF, beta = +INF
>>>>>>>>>a. all requirements for null move are met
>>>>>>>>>a. makes null move:  int e = -alphabeta(depth - 3, -beta, -beta +1);
>>>>>>>>>
>>>>>>>>>b. now we are at depth 0, alpha = -INF, beta = -INF + 1
>>>>>>>>>b. we call quies(alpha, beta)
>>>>>>>>>
>>>>>>>>>c.  e = static eval is, oh say, 1.
>>>>>>>>>c.  e >= beta, return beta
>>>>>>>>>
>>>>>>>>>b. store this position in the hash table as -INF + 1, exact, depth = 0, return
>>>>>>>>>-INF + 1
>>>>>>>>
>>>>>>>>This is _way_ wrong.  How can it be "exact"???  It is impossible for the
>>>>>>>>search to return valid scores outside alpha/beta window as defined at the
>>>>>>>>root.  If you are returning an "edge" then it must be an upper or lower
>>>>>>>>edge, not an exact score.
>>>>>>>
>>>>>>>Yes, I know it is wrong-- which is why I was asking the question to begin with
>>>>>>>:-) What I do know is store anything quies returns as exact-- but you are
>>>>>>>telling me I can't do that, right?  (Forgive my ignorance!)
>>>>>>
>>>>>>You are correct (despite what the others say), but only if you use the failsoft
>>>>>>version of alphabeta.
>>>>>>
>>>>>>Tony
>>>>>
>>>>>I don't see how he can be correct even with failsoft.  If you get a score
>>>>>outside alpha/beta it is _never_ an exact score, it will only be a bound.
>>>>
>>>>No it isn't. If you evaluate and take a beta cutoff, the evaluationscore is
>>>>still exact, has nothing to do with bounds.
>>>
>>>Never heard of "lazy evaluation?"
>>
>>AFAIK lazy eval isn't part of alphabeta.
>
>Well, I guess it depends how you do it.  In GLC, the "score-so-far" is compared
>against alpha and beta, and if it thinks the score it too far out, it returns it
>stright away.
>
>e.g. something like this simplified code:
>
>int Evaluate( int alpha, int beta )
>{
>   int eval = (get your mat val here);
>
>   // see if we can do a lazy evaluation
>   const int VAL = (some lazy eval limit -- e.g. say 2 pawns);
>   if( eval + VAL <= alpha || eval - VAL >= beta )
>      return eval;
>
>   // do full evaluation here;
>   // ...
>
>   return eval;
>}
>
>AFAIK Crafty is the same (let's face it... I got the idea by looking at Crafty's
>source :).  In this case the evaluation cannot be regarded as an exact score.
>

To summarize, a score can be considered "exact" only if it has been achieved
independent of alpha and beta bounds. This is the case only if we are at a leaf
node with full evaluation, or other node with alpha < value < beta.



>Cheers, Tim.
>
>>
>>Tony
>>
>>>
>>>
>>>>
>>>>If you evaluate below beta then there are 2 possibilities. In the end, best
>>>>score didn't improve, score is still eval, and eval is exact.
>>>>Second, bestscore did improve, must have been by search, so read from start, but
>>>>now 1 ply deeper.
>>>>
>>>>Tony



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.