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

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

把一阶过程离散化,每步用解析解最小化预测时域内的输出误差。可视化 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)
输出 y(t)、设定值 r、输入 u(t)

上:y(蓝)、r(红虚线)、PID 响应(灰)、预测时域曲线(蓝点线)/下:u(绿)、Nc 个最优输入(黄点)

理论与主要公式

把一阶过程 $G_p(s) = K/(T s + 1)$ 用前向 Euler 离散化得到 $x_{k+1} = a\,x_k + b\,u_k$($a = e^{-dt/T}$、$b = K(1-a)$)。

$N_p$ 步预测:

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

代价函数(输出误差 + Δu 惩罚,保证无静差跟踪):

$$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$($N_p \times N_c$)与 $F$($N_p \times 1$)由过程系数 $a, b$ 构成,$L$ 为前向差分算子。采用滚动时域策略,仅施加首个 $u_k = U[0]$,下一步重新优化。

模型预测控制模拟器是什么

🙋
「模型预测控制」我听说过,和 PID 有什么不同?普通的反馈控制不行吗?
🎓
大致来说,PID 只看「当前误差」,而 MPC 会看「未来 10 步的误差」,并计算使其最小化的输入。它持有过程的内部模型,用 $x_{k+1} = a x_k + b u_k$ 预测未来。比较上面模拟器中 MPC(蓝线)与 PID(灰线):同一对象下 MPC 的无谓振荡明显更少。
🙋
把「预测时域 Np」调到 30,响应变得稍微平缓了。计算量会怎样?
🎓
好问题。Np 增大后矩阵 $H$ 的规模变为 Np × Nc。本工具采用无约束 QP 的解析解 $U = (H^\top H + \lambda L^\top L)^{-1}(\cdot)$,只需要 Nc × Nc 的求逆。但现场约束 MPC 每步都要跑 QP 求解器,Np 翻倍计算时间会急剧上升。实机中常取 Np ≈ 整定时间的 80~100%,Nc = 1~3 就够了。
🙋
把「输入惩罚 λ」调到 10,响应变得非常慢。为什么需要这个参数?
🎓
λ 是「不想把输入摇得太剧烈」的惩罚。λ = 0 时 MPC 会追求最快跟踪而给出很大的输入,实机的阀或电机会吃不消。λ 增大就变成「慢一点没关系,但输入要平稳」。看下方 u(t):λ=0.1 和 λ=10 下 u(0) 的大小完全不在一个量级上。
🙋
下面那 3 个黄色点是什么?
🎓
这正是 MPC 的精髓——它们是第一次优化算出的 Nc 个输入 $u_k, u_{k+1}, u_{k+2}$。但 MPC 用滚动时域策略,实际只把第一个 $u_k$ 加到对象上。下一步用新测量值 $x_{k+1}$ 再算 Nc 个。「优化时连未来一起考虑,执行时只用一个」——这就是 MPC 对扰动如此鲁棒的原因。

常见问题

最大的区别是「未来预测」与「能显式处理约束」。PID 仅用瞬时误差、积分、微分,而 MPC 用过程模型预测 Np 步并能把输入上下限、输出安全限值等约束直接放入优化问题。它还能自然处理 MIMO(多输入多输出)系统的变量耦合,因此在石油炼制、化工等数十变量协调控制中被普遍采用。代价是计算量大、需要较准确的模型;对于简单 SISO 回路,PID 通常更经济实用。
滚动时域机制每步都用新测量值重新优化,因此对一定程度的模型误差具有鲁棒性。但若模型与对象差距过大,会出现稳态偏差甚至失稳。实际中常加入「积分扰动模型」保证无静差跟踪,或采用鲁棒 MPC(Tube MPC 等)显式处理模型不确定性。本模拟器中内部模型与对象完全一致,所以可以看到理想化的跟踪效果。
主要为了减少计算量和抑制输入抖动。若 Nc 与 Np 相同,优化变量数膨胀到 Np 且 Np 个输入想精确追踪 Np 个输出会引起强烈振荡。取 Nc 为 1~3,之后保持最后一个输入(即「blocking」技术),可得平滑且易实现的输入序列。本工具构造预测式 $H$ 矩阵时正好采用了这种 $u_{k+N_c-1}$ 保持结构。
石油炼制、化工领域以 AspenTech 的 DMCplus(DMC 商业版)、Shell 系的 SMOC、Honeywell 的 Profit Controller 等为代表。它们处理数十至数百输入输出的 MIMO 过程,常采用经济优化(LP/QP)位于 MPC 之上的分层结构。汽车业的发动机控制、自动驾驶也用 MPC,医疗界的人工胰腺胰岛素投放控制也已商用。MATLAB 的 Model Predictive Control Toolbox 与 Python 的 do-mpc、CasADi 在科研与教学中广泛使用。

实际应用

石油炼制与化工的上位控制:这是 MPC 最普及的领域。对蒸馏塔、催化裂化、重整等数十变量 MIMO 过程,同时把产品纯度、温度、压力保持在目标范围内,并对能耗与原料成本做经济最优化。下层 PID 回路的设定值由 MPC 决定的级联结构是标准做法,全世界大部分炼制能力都在 MPC 控制下运行。

汽车发动机与动力总成控制:涡轮增压发动机的空气流量控制、混合动力的能量管理、自动驾驶的轨迹跟踪与避障都采用 MPC。车辆动力学控制下,MPC 可在约 100 ms 的高速周期内同时优化转向、加减速、力矩分配,并能显式处理轮胎摩擦极限等约束。

电力系统与新能源:微网功率供需平衡、风光储一体化系统、HVDC 联络线潮流控制都应用 MPC。可将气象预报纳入预测时域,根据数小时的发电量与负荷预测进行最优运行。建筑暖通空调(HVAC)控制中,结合天气预报的 MPC 也已在节能示范中取得成效。

医疗与生物:糖尿病患者的人工胰腺(闭环胰岛素投放)已实用化 MPC。基于血糖模型预测未来数十分钟,计算在避免低血糖前提下把血糖维持在目标范围所需的胰岛素量。美国 FDA 批准的 Tandem Control-IQ 等为代表,显著提高了患者的生活质量。

常见误区与注意事项

最常见的误区是「预测时域 Np 越长,控制效果就越好」。实际上 Np 过长会让遥远的预测误差主导当前决策,导致短视的响应或数值病态的优化问题。经验上 Np 取过程整定时间(阶跃响应到达稳态 95% 所需的时间 / dt)的 80~100% 步数为宜。本工具中 Np=30 之所以不能显著改善响应,正是因为 Np=10 已覆盖整定时间的 80%。

第二个常见错误是认为「输入惩罚 λ=0 就能获得最快响应」。确实 λ=0 时只最小化输出误差,理论上最快,但初始输入 u(0) 会变得极大,实机执行器会饱和或寿命降低。更严重的是,λ=0 时控制器对模型误差与测量噪声非常敏感,输入会出现剧烈的「ringing」。实用中通常从 $K^2$(过程增益的平方)量级开始调 λ,边观察输入波形边调整。本工具中把 λ 调到 0,可见 u(0) 显著跳升。

最后,请注意本工具处理的是「内部模型与对象完全一致的理想情况」。现实对象总存在未建模的高阶动态、时变参数、扰动与测量噪声。本模拟器中所观察到的平滑跟踪与低超调依赖于这种理想性。实际实施必须额外加入(1)状态估计器(Kalman 滤波)重构状态,(2)积分扰动模型保证无静差跟踪,(3)约束 QP 求解器遵守安全限值。MPC 是强大的框架,但比 PID 需要更多「设计与调参的专业知识」,请勿忘记。