Author: Koundinya Veluri
Date: 00:28:16 09/08/03
Go up one level in this thread
On September 08, 2003 at 01:55:14, Russell Reagan wrote:
>I think I understand the differences and between fail hard alpha-beta and fail
>soft alpha-beta when described in higher level language (like English), but I'm
>a bit shaky on the implementation differences between the two.
>
>As I understand it, this is fail hard alpha-beta (from Bruce's site):
>
>int AlphaBeta(int depth, int alpha, int beta)
>{
> int val;
> if (depth == 0)
> return Evaluate();
> GenerateLegalMoves();
> while (MovesLeft()) {
> MakeNextMove();
> val = -AlphaBeta(depth - 1, -beta, -alpha);
> UnmakeMove();
> if (val >= beta)
> return beta;
> if (val > alpha)
> alpha = val;
> }
> return alpha;
>}
>
>How would this function be rewritten to perform fail soft alpha-beta? My best
>guess is this (changes commented):
>
>int AlphaBeta (int depth, int alpha, int beta) {
> int val;
> if (depth == 0)
> return Evaluate();
> GenerateLegalMoves();
> while (MovesLeft()) {
> MakeMove();
> val = -AlphaBeta(depth - 1, -beta, -alpha);
> UndoMove();
> if (val >= beta)
> return val; // <-- Return val instead of beta
> if (val > alpha)
> alpha = val;
> }
> return val; // <-- Return val instead of alpha
>}
>
I have something like this:
int AlphaBeta (int depth, int alpha, int beta) {
int bestscore = -(CHECKMATE_VALUE - ply); // changed
if (depth == 0)
return Evaluate();
GenerateLegalMoves();
while (MovesLeft()) {
MakeMove();
int val = -AlphaBeta(depth - 1, -beta, -alpha); // slightly changed
UndoMove();
if (val >= beta)
return val;
if (val > bestscore) { // changed
bestscore = val; // changed
if (val > alpha) // added
alpha = val; // added
}
}
return bestscore; // changed
}
>Also, when called with an infinite window (ex. AlphaBeta(depth, -INFINITY,
>INFINITY)), both the fail soft and fail hard versions should give the same
>score, correct?
I thought yes, but now that I think about it again, in a checkmated position,
fail-soft would return the correct checkmate score but fail-hard would return
alpha which would be -INFINITY :/... There might be something wrong in my
thinking here. Or, perhaps fail-hard should be tweaked to handle mate scores
when there are no legal moves.
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.