3、MPC算法分类:线性MPC、非线性MPC、鲁棒MPC、自适应MPC、分布式MPC
聊到MPC的分类,我估计很多刚入行的朋友会有点懵。说实话,我刚接触那会儿也晕——怎么同一个控制框架,还能分出这么多花样?
其实没那么复杂。你想想看,MPC的核心就是“建模+预测+优化”。分类的本质,就是看你对这三个环节做了哪些“特殊处理”。
我个人习惯把MPC分成五大流派。下面咱们一个一个捋清楚。
3.1 线性MPC:最经典的入门款
线性MPC,说白了就是假设你的系统是线性的。模型长这样:x(k+1) = A·x(k) + B·u(k)。目标函数是二次型,约束也是线性的。
为什么它最流行?因为求解快啊!二次规划(QP)问题,成熟的求解器一抓一大把。我在做电机转速控制时,用的就是线性MPC。采样周期1ms,QP求解稳稳的。
- 模型线性,求解效率高
- 适合工作点附近的小范围控制
- 工程落地最成熟
3.2 非线性MPC:硬核玩家的选择
非线性MPC,模型不再是简单的A、B矩阵了。可能是微分方程,可能是神经网络,甚至是一堆查表数据。
举个例子,化学反应釜的温度控制。反应速率和温度是指数关系,线性模型根本描述不了。这时候非线性MPC就派上用场了。
但代价也很明显——求解慢。非线性优化问题,动不动就要迭代几十次。我曾经在项目里用非线性MPC控制机械臂,采样周期不得不拉到100ms,就为了给求解器留够时间。
3.3 鲁棒MPC:专治各种不确定性
鲁棒MPC,说白了就是“我预判了你的预判”。它不光考虑标称模型,还把模型误差、外部扰动都考虑进去了。
我记得在做一个无人机编队项目时,风扰是个大问题。普通MPC飞得好好的,突然一阵横风过来,无人机就偏航了。换成鲁棒MPC后,控制器会自动预留控制余量,抗干扰能力强了一大截。
鲁棒MPC的常见做法有两种:
- min-max优化: 在最坏情况下做优化,保证无论扰动多大,系统都稳定
- Tube MPC: 用一个“管道”约束状态轨迹,确保实际状态始终在管道内
3.4 自适应MPC:边学边控的聪明家伙
自适应MPC,核心思想是“在线更新模型”。系统参数变了?没关系,我实时辨识,模型跟着变。
你想想看,一个电池管理系统,电池老化后内阻会变。固定模型的MPC,用久了性能就下降。自适应MPC就不一样,它每隔一段时间重新辨识参数,模型始终贴合实际。
我建议做自适应MPC时注意两点:
- 激励条件: 系统必须有足够的激励,参数辨识才准。如果一直稳态运行,辨识结果会漂移。
- 模型切换平滑: 模型突变会导致控制量跳变,容易引发震荡。加个低通滤波或者渐变策略会好很多。
3.5 分布式MPC:多智能体的协作艺术
分布式MPC,解决的是“多个子系统怎么协同控制”的问题。每个子系统有自己的MPC控制器,但彼此之间要交换信息,达成全局最优。
举个例子,一个智能电网有几十个分布式电源。如果每个电源各自为政,电网电压可能崩溃。分布式MPC让每个电源的控制器互相通信,协调出力,既保证局部稳定,又兼顾全局经济性。
分布式MPC的架构主要有三种:
| 架构类型 | 通信方式 | 优缺点 |
|---|---|---|
| 集中式 | 所有信息汇总到中心 | 全局最优,但通信量大、单点故障 |
| 分散式 | 完全不通信 | 鲁棒性好,但全局性能差 |
| 分布式 | 邻居间交换信息 | 折中方案,工程中最常用 |
3.6 怎么选?我的建议
说了这么多,到底该用哪种?我一般按这个思路来:
- 系统线性度好、工作点固定: 线性MPC,省心省力
- 强非线性、大范围工况: 非线性MPC,但要做好实时性评估
- 模型不准、扰动大: 鲁棒MPC,牺牲一点性能换稳定性
- 系统参数时变: 自适应MPC,但注意辨识策略
- 多子系统协同: 分布式MPC,通信设计是关键
嗯,MPC的分类就聊到这儿。每种算法都有它的脾气,选对了事半功倍,选错了...嗯,你懂的。
公众号:蓝海资料掘金营,微信deep3321