我正在使用带有alpha-beta修剪的minimax方法创建一个国际象棋AI。我试图理解alpha-beta剪枝是如何工作的,但当涉及到设置特定搜索深度的国际象棋时,我无法理解它
带alpha-beta的minimax如何解决为优势牺牲一块2-3步的问题?难道它不会仅仅看到牺牲的位置,并立即将该树枝视为坏树枝丢弃,从而错过好的“牺牲”吗
感谢您对改进的任何澄清或建议。以下是我目前的代码:
def minimax(board, depth, alpha, beta, maximizing_player):
board.is_human_turn = not maximizing_player
children = board.get_all_possible_moves()
if depth == 0 or board.is_draw or board.is_check_mate:
return None, evaluate(board)
best_move = random.choice(children)
if maximizing_player:
max_eval = -math.inf
for child in children:
board_copy = copy.deepcopy(board)
board_copy.move(child)
current_eval = minimax(board_copy, depth - 1, alpha, beta, False)[1]
if current_eval > max_eval:
max_eval = current_eval
best_move = child
alpha = max(alpha, current_eval)
if beta <= alpha:
break
return best_move, max_eval
else:
min_eval = math.inf
for child in children:
board_copy = copy.deepcopy(board)
board_copy.move(child)
current_eval = minimax(board_copy, depth - 1, alpha, beta, True)[1]
if current_eval < min_eval:
min_eval = current_eval
best_move = child
beta = min(beta, current_eval)
if beta <= alpha:
break
return best_move, min_eval
目前没有回答
相关问题 更多 >
编程相关推荐