所以,我一直在玩最小最大树,在两人棋盘游戏中创建一个简单的电脑玩家。我了解算法的基础知识,但有一个案例让我的火鸡大脑无法理解……当 MIN 可以分两步获胜时会发生什么?
例如,假设一个四连棋/井字游戏,其中只有两个玩家中的一个可以拥有一个方格。我如何让 MAX 仅仅为了防止 MIN 获得广场而占据一个广场?
让我们尝试一个简化的示例(以漂亮的 ASCII 艺术显示),其中选项是左和右。假设他的树太大而无法一直遍历到终端状态,所以中间值是根据启发式函数计算的(下面用 * 标记)。-INF 是 MIN 获胜的最终状态。
MAX (a)
/ \
A B
/ \
MIN (b) MIN (c)
/ \ / \
A B A B
/ | | \
-INF *5 *22 *20
MIN 将在状态 (b) 中选择动作 A,得分为 -INF
MIN 将在状态 (c) 中选择动作 B,得分为 +20
MAX 将在状态 (a) 中选择动作 B,获得 a +20 的分数
问题——当然——是如果 MAX 选择 B,那么 MIN 将执行动作 A(因为该方块仍然可用),因此 MIN 将获胜。我需要让 MAX 来实现在状态(a)中选择动作 A 的价值,以防止 MIN 在下一步中获得 -INF。
我会在代码中进行大量测试以检查 MIN 是否可以获胜,但在我看来,算法应该解决这个问题。我认为我在确定导致此问题的 MAX 值时遗漏了一部分。
(编辑澄清)