Computer Chess Club Archives


Search

Terms

Messages

Subject: Principal variation search question.

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.