你好!
我正在尝试为我的国际象棋引擎编写一个 negamax 搜索算法,但我似乎无法让它工作。我以 wikipedias 伪代码为例,但不知何故它不会产生预期的结果。当我以 2 层运行它时,它会改变我的电路板数据结构,尽管它不应该。在第 2 层函数完成运行后,所有白棋(或黑棋。取决于玩家调用该函数的名称。)棋子从起始位置向前移动 2 个空格。
我的 make 和 unmake move 函数运行良好,因为我使用搜索多达 5 层的非递归函数对它们进行了测试。然后,它完美地工作了。我的 negamax 实现一定有问题。
非常感谢您的帮助!
def negaMax(self, board, rules, ply, player):
""" Implements a minimax algorithm. """
if ply == 0:
return self.positionEvaluation()
self.max_eval = float('-infinity')
self.move_list = board.generateMoves(rules, player)
for self.move in self.move_list:
board.makeMove(self.move, player)
self.eval = -self.negaMax(board, rules, ply - 1, board.getOtherPlayer(player))
board.unmakeMove(self.move, player)
if self.eval > self.max_eval:
self.max_eval = self.eval
return self.max_eval