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