Author: Russell Reagan
Date: 22:55:14 09/07/03
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 } 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?
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.