1

在实现 alpha-beta 修剪算法和接受的答案时,我正在查看函数中的奇怪行为,其中指出:“您rootAlphaBeta不会更新 alpha 值”。我想知道对代码的必要补充是什么。

4

1 回答 1

6

为了使 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
于 2013-11-14T03:24:54.203 回答