algorithm - 黑白棋/黑白棋 Alpha-Beta 修剪算法中的启发式函数

标签 algorithm artificial-intelligence alpha-beta-pruning

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

最大化玩家(正在运行算法并且是 将使用算法返回的移动)在这个节点的棋盘上? (每 block 砖+1)

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

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

问题是:叶节点上交的不是maximisings player怎么办?那么就不可能计算出他的有效 Action ,因为还没有轮到他。我可能误解了整个 alpha-beta 修剪算法,或者至少误解了启发式函数的工作原理。有人可以给我提示吗?

谢谢

最佳答案

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

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

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

关于algorithm - 黑白棋/黑白棋 Alpha-Beta 修剪算法中的启发式函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13791360/

相关文章:

algorithm - 求解二次方程的遗传算法

arrays - 与数组相同的 'degree' 子数组的个数

artificial-intelligence - 经典人工智能、本体论、机器学习、贝叶斯

artificial-intelligence - 自上而下的游戏 AI

c++ - Alpha-Beta "breaking"阿姆达尔定律?

python - 从 Alphabeta 框架中收集和检索主要变化

algorithm - 树编辑距离 : How can I get the optimal mapping?

algorithm - 如何找到地铁或铁路网络的最少换乘次数?

tree - 如何在复杂游戏中的 MCTS 中执行 Roll-out

java - 在 Java 中向 Negamax 添加 Alpha Beta 剪枝