algorithm - 哪些算法可以应用于 Duchess(像国际象棋这样的棋盘游戏)

标签 algorithm chess alpha-beta-pruning

我一直在寻找名为 Duchess http://www.cse.unsw.edu.au/~blair/duchess/rules.html 的游戏的算法/方法

我正在考虑 alpha beta 修剪,但我不知道它是否适用于两名以上玩家的游戏。

最佳答案

团队对团队版本可以使用 alpha-beta 剪枝和类似的游戏树搜索技术来玩,因为它是一个零和两人游戏。您只需将团队视为玩家即可。

带有树玩家的版本不适合标准的 alpha-beta 游戏树搜索方法,因为它不是两人零和游戏。

问题是,在两人游戏中,您可以使用“评估函数”来评估给定的棋盘配置对于玩家 1 来说有多好,例如尝试将其解释为玩家 1 在假设“良好”发挥的给定配置中获胜的“概率”。如果玩家1的获胜概率是P,那么玩家2的获胜概率是1-P,显然,所以P足以代表对棋盘配置的评估。 Alpha-beta 剪枝使用此评估值作为算法的核心。

当你有三名玩家时,这不再是明确定义的,因为假设“好”发挥,玩家 1 从给定配置中获胜的概率取决于玩家 2 和玩家 3 是否会合谋对抗玩家 1 。此外,还有一种称为“制王”的场景,即玩家 1 无法获胜,但玩家 1 仍然可以决定玩家 2 或玩家 3 获胜。

对于三个玩家,您基本上必须采用一种方案,其中棋盘配置被评估为三个值:P1、P2 和 P3,每个值代表给定玩家达到该配置的相对偏好。之后,您可以进行游戏三搜索,其中每个玩家都试图在搜索边界最大化玩家的偏好值。但是,例如,您需要能够回答这样的问题:对于玩家 X 来说,被将死而失败或不成为胜利者而失败是否更可取,以及如果是的话,损失多少。

关于algorithm - 哪些算法可以应用于 Duchess(像国际象棋这样的棋盘游戏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17442760/

相关文章:

c++ - 排序原子链表算法(优先队列)

algorithm - 如何在 Karmarkar-Karp 启发式多路分区算法中重建分区?

c++ - 自动 vector 边界检查而不会使我的程序崩溃

c - 在现有的 C 国际象棋引擎中实现多线程

algorithm - Minimax 的 Alpha-beta 剪枝

c++ - 为什么这段代码的时间复杂度是O(N)?

将图划分为边对的算法

java - 为国际象棋游戏创建棋盘演示

artificial-intelligence - 在国际象棋的 Alpha-Beta 搜索中实现 killer 启发式

algorithm - Tic Tac Toe 实现与 min - max 方法与 alfa-beta 修剪有没有更好的解决方案?