4. 线性MPC建模
线性模型预测控制(MPC)是工业过程控制与运动控制领域应用最广泛的一类先进控制算法。其核心思想是在每个采样时刻,基于系统的线性状态空间模型,对未来有限时域内的系统行为进行预测,并通过求解一个带约束的二次型优化问题,确定当前时刻的最优控制输入。本章将系统讲解线性MPC建模的三个核心环节:状态空间模型的建立与离散化、约束的分类与处理策略、以及二次型目标函数的工程化设计方法。这三者共同构成了线性MPC从理论到工程落地的完整闭环。
4.1 线性状态空间模型:从连续到离散的工程化构建
线性MPC的预测能力完全依赖于被控对象的数学模型。在工程实践中,我们通常从机理建模或系统辨识获得连续时间状态空间模型,再通过离散化处理适配数字控制器的采样周期。一个标准的连续线性时不变系统可表示为:
dx/dt = A_c·x(t) + B_c·u(t)
y(t) = C·x(t) + D·u(t)
其中,x∈Rⁿ为状态向量,u∈Rᵐ为控制输入,y∈Rᵖ为被控输出。A_c为系统矩阵,B_c为输入矩阵,C为输出矩阵,D为前馈矩阵(通常为零矩阵)。在MPC中,我们更关心离散时间模型,因为优化问题在每个采样周期k上求解。采用零阶保持器(ZOH)离散化方法,得到:
x(k+1) = A·x(k) + B·u(k)
y(k) = C·x(k) + D·u(k)
其中,A = e^(A_c·Ts),B = ∫₀^Ts e^(A_c·τ)·B_c dτ,Ts为采样周期。实际工程中,我们常使用MATLAB的c2d函数或Python的control库完成这一转换。值得注意的是,采样周期的选择直接影响离散模型的精度:Ts过大会丢失系统高频动态,Ts过小则增加计算负担并可能导致数值病态。
A_aug = [A, 0; C·A, I]
B_aug = [B; C·B]
这种增广方式使得MPC天然具备积分作用,能够消除模型失配和常值扰动带来的稳态偏差。
4.2 约束处理:从物理限制到优化可行域
约束是MPC区别于LQR等无约束控制方法的核心特征。工程中的约束主要来源于执行器物理极限、安全操作边界以及产品质量要求。按照约束对象的不同,可分为三类:
| 约束类型 | 数学表达 | 典型工程来源 | 处理难度 |
|---|---|---|---|
| 控制量幅值约束 | u_min ≤ u(k+i) ≤ u_max | 阀门开度限位、电机电流限幅 | 简单,直接作为硬约束 |
| 控制增量约束 | Δu_min ≤ Δu(k+i) ≤ Δu_max | 执行器速率限制、液压系统流量 | 中等,需引入增量状态 |
| 输出约束 | y_min ≤ y(k+i) ≤ y_max | 温度上限、压力安全边界、产品规格 | 复杂,需软约束处理 |
在优化求解时,硬约束直接纳入QP问题的线性不等式组中。然而,输出约束往往因模型不确定性或外部扰动而不可行,此时必须引入松弛变量ε,将硬约束转化为软约束:
y_min - ε ≤ y(k+i) ≤ y_max + ε, ε ≥ 0
松弛变量ε在目标函数中以惩罚项形式出现(通常为ε²的加权),其权重系数需要仔细整定:权重过小会导致约束被随意违反,权重过大则可能引起可行域过窄、控制动作剧烈。工程经验表明,输出约束的松弛权重通常设为输出权重Q的10~100倍。
4.3 二次型目标函数设计:权重矩阵的工程整定
线性MPC的目标函数通常采用二次型形式,其标准表达式为:
J = Σ_{i=1}^{Np} ‖y(k+i|k) - y_ref(k+i)‖²_Q
+ Σ_{i=0}^{Nc-1} ‖Δu(k+i|k)‖²_R
+ ρ·ε²
其中,Np为预测时域,Nc为控制时域(通常Nc ≤ Np),Q为输出误差权重矩阵(半正定),R为控制增量权重矩阵(正定),ρ为松弛变量惩罚系数。目标函数的设计本质上是控制性能的权衡:Q越大,系统跟踪参考值越积极,但可能引起控制动作过大;R越大,控制动作越平缓,但响应变慢。
权重矩阵的整定方法可分为三类:
- 经验试凑法:先令R=I,逐步增大Q直到响应满足要求;再微调R改善控制动作的平滑性。适用于单输入单输出(SISO)系统。
- Bryson规则:根据各变量的最大允许偏差确定权重。例如,若输出y₁的最大允许偏差为0.5,则Q₁₁ = 1/(0.5)² = 4。该方法为多输入多输出(MIMO)系统提供了合理的初始值。
- 优化整定法:将权重作为优化变量,以闭环性能指标(如IAE、超调量、调节时间)为目标,使用遗传算法或贝叶斯优化自动搜索最优权重组合。适用于高维MIMO系统。
4.4 案例拆解:双容液位系统的线性MPC设计
以典型双容液位系统为例,该系统由两个串联的水箱组成,控制目标是通过调节进水阀开度u,使第二个水箱的液位y跟踪设定值。系统状态方程为:
dx₁/dt = (u - k₁·√x₁)/A₁
dx₂/dt = (k₁·√x₁ - k₂·√x₂)/A₂
y = x₂
其中,A₁=A₂=0.5m²,k₁=k₂=0.1m²/s。在稳态工作点(u₀=0.2,x₁₀=x₂₀=0.4m)附近线性化,采样周期Ts=2s,得到离散状态空间模型:
A = [0.982, 0; 0.018, 0.982]
B = [0.036; 0.0003]
C = [0, 1]
设计MPC参数:Np=20,Nc=5,Q=10,R=0.5,控制量约束u∈[0, 0.5],控制增量约束|Δu|≤0.05,液位约束y∈[0.2, 0.6]m。在仿真中,设定值从0.4m阶跃至0.5m,并加入幅值为0.02的测量噪声。
实施步骤:
- 在MATLAB中建立离散状态空间模型,使用
ss(A,B,C,D,Ts)定义系统对象。 - 调用
mpcobj = mpc(sys, Ts)创建MPC控制器,设置预测时域和控制时域。 - 通过
setconstraint函数设置输入、输出约束。 - 使用
mpcobj.Weights.OutputVariables = 10和mpcobj.Weights.ManipulatedVariablesRate = 0.5设置权重。 - 运行闭环仿真,观察液位跟踪效果与控制阀动作。
结果对比:与无约束LQR控制器相比,MPC在液位阶跃响应中无超调,调节时间约15s,而LQR超调量达12%,调节时间22s。更重要的是,当设定值从0.5m阶跃至0.55m时,LQR因控制量饱和出现积分饱和现象,液位振荡;而MPC通过约束预测,提前减小控制增量,液位平稳过渡至新稳态。
4.5 常见误区与总结复盘
在工程实践中,线性MPC建模常出现以下误区:
- 误区一:忽视模型失配的影响。线性模型在工况变化后精度下降,导致预测偏差。解决方法是引入扰动模型或在线辨识更新模型参数。
- 误区二:约束设置过于理想化。实际执行器存在死区、滞环等非线性特性,简单幅值约束无法完全描述。建议在约束中预留5%~10%的安全裕量。
- 误区三:权重矩阵盲目取对角阵。当输出变量之间存在耦合时,非对角权重可改善多变量协调性能,但整定难度显著增加。
- 误区四:预测时域Np选择不当。Np过短无法捕捉系统动态,过长则计算量增大且对模型误差更敏感。一般建议Np覆盖系统上升时间的1.5~2倍。
总结而言,线性MPC建模是一个“模型-约束-目标”三位一体的系统工程。状态空间模型提供预测基础,约束处理保证解的可行性,二次型目标函数定义控制品质。三者相互制约:模型越精确,约束可越紧,目标函数可越激进;反之,模型不确定性大时,应放宽约束并增加R权重以换取鲁棒性。掌握这三者的平衡艺术,是线性MPC从仿真走向现场的关键能力。