Skip to main content
 首页 » 编程设计

python之alpha-beta剪枝算法中的alpha值是如何使用和更新的

2025年05月04日16shanyou

我在看帖子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