【问题标题】:How is the alpha value in alpha-beta pruning algorithm used and updated?alpha-beta 剪枝算法中的 alpha 值是如何使用和更新的?
【发布时间】:2013-11-13 20:22:16
【问题描述】:

我正在查看帖子 Strange behaviour in a function while implementing the alpha-beta pruning algorithm 和接受的答案,其中指出:“您的 rootAlphaBeta 不会更新 alpha 值”。我想知道对代码的必要补充是什么。

【问题讨论】:

    标签: python artificial-intelligence alpha-beta-pruning


    【解决方案1】:

    要使 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
    

    【讨论】:

    • 您的代码中没有错字吗?看起来您正在更新 beta 值而不是 alpha。
    • 你的意思是我更新的是beta而不是alpha?因为我在 for 循环的第二行更新了 alpha。我相信 beta 的所有更新都发生在原始问题的 alphaBeta() 函数中(这里我只是编写 rootAlphaBeta() 函数,因为这就是问题所在)。免责声明:我在 5 年前写了这篇文章,从那以后就没有太多使用 alpha-beta 修剪,所以我完全有可能犯了一个错误。