1

我正在实现一个 Alpha-Beta 修剪算法,该算法将用于在奥赛罗游戏中获得最佳移动。当算法到达叶节点(即没有有效移动或达到最大深度)时,我基于此计算该节点的启发式值:

最大化玩家(运行算法并将使用算法返回的移动的玩家)在该节点的棋盘上有多少砖?(每块砖+1)

最大化玩家在这个节点有多少有效移动?(每步+10)

最大化玩家有多少个角砖?(每个角砖+100)

问题是:如果不是最大化玩家在叶子节点上交,我该怎么办?然后不可能计算他的有效动作,因为轮不到他。我可能误解了整个 alpha-beta 修剪算法,或者至少误解了启发式函数应该如何工作。有人可以给我一个提示吗?

谢谢

4

1 回答 1

0

无论您是使用算法的传统极小极大公式,还是负极大公式,您都应该从要移动的一侧来评估棋盘。

然后,两种算法对值的处理方式不同;minimax 只是有单独的代码片段,无论是轮到 MAX 还是 MIN 玩家,而 negamax 分配“val = - negamax(child)”。

ChessProgrammingWiki 有很好的解释和伪代码:MinimaxNegamax

于 2014-02-21T03:32:30.520 回答