当前位置: 首页 > news >正文

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% 以上)。

三、对比总结

算法核心逻辑优势图示简化(游戏树)
MinmaxMax 求最大,Min 求最小,倒推最优决策逻辑简单,结果最优全树计算,无剪枝
Alpha-Beta用 α(Max 底线)和 β(Min 上限)剪枝效率极高,结果不变剪掉 α ≥ β 的分支,减少计算量

四、举一个例子

  • Minmax:你和对手玩石头剪刀布,你要考虑“对手出什么会让你输得最惨”,然后避开这个选择。
  • Alpha-Beta 剪枝:当你发现“无论对手怎么出,你选石头都至少能打平”,就没必要再想“选剪刀或布”的情况了,直接选石头即可。

通过这种方式,算法能在复杂的博弈中快速找到最优解~

http://www.dtcms.com/a/269838.html

相关文章:

  • (普及−)B3629 吃冰棍——二分/模拟
  • 【Spring WebSocket详解】Spring WebSocket从入门到实战
  • Spring Boot 事务失效问题:同一个 Service 类中方法调用导致事务失效的原因及解决方案
  • MATLAB/Simulink电机控制仿真代做 同步异步永磁直驱磁阻双馈无刷
  • CD46.【C++ Dev】list的模拟实现(1)
  • 一天一道Sql题(day02)
  • SSH密钥 与 Ed25519密钥 是什么关系
  • 服务器的RAID存储方案如何选择最合适?
  • 20250708-2-Kubernetes 集群部署、配置和验证-使用kubeadm快速部署一个K8s集群_笔记
  • 兰顿蚂蚁路径lua测试
  • 无缝高清矩阵与画面分割器的区别
  • OpenWebUI(5)源码学习-后端socket通信模块
  • Apache DolphinScheduler保姆级实操指南:云原生任务调度实战
  • iOS打包流程
  • navicat导出数据库的表结构
  • 鸿蒙分布式开发实战指南:让设备协同像操作本地一样简单
  • 深度 |以数字技术赋能服务消费场景创新
  • kafka如何让消息均匀的写入到每个partition
  • Spring Boot 多数据源切换:AbstractRoutingDataSource
  • Elasticsearch Kibana 使用 原理
  • 用基础模型构建应用(第七章)AI Engineering: Building Applications with Foundation Models学习笔记
  • Linux基础篇、第五章_01利用 Cobbler 实现 CentOS 7 与 Rocky 9.5 自动化安装全攻略
  • 记录一次在 centos 虚拟机 中 安装 Java环境
  • windows内核研究(系统调用 1)
  • 从传统项目管理到敏捷DevOps:如何转向使用DevOps看板工具进行工作流管理
  • 谁主沉浮:人工智能对未来信息技术发展路径的影响研究
  • 优化提示词提升VLLM准确率
  • K8s——配置管理(1)
  • 构建高效分布式系统:bRPC组合Channels与HTTP/H2访问指南
  • 从单体到微服务:Spring Cloud 开篇与微服务设计