来源:James B. Rawlings、David Q. Mayne、Moritz M. Diehl,Model Predictive Control: Theory, Computation, and Design, 2nd Edition,Chapter 1,Section 1.2 Models and Modeling,教材第 1–10 页。
为什么 MPC 离不开模型
模型预测控制(Model Predictive Control, MPC)的基本流程可以压缩成:
当前状态 x(k)
↓
用动态模型预测未来
↓
在约束下优化未来输入序列
↓
只执行第一个控制量 u(k)
↓
下一时刻重新测量并重复
模型在其中有两种用途:
- 控制(regulation):从当前状态出发预测未来,选择最优控制输入。
- 状态估计(state estimation):把历史测量与模型协调起来,推断当前最可能的状态。
因此,MPC 不是仅靠当前误差直接产生控制量,而是先问:
如果现在施加这串控制输入,系统未来会怎样运动?
1.2.1 线性动态模型
一般连续时间非线性模型写成:
x˙=f(x,u,t),y=h(x,u,t),x(t0)=x0,
其中:
- x∈Rn:状态(state),描述系统内部动态所需的最小变量。
- u∈Rm:控制输入(input),控制器可以操纵的量。
- y∈Rp:输出(output),能够测量或关心的量。
- t:连续时间。
- x0:初始状态。
线性时变模型
最一般的连续时间线性状态空间模型为:
x˙=A(t)x+B(t)u,
y=C(t)x+D(t)u.
A,B,C,D 的意义为:
| 矩阵 | 形状 | 作用 |
|---|
| A | n×n | 状态自身如何演化 |
| B | n×m | 输入如何改变状态 |
| C | p×n | 如何从状态得到输出 |
| D | p×m | 输入对输出的直接作用 |
许多系统中 D=0,因为输入先改变内部状态,然后才反映到输出上。
线性时不变模型
如果矩阵不随时间变化:
x˙=Ax+Bu,y=Cx+Du.(1.1)
状态解为:
x(t)=eAtx0+∫0teA(t−τ)Bu(τ)dτ.(1.2)
这个公式由两部分组成:
- eAtx0:初始状态在没有新输入时产生的响应。
- 积分项:过去所有输入经过系统动态加权后,对当前状态的累计影响。
矩阵指数定义为:
eX=I+X+2!X2+3!X3+⋯.
矩阵 A 的特征值决定旧状态和旧输入的影响会随时间衰减、保持还是增长。
具体例子:一阶水箱模型中的 A、B、C 分别是什么?
假设水箱液位为 x(t),泵流量为 u(t),出流近似与液位成正比:
x˙=−0.2x+0.5u,y=x.于是:
A=[−0.2],B=[0.5],C=[1],D=[0].若 u(t)=0,则:
x(t)=e−0.2tx0,液位会自然衰减。若 u(t) 恒定,泵的历史输入通过卷积积分累积到当前液位中。
1.2.2 输入输出模型
如果不知道系统内部结构,只关心可操纵输入 u 与可测输出 y,可以隐藏状态,使用传递函数模型:
y(s)=G(s)u(s),
其中 s∈C 是 Laplace 变换变量,
y(s)=∫0∞e−sty(t)dt.
如果传递函数来自状态空间模型,并取零初始状态,则:
G(s)=C(sI−A)−1B+D.
两种描述的区别是:
| 状态空间模型 | 输入输出模型 |
|---|
| 显式保留内部状态 x | 隐藏状态 |
| 适合状态估计、约束和多变量 MPC | 适合系统辨识和频域分析 |
| 可以设置非零初始状态 | 传递函数推导通常假设零初始状态 |
MPC 需要从当前状态预测未来,因此本书主要使用状态空间模型,传递函数只作有限讨论。
1.2.3 分布参数模型
如果系统在空间上不均匀,仅用有限维状态向量可能不足,需要偏微分方程(PDE)。
例如化学组分 A 的质量守恒:
∂t∂cA+∇⋅(cAvA)−RA=0,
其中:
- cA:组分浓度。
- vA:速度场。
- RA:化学反应产生速率。
分布不一定是空间分布。粒径分布 f(r,t) 也可能由 PDE 描述,因为状态随粒径 r 和时间 t 同时变化。
实际 MPC 往往先通过有限差分、有限元或降阶模型,把 PDE 转换为高维有限状态模型,再进行数值预测和优化。
1.2.4 离散时间模型
数字控制器只在采样时刻工作,因此本书大量使用离散时间模型:
x(k+1)=Ax(k)+Bu(k),
y(k)=Cx(k)+Du(k),(1.3)
其中 k∈I≥0,实际时间为 t=kΔ,Δ 是采样周期。
本书常把下一时刻简写为:
x+=Ax+Bu.
递推展开可得:
x(k)=Akx0+j=0∑k−1Ak−j−1Bu(j).(1.4)
它是连续时间卷积积分的离散版本。
数值例子:由输入序列计算未来状态
设一维离散系统:
x(k+1)=0.8x(k)+0.5u(k),初始状态 x(0)=2,并施加:
u(0)=1,u(1)=−1.逐步递推:
x(1)=0.8×2+0.5×1=2.1,x(2)=0.8×2.1+0.5×(−1)=1.18.也可以直接使用式 (1.4):
x(2)=0.82×2+0.8×0.5×1+0.5×(−1)=1.18.MPC 就是用这种递推,把候选输入序列对应的未来状态全部预测出来。
连续模型如何离散化
对连续 LTI 模型 x˙=Acx+Bcu,如果采样周期内输入保持不变(zero-order hold),精确离散化为:
Ad=eAcΔ,
Bd=∫0ΔeAcτBcdτ.
这说明离散模型中的 A,B 会随采样周期改变,不能在改变图像或控制频率后继续盲用旧模型。
1.2.5 约束
显式处理约束是 MPC 相比普通 LQR 的核心优势之一。
输入约束
执行器总有物理边界,例如阀门开度、电压、力矩:
u≤u(k)≤u.
可写成统一线性不等式:
Eu(k)≤e,
其中:
E=[I−I],e=[u−u].
状态约束
安全、质量或可操作性要求可以写成:
Fx(k)≤f.
输入变化率约束与增广状态
若要限制:
Δ≤u(k)−u(k−1)≤Δ,
可把上一步输入加入状态:
x~(k)=[x(k)u(k−1)].
增广模型为:
x~+=A~[A000]x~+B~[BI]u.
这样“当前输入减去上一输入”又变成了当前状态和输入的线性约束。
硬约束与软约束
书中特别强调:
- 输入约束通常是执行器的物理极限,应作为 hard constraints。
- 状态或输出约束常是目标要求,受扰动影响时可能无法同时满足,更适合做 soft constraints。
引入松弛变量 ε(k)≥0:
Fx(k)≤f+ε(k).
再在代价函数中惩罚 ε。这样优化问题不会仅因状态约束暂时不可达而彻底无解。
数值例子:软约束如何避免不可行?
假设要求温度状态满足:
x≤100,但当前因扰动已经达到 x=103。硬约束在当前时刻无法满足,优化问题可能 infeasible。
改成:
x≤100+ε,ε≥0,此时至少可以选 ε=3。若代价中加入:
ρε2,并令 ρ 很大,控制器会尽快把温度拉回 100 以下,但不会因为一时违规而停止产生控制量。
离散执行器
开关、泵组或炉组可能只能取离散值:
ui(k)∈{0,1}.
这会把连续优化问题变成含整数变量的问题,通常比标准二次规划困难得多。本节只引入概念,后续章节再处理。
1.2.6 确定性与随机性
确定性模型给定 x,u 后会产生唯一下一状态。实际测量却包含波动,来源主要有:
- 过程扰动:未建模环境作用改变真实状态。
- 测量噪声:传感器读数偏离真实输出。
- 初始状态不确定性:当前状态只能估计。
线性随机模型写成:
x+=Ax+Bu+Gw,
y=Cx+Du+v,
其中:
- w:process disturbance,作用于状态演化。
- v:measurement noise,只污染测量。
- G:描述扰动如何进入各状态。
测量噪声和过程扰动不能混为一谈。前者意味着“读数不准”,后者意味着“系统真的被外界推离了预测轨迹”。两者在状态估计中扮演不同角色。
本节知识链
物理过程
↓ 建模
连续/离散状态空间模型
↓ 加入实际限制
输入、状态、变化率、整数约束
↓ 加入现实不确定性
过程扰动与测量噪声
↓
预测控制 + 状态估计
阅读后应能回答
- 为什么 MPC 比普通反馈控制更依赖动态模型?
- 状态、输入和输出分别是什么?
- 状态空间模型与传递函数模型有什么区别?
- 为什么数字 MPC 更常使用离散时间模型?
- 如何从输入序列预测 x(k)?
- 为什么要把 u(k−1) 加入增广状态?
- 为什么输入约束通常是硬约束,而状态约束常被软化?
- 过程扰动 w 与测量噪声 v 有何区别?