我在看帖子Strange behaviour in a function while implementing the alpha-beta pruning algorithm和接受的答案,其中指出:“您的 rootAlphaBeta 不更新 alpha 值”。我想知道代码的必要添加是什么。
请您参考如下方法:
要使 alpha-beta 修剪起作用,alpha 值需要传播到深度优先搜索的顶层。这可以通过以下方式实现:初始化一个变量以在潜在移动的循环外存储 alpha,将对 alphaBeta() 的调用结果存储在其中,然后将其用作 alphaBeta()。在看起来像这样的代码中:
def rootAlphaBeta(self, board, rules, ply, player):
""" Makes a call to the alphaBeta function. Returns the optimal move for a player at given ply. """
best_move = None
max_eval = float('-infinity')
move_list = board.generateMoves(rules, player)
alpha = float('infinity')
for move in move_list:
board.makeMove(move, player)
alpha = -self.alphaBeta(board, rules, float('-infinity'), alpha, ply - 1, board.getOtherPlayer(player))
board.unmakeMove(move, player)
if alpha > max_eval:
max_eval = alpha
best_move = move
return best_move
