Minmax 算法与 Alpha-Beta 剪枝小教学
要理解 Minmax 算法和 Alpha-Beta 剪枝算法,我们可以从“两人零和博弈”场景入手(比如棋类游戏、石头剪刀布)。这类场景的核心是:你和对手轮流决策,你的目标是最大化自己的收益,对手则会最小化你的收益。
一、Minmax 算法:最简单的博弈决策
1. 核心思想
想象你在玩一个简单的游戏:你和对手轮流选数,最终的得分由你们的选择共同决定。
- 你(Max 方):每次选择都想让最终得分尽可能高(最大化收益)。
- 对手(Min 方):每次选择都想让最终得分尽可能低(最小化你的收益)。
Minmax 算法通过“游戏树”模拟所有可能的决策路径,计算每个路径的最终得分,帮你找到最优决策。
2. 用“游戏树”直观理解
我们用一个简化的“数字游戏”举例:
- 游戏规则:你(Max)先选左/右,对手(Min)再选左/右,最终得分由最后一层的数字决定。
- 目标:你要找到能让自己得分最高的初始选择。
游戏树如下(每层节点代表一个决策步骤,叶子节点是最终得分):
(你:Max)/ \/ \(对手:Min) (对手:Min)/ \ / \3 5 2 7
(终局)(终局) (终局) (终局)
3. Minmax 计算步骤
步骤1:从“终局”倒推,计算每个节点的“最优得分”
- 叶子节点:就是终局得分(3、5、2、7)。
- Min 节点(对手):选子节点中最小的得分(对手会尽量压低你的收益)。
- 左 Min 节点:从 3 和 5 中选最小 → 3。
- 右 Min 节点:从 2 和 7 中选最小 → 2。
- Max 节点(你):选子节点中最大的得分(你会尽量抬高自己的收益)。
- 根节点:从左 Min(3)和右 Min(2)中选最大 → 3。
结论:你应该选择“左分支”,最终得分至少为 3(如果选右分支,对手会让你只能得 2)。
4. 总结 Minmax
- 本质:通过“假设对手最优”倒推自己的最优决策。
- 缺点:如果游戏树很深(比如围棋),需要计算的节点太多,效率极低。
二、Alpha-Beta 剪枝:Minmax 的“效率优化”
Alpha-Beta 剪枝的核心是:去掉“明显不会被选择”的分支计算,减少工作量,结果和 Minmax 完全一致。
1. 关键概念
- Alpha(α):当前 Max 节点“能保证的最低得分”(低于这个分,Max 绝不会接受)。
- Beta(β):当前 Min 节点“能接受的最高得分”(高于这个分,Min 绝不会接受)。
- 剪枝条件:当 α ≥ β 时,说明当前分支已经没有意义(Max 不接受,Min 也不接受),可以停止计算。
2. 用同一个游戏树演示剪枝过程
还是上面的数字游戏,我们一步步计算并剪枝:
(你:Max)/ \/ \(对手:Min) (对手:Min)/ \ / \3 5 2 7
(终局)(终局) (终局) (终局)
步骤1:计算左分支的 Min 节点
- 左 Min 节点的第一个子节点得分是 3 → 暂时记录 β=3(Min 最多接受 3)。
- 再看左 Min 节点的第二个子节点得分是 5 → Min 会选更小的 3,所以左 Min 节点最终得分是 3。
- 此时,根节点(Max)的 α 更新为 3(Max 至少能得 3)。
步骤2:计算右分支的 Min 节点
- 右 Min 节点的第一个子节点得分是 2 → 暂时记录 β=2(Min 最多接受 2)。
- 此时,根节点的 α=3,右 Min 节点的 β=2 → 因为 3 ≥ 2(α ≥ β),说明右 Min 节点的其他子节点(比如 7)再大也没用了(Min 不会选 7,因为 2 更小)。
- 剪枝! 右 Min 节点的第二个子节点(7)不需要计算了。
最终,右 Min 节点的得分是 2,根节点 Max 选左分支(3),结果和 Minmax 一致,但少算了一个节点。
3. 剪枝效果对比
- Minmax:需要计算所有 4 个叶子节点。
- Alpha-Beta:只需要计算 3 个叶子节点(剪掉了 7)。
游戏树越深、分支越多,剪枝效果越明显(比如国际象棋,剪枝后计算量可能减少 90% 以上)。
三、对比总结
算法 | 核心逻辑 | 优势 | 图示简化(游戏树) |
---|---|---|---|
Minmax | Max 求最大,Min 求最小,倒推最优决策 | 逻辑简单,结果最优 | 全树计算,无剪枝 |
Alpha-Beta | 用 α(Max 底线)和 β(Min 上限)剪枝 | 效率极高,结果不变 | 剪掉 α ≥ β 的分支,减少计算量 |
四、举一个例子
- Minmax:你和对手玩石头剪刀布,你要考虑“对手出什么会让你输得最惨”,然后避开这个选择。
- Alpha-Beta 剪枝:当你发现“无论对手怎么出,你选石头都至少能打平”,就没必要再想“选剪刀或布”的情况了,直接选石头即可。
通过这种方式,算法能在复杂的博弈中快速找到最优解~