模型预测控制模拟器 返回
控制工程模拟器

模型预测控制模拟器 — 有限视域最优化

将一阶过程离散化,计算最小化预测视域内输出误差的最优输入,每步进行解析计算。实现MPC的基本动作并可视化与PID的应答差异。

参数设置
预测视域 N_p
step
控制视域 N_c
step
输入惩罚系数 λ
目标值 r

过程:K = 2、T = 5 s、dt = 0.1 s(固定)。模拟时间15 s。对比对象:同系统上的PID控制(Kp=2, Ki=0.4)应答。

计算结果
上升时间(0→90%)
稳定时间(±2%)
超调
初始输入 u(0)
滚动视域 实时数值
0.00
当前输出 y
1.00
目标值 r
0.00
预测误差 r−ŷ
0.00
施加输入 u
滚动视域控制 — 预测窗口滑动前进
实际输出 y(MPC) 预测轨道(Np 前瞻) 目标 r PID 应答 输入 u 计划输入 Nc 输入约束 ±umax

上部=输出 y(蓝)·目标 r(红虚线)·PID应答(灰)·当前时刻起的预测轨道(蓝点线)与预测窗口(阴影)/下部=输入 u(绿)·Nc 个计划输入(黄点)·输入约束 ±umax(橙)。仅施加第一个输入,窗口随之前进。

理论与主要公式

一阶过程$G_p(s) = K/(T s + 1)$采用前向欧拉法离散化,表示为$x_{k+1} = a\,x_k + b\,u_k$(其中$a = e^{-dt/T}$、$b = K(1-a)$)。

Np步的预测:

$$y_{k+i} = a^{i}\,x_k + \sum_{j=0}^{i-1} a^{i-1-j}\,b\,u_{k+j}$$

代价函数(输出误差加输入变化惩罚以保证积分作用):

$$J = \sum_{i=1}^{N_p} (y_{k+i} - r)^2 + \lambda \sum_{j=0}^{N_c - 1} (\Delta u_{k+j})^2$$

无约束QP的解析解($\partial J / \partial U = 0$):

$$U = \bigl(H^\top H + \lambda\, L^\top L\bigr)^{-1} \bigl(H^\top (R - F\,x_k) + \lambda\,u_{k-1}\,\mathbf{e}_1\bigr)$$

H(Np × Nc)和F(Np × 1)从过程系数a、b构成,L为前向差分算子。采用滚动视域方式仅印加u_k = U[0],下步进行重新最优化。

模型预测控制模拟器简介

🙋
我听说过"模型预测控制",但不太明白与PID控制有什么区别。普通反馈控制不行吗?
🎓
简单说,PID只看"现在的误差",而MPC看"未来10步以内的误差",然后计算能最小化那个误差的输入。MPC在内部有一个过程的数学模型,可以根据$x_{k+1} = a x_k + b u_k$预测将来会发生什么。看上面的模拟器,MPC的蓝线与PID的灰线比较,你会发现MPC的振荡要少得多。
🙋
我把预测视域Np改成30,应答变得平缓了。但计算量会不会很大?
🎓
好问题。Np越大,预测矩阵H的尺寸是Np × Nc,所以H^T H会变大。本工具使用无约束QP的解析解$U = (H^\top H + \lambda I)^{-1} H^\top (R - F x_k)$,只需做Nc × Nc矩阵的求逆,计算量还好。但实际中有约束的MPC,每步都要用QP求解器(内点法或有效集法),Np翻倍会导致计算时间暴增。在工业界,通常Np≈整定时间的80~100%,Nc只需1~3就足够了。
🙋
我把输入惩罚λ改成10,应答变得特别慢。为什么要加这个参数?
🎓
λ是"不想让输入动作太大"的惩罚。λ=0时,MPC会不计代价地快速追随目标,初始输入u(0)会非常大,这在现实中会弄坏泵或阀门。λ增大就是说"宁可应答慢一点,也要保护执行器"。你看下段的u(t),λ=0.1和λ=10的初始输入u(0)大小差异很大,就是这个道理。
🙋
下段的黄色点是什么?为什么有3个?
🎓
那就是MPC的精妙之处!最初计算出来的Nc=3个最优输入:$u_k, u_{k+1}, u_{k+2}$。但MPC采用"滚动视域"策略,实际只把最前面的$u_k$印加到过程去。下一步来了新的测量值$x_{k+1}$,再计算新的3个输入。这样"边走边算、逐步修正"的方式,对外界干扰特别有抵抗力。

常见问题

最大的差别在于"预测未来"和"能直接处理约束"。PID只用瞬时的误差、积分和微分,而MPC用数学模型预测Np步以后,最小化整个预测窗口的误差。更重要的是,MPC能自然地将输入、输出的上下限、安全约束等直接写入优化问题,用QP求解器求解。MIMO(多输入多输出)系统中,MPC还能自动处理变量间的相互影响,这是PID做不到的。所以在石油精炼、化学、电力等工业应用中,MPC是标准配置。相反,简单的单环SISO控制,用PID的成本更低,稳定性也够好。
滚动视域方式每步都重新测量状态,重新计算,所以对某种程度的模型误差有较好的鲁棒性。但如果模型与实际过程的差异太大,会出现定常偏差甚至不稳定。为了克服这一点,实现层面会加上"外乱观测器"(如卡尔曼滤波)来重构状态,或者用积分误差补偿确保"零定常偏差"。还有专门的"鲁棒MPC"(如Tube MPC)来显式处理模型不确定性。本模拟器设定内部模型与过程完全一致,所以看到的是理想的追踪效果。
有两个原因:一是计算成本。Nc决定了优化变量的个数,Nc=Np时待优化的输入有Np个,矩阵求逆的维数很大;Nc较小时,只用Nc维的求解,快得多。二是输入平滑性。如果Np个输入都独立优化,为了让Np个输出都精确追踪目标,输入会大幅振荡。而Nc较小(如1~3),后续用"输入保持"策略(最后一个$u_{k+Nc-1}$保持不变),输入曲线会光滑得多,实际执行也更安全。本工具就是采用这个结构:前Nc步计算不同的输入,后面的预测用保持值。
石油和化工是MPC应用最广泛的领域。AspenTech公司的DMCplus(Dynamic Matrix Control商业版)、壳牌公司的SMOC、Honeywell的Profit Controller等都是数十~数百变量MIMO过程的标准工具。这些产品通常分为两层:上层是MPC优化器(算最优目标值),下层是标准的PID或简单调节器跟踪MPC的指令。汽车行业用MPC控制发动机、混动系统、自动驾驶。医疗领域已有FDA批准的"人工胰腺"(自动胰岛素注射)采用MPC。MATLAB的Model Predictive Control Toolbox、Python的do-mpc和CasADi也是研究和教学的常用工具。

