Author: William Bryant
Date: 15:39:20 03/11/99
Following several discussions over the last 6 to 12 months, plus David Levy's
1993 book "How Computers Play Chess", I think I have the basic idea for
implementing aspiration windowing.
By using the score returned from the previous iteration +/- some search interval
(from 1/3 to 1 pawn, YMMV), you try to create faster cutoffs and therefore a
quicker search. If you fail high (score greater than initial beta, ie previous
score + interval), you research with a window of (beta, beta+1), and if you fail
high again with a window of (beta+1, Mate). If you fail low, you research with
a window of (-Mate, alpha).
The first research when failing high is a _very_Narrow_ window of only 1
centipawn. Is this correct, or should it be the value of 1 pawn?
Any comments or suggestions would be appreciated.
This is the basic idea in pseudocode/code as I understand it.
long InitialAlpha = -Mate;
long InitialBeta = Mate;
long Window = 40; // 4/10 of a pawn
for (long Depth = 1; Depth <= MaxSearchDepth; Depth ++) {
score = absearch(InitialAlpha, InitialBeta, Depth);
if (score >= InitialBeta) { //Fail High
score = absearch(InitialBeta, InitialBeta + 1, Depth);
if (score >= InitialBeta +1)
score = absearch(InitialBeta + 1, Mate, Depth);
}
else if (score < InitialAlpha) //Fail Low
score = absearch(-Mate, InitialAlpha, Depth);
InitialAlpha = score - Window;
InitialBeta = score + Window;
if (OutOfTime)
break;
}
Thanks,
William Bryant
wbryant@ix.netcom.com
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.