Professional Documents
Culture Documents
Giải thuật cắt tỉa Alpha – Beta đây là một trong những
phương pháp tối ưu giúp cho thuật toán minimax có thể
tìm ra phương pháp nhanh hơn vì phương pháp này giúp
loại bỏ một vài nhánh trong quá trình tìm kiếm, là giới
hạn lại pham vi tìm kiếm, giúp cho mô hình hay thuật
toán hoạt động một cách nhanh hơn và tối ưu hơn.
Thuật toán sẽ hoạt động hiệu quả hơn nếu những bước tìm
kiếm đầu tiên là những nước đi tốt nhất .
Mã giả:
function minimax(node, depth, alpha, beta,
maximizingPlayer) is
if depth ==0 or node is a terminal node then
return -evaluateBoard(game.board());
Code:
function minimax(depth, game, alpha, beta,
isMaximisingPlayer) {
positionCount++;
if (depth === 0) {
return -evaluateBoard(game.board());
}
if (isMaximisingPlayer) {
var bestMove = -9999;
for (var i = 0; i < newGameMoves.length; i++) {
game.moves(newGameMoves[i]);
bestMove = Math.max(bestMove, minimax(depth - 1,
game, alpha, beta, !isMaximisingPlayer));
game.undo();
alpha = Math.max(alpha, bestMove);
if (beta <= alpha) {
return bestMove;
}
}
return bestMove;
} else {
var bestMove = 9999;
for (var i = 0; i < newGameMoves.length; i++) {
game.moves(newGameMoves[i]);
bestMove = Math.min(bestMove, minimax(depth - 1,
game, alpha, beta, !isMaximisingPlayer));
game.undo();
beta = Math.min(beta, bestMove);
if (beta <= alpha) {
return bestMove;
}
}
return bestMove;
}
}
Chú thích code:
bestMove = Math.max(bestMove, minimax(depth - 1,
game, alpha, beta, !isMaximisingPlayer)); // Hàm xét
max
bestMove = Math.min(bestMove, minimax(depth - 1,
game, alpha, beta, !isMaximisingPlayer)); // Hàm xét min
alpha = Math.max(alpha, bestMove); // Hàm xét giá trị
alpha
beta = Math.min(beta, bestMove); // Hàm xét giá trị beta
if (beta <= alpha) {
return bestMove;
} // hàm ngắt xét cây