实际应用

石油精炼和化工过程:这是MPC应用最成熟的领域。蒸馏塔、裂化装置、改质装置等大型多变量过程,需要同时控制产品纯度、温度、压力,同时优化能耗和原料成本。通常采用分层结构:经济层(LP/QP)下达目标,MPC层(数十~百变量)执行协调控制,底层PID跟踪MPC命令。全球精炼产能的绝大多数都运行在MPC控制下。

汽车发动机和动力总成:涡轮增压发动机的进气控制、混动车的能量管理、自动驾驶中的轨迹跟踪和碰撞规避,都用MPC。与PID相比,MPC能在100 ms的高频周期内,同时约束轮胎摩擦极限、转向限制等多个物理约束,优化动态性能。

电力系统和新能源:微网的电力平衡、风光储联合优化、HVDC潮流控制都用MPC。预测视域内可以融入气象预报数据(风速、辐照),从而提前优化发电和储能策略,实现提前数小时的经济调度。建筑冷暖控制(Building HVAC)用天气预报和MPC也显著提升了节能效果。

医疗和生命科学:最知名的是1型糖尿病患者的"人工胰腺"闭环胰岛素给药系统。以血糖动态模型预测未来1~2小时,计算最优胰岛素注射量,既避免低血糖,又避免高血糖。美国FDA已批准Tandem Control-IQ等产品,大大改善了患者的生活质量。

常见误区与注意

最常见的误解是"预测视域Np越长越好"。实际上Np过长会让预测中较远时刻的误差和不确定性反向影响当前决策,导致"短视"行为或数值不稳定。经验法则是设Np≈过程整定时间的80~100%(以步数计),通常Np = 稳定时间 / 采样时间的80%左右。本模拟器中,即使把Np从10提高到30,应答也改善不多,原因就是Np=10已覆盖了整定过程。

第二个误区是"λ=0会得到最快应答"。确实λ=0时输出误差最小,但初始输入u(0)会非常大,现实中执行器会饱和,还会因大幅度动作而寿命锐减。λ=0还会对模型误差和测量噪声非常敏感,导致输入"高频抖振"。实用做法是从λ ≈ K²(K是过程增益)开始,看输入波形,逐步调整。本模拟器把λ改成0就能看到u(0)激增。

第三点是理论与现实的差距。本工具假设"内部模型与过程完全相同,无噪声",所以看到光滑的追踪。实际过程中一定存在:(1)未建模的高阶动态,(2)时变参数,(3)外界干扰,(4)测量噪声。工程实现要加(1)观测器(如卡尔曼滤波)重构状态,(2)积分外乱模型保证"零定常偏差",(3)有约束QP求解器保护安全限,(4)先进的鲁棒MPC来容纳模型不确定性。MPC比PID更强大,但也比PID更"知识密集",需要更多的工程设计和调试。

使用指南

  1. 设置预测视域(Np)为2~20步。采样时间0.1s的一阶滞后过程(时间常数τ=5s),Np=10时约预测1秒的过程
  2. 设置控制视域(Nc)≤Np。Nc=3时,前3步计算最优输入,后续使用保持策略
  3. 调整输入惩罚λ与目标值权重R。λ=0.1、R=1.0为起点,观察应答速度与能量消耗的权衡
  4. 点击"计算"按钮执行有限视域最优化。二次规划(QP)算法计算最优输入序列u(0)~u(Nc-1)

具体计算例

本工具的过程固定为 K=2、T=5 s、dt=0.1 s,即 G(z)=0.0396/(z−0.9802)。在默认 Np=10、Nc=3、λ=0.1、目标值 r=1.0 下,对阶跃目标值 1.0,初始输入 u(0)=2.292,上升时间(0→90%)约0.90s,超调约0.9%,稳定时间(±2%)约1.20s。将输入惩罚 λ 减为 0 时 u(0) 会跳升至约25.3;增大 λ 则输入更平缓但响应变慢,可在卡片中验证这一权衡。

工程注意事项

  1. Np过大(≥30)会导致QP计算时间增加,易数值不稳定。τ/Ts比≥10倍时,Np≈15为宜
  2. Nc<3在机器人位置控制中易产生脉动,λ<0.01在泵流量控制中频发饱和约束违反,需提前设置输入上限值
  3. 离散模型极点接近z=1(积分特性)时,将目标权重R设≥2.0强化定常偏差抑制
  4. 实际应用需检查QP矩阵的条件数(κ>1000为病态),并用观测器增益补偿预测视域内的非测量外乱和模型化误差