跳到正文
格致开物MATHWIKI

模型预测控制

模型预测控制(model predictive control,MPC)在每个采样时刻利用模型预测未来若干步,求解一个带约束的有限时域优化问题,只执行所求序列的第一步;得到新状态或观测后,再向前滚动求解。它把输入和状态限制显式放进规划,但预测准确、优化可行与闭环稳定仍是需要分别检查的性质。

预测序列与真正执行的输入

考虑无量纲离散积分器 xk+1=xk+uk,|uk|≤1。在当前状态 x,预测两步,最小化 J=u02+u12+x22,x1=x+u0,x2=x+u0+u1. 这是凸二次问题。交换 u0,u1 不改变目标和约束,且目标严格凸,所以唯一解必须满足 u0=u1=a。代回得到 J=2a2+(x+2a)2,导数为 12a+4x,故 a∗=clip⁡(−x/3,−1,1). 这里clip把数值限制在闭区间内。只执行第一步 uk=a∗,下一时刻重新用新的 xk+1 求解。[1]

取 x0=3,第一轮预测输入 (−1,−1)、预测状态 (3,2,1)。实际执行一个负一后到达二,第二轮重新预测的输入是 (−2/3,−2/3),实际下一状态变成 4/3,而非上一轮预测的一。没有扰动也会出现这种变化,因为每次都把新的终点放到两步以后。

两步预测第一轮给状态3,2,1,但滚动重算实际前几步为3,2,4/3,8/9
虚线是最初只规划两步的状态序列;实线是每一步重新规划得到的实际轨迹。只执行第一步是MPC的组成部分。

本例闭环稳定性的证明

当 |xk|≤3 时,控制未超限,xk+1=2xk/3。当 |xk|>3 时,控制与状态异号且幅值一,故 |xk+1|=|xk|−1,有限步内进入 [−3,3]。进入后几何衰减至零,说明这个特定模型和目标的闭环全局渐近稳定。

这不是任意MPC的普遍证明。若本例去掉终端项、又不增加阶段状态代价,目标只剩 u02+u12,最优输入恒为零,非零状态完全不动。更一般的设计可用终端成本、终端不变集合和可行序列移位论证递归可行性与稳定性;存在扰动时还需要相应鲁棒设计。

标量实例的Python计算

下面直接使用已证明的解析优化解,不是通用二次规划求解器。输入为有限初态和非负步数,不改输入,返回每步状态与控制;时间和返回数据空间均为 O(N)。

Python 3
import math

def scalar_mpc(x0, steps):
    if not math.isfinite(x0) or type(steps) is not int or steps < 0:
        raise ValueError("finite initial state and nonnegative integer steps required")
    x = float(x0)
    states, controls = [x], []
    for _ in range(steps):
        u = max(-1.0, min(1.0, -x / 3.0))
        x = x + u
        controls.append(u)
        states.append(x)
    return states, controls

print(scalar_mpc(3, 4))

输出状态约为 (3,2,1.333333,0.888889,0.592593),前四个控制为 (−1,−2/3,−4/9,−8/27)。变式。 从 x0=5 出发,先以满幅负一到四、三,再进入几何衰减阶段;零步输入返回仅含初态的状态表。

若加上状态约束、非线性动力学或更长预测时域,解析clip不再通用。实际部署还要将估计误差、采样周期与在线求解耗时纳入模型,不能仅凭离线规划可行就断言在线闭环安全。

参考资料

  1. ↑ James B. Rawlings、David Q. Mayne、Moritz M. Diehl,Model Predictive Control: Theory, Computation, and Design, Second Edition,Chapter 1,有限时域优化与滚动执行;稳定性条件见Chapter 2。