MinMax 树 - 当 Min 可以分两步获胜时
Posted
技术标签:
【中文标题】MinMax 树 - 当 Min 可以分两步获胜时【英文标题】:MinMax trees - when Min can win in two steps 【发布时间】:2012-01-06 17:40:15 【问题描述】:所以,我一直在玩最小最大树,以在两人棋盘游戏中创建一个简单的计算机玩家。我了解算法的基础知识,但有一个案例让我的火鸡大脑无法理解……当 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,得分为 +20
当然,问题是如果 MAX 选择 B,那么 MIN 将执行操作 A(因为该方块仍然可用),因此 MIN 将获胜。我需要让MAX来实现在状态(a)中选择动作A的价值,以防止MIN在下一步中得到-INF。
我会在代码中进行大量测试以检查 MIN 是否可以获胜,但在我看来,算法应该解决这个问题。我认为我在确定导致此问题的 MAX 值时遗漏了一部分。
(编辑澄清)
【问题讨论】:
【参考方案1】:极小极大树中的每个节点都是一个完整的游戏状态。当玩家选择一个动作时,游戏进入该状态,限制两个玩家的动作(无法从另一个分支中选择另一个动作)。因此,在您的示例中,如果处于状态 (a) 的玩家 Max 选择动作 B,则游戏现在处于状态 C。此时最小玩家的唯一两个选择是 A(22) 和 B(20)。树的深度无关紧要;最大和最小玩家总是会从游戏的当前状态中选择他们最好的动作。
对于井字游戏,每个状态都需要是一个完整的棋盘(当然可行)。例如,第一层将是 X 可以放置其标记的每个可能位置。然后这些状态的每个子状态将是 O 可以放置的每个可能的位置,给定父状态(X 放置的位置),等等...
当您无法表示整个博弈树(例如,国际象棋)时,启发式很有帮助,但不要改变极小极大树的使用方式。
【讨论】:
【参考方案2】:如果认为问题出在启发式函数上。如你所说,如果MAX在状态(a)中选择B,
MIN 将执行操作 A(因为该方块仍然可用),因此 MIN 将获胜
但是在树上你用 *22 标记它而不是 -Inf 应该是(MIN 获胜)。
【讨论】:
我不明白的一件事:如果 MAX 在状态 (a) 中选择 A,是否允许 MIN 在状态 (b) 中选择 A(正如您所说,A 在一个位置上,它不是t 不再可用)。以上是关于MinMax 树 - 当 Min 可以分两步获胜时的主要内容,如果未能解决你的问题,请参考以下文章