Author: Kevin K
Date: 00:33:36 05/10/05
int AlphaBeta(int depth, int alpha, int beta)
{
BOOL fFoundPv = FALSE;
if (depth == 0)
return Evaluate();
GenerateLegalMoves();
while (MovesLeft()) {
MakeNextMove();
if (fFoundPv) {
val = -AlphaBeta(depth - 1, -alpha - 1, -alpha);
if ((val > alpha) && (val < beta)) // Check for failure.
val = -AlphaBeta(depth - 1, -beta, -alpha);
} else
val = -AlphaBeta(depth - 1, -beta, -alpha);
UnmakeMove();
if (val >= beta)
return beta;
if (val > alpha) {
alpha = val;
fFoundPv = TRUE;
}
}
return alpha;
}
Above code came from http://www.seanet.com/~brucemo/chess.htm.
I thought PVS searches the first move with alpha, beta and the others with
alpha, alpha+1 like below code.
But Bruce did differently. Wye did he do that?
Which one is more efficient?
int AlphaBeta(int depth, int alpha, int beta)
{
if (depth == 0)
return Evaluate();
GenerateLegalMoves();
while (MovesLeft()) {
MakeNextMove();
if (this is the first move) {
val = -AlphaBeta(depth - 1, -beta, -alpha);
} else
val = -AlphaBeta(depth - 1, -alpha - 1, -alpha);
if ((val > alpha) && (val < beta)) // Check for failure.
val = -AlphaBeta(depth - 1, -beta, -alpha);
UnmakeMove();
if (val >= beta)
return beta;
if (val > alpha) {
alpha = val;
fFoundPv = TRUE;
}
}
return alpha;
}
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.