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.01 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.