Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Null move question

Author: Tim Foden

Date: 05:25:43 08/02/03

Go up one level in this thread


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.

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.