模型预测控制

最优控制理论处理的问题通常是找到一个满足容许控制的 u*,把它作用于系统(被控对象)ẋ(t)=f(x(t),u(t),t) 从而可以得到系统的状态轨迹 x(t),使得目标函数最优。对于轨迹跟踪问题,那目标函数就是使得这个轨迹在一定的时间范围[t0tf]内与我们期望的轨迹(目标)x*(t) 越近越好。最优控制问题更一般的表达如下:在被控对象符合动力学原理(状态方程)和状态约束

的条件下,求解控制函数 u(t) 以使得连续时间性能指标

最小。其中 t0是初始时刻,tf是终端时刻,E 是终端时刻代价,g 是运行时刻代价。例如,更具体的场景,对于时间最短问题(例如控制电流使得最短时间充电到 SOC100%),性能指标即:

对于最小燃料消耗问题(接下来本文中主要使用的例子,假设燃料消耗与控制量 u 成正比,并且 u∈[0 1]),性能指标变为:

最优控制的性能指标函数和约束函数都是泛函,因为他们的自变量 u(t) 本身也是个函数。于是,求解性能指标函数最优的问题是一个求泛函极值的问题,类比于函数极值通过求导来获得极值条件,泛函极值则通过变分法来获得极值条件。而基于变分的两大方法: 庞特里亚金极小值原理和动态规划(求解 Hamilton-Jacobi-Bellman 方程),则是最优控制问题求解的主要方法。对于简化的最优控制问题,例如被控对象为线性系统

性能指标是二次型的无限时域的连续时间泛函:

(其中第一项是对状态(例如追踪误差)的要求,第二项是对控制能量的要求,Q 和 R 是权重矩阵),优化区间考虑整个时间域 [t0=0 tf=∞](也就是 Linear-Quadratic Regulator (LQR)), 可以使用极小值原理或动态规划或 Ricatti 代数方程求得闭环形式的最优控制。例如,对一个车载倒立摆系统[1]:

其中系统输出是车辆位移 x 和倒立摆角度 θ,控制输出 u 是作用在车上的水平力。控制是标量,状态是 4 维

Q = [1,0,0,0;…

0,0,0,0;…

0,0,1,0;…

0,0,0,0];

R = 1;

[K,S,P] = lqr(sys,Q,R)

利用 lqr 函数就可以求得最优增益矩阵 K。但对于更一般的非线性系统,使用极小值原理或动态规划求解解析解几乎不可能,数值解计算复杂度较高,所以可以考虑一定的问题简化,仅考虑未来的一小段时间最优(而非全时间域“最优”),将最优控制问题转化未来几个时间步的在线数值优化问题,例如 MPC,可以大大降低“最优”控制计算的复杂度。

我们通过和人的行为进行类比来解释 MPC 的思想[2]:设想开车的场景,我们的目标是让车按一定的轨迹行驶,人的控制方式和模型预测控制器的工作方式很像,司机的大脑中可能有一些经验( 类似虚拟的动力学模型),于是他会利用这些经验(虚拟模型)在大脑中去预先“仿真”这个过程,可以预测假如他采取了某些动作(油门,刹车,转向等等)之后的一段时间内汽车会有多快或有多少转向,从而他会从这些可选的一系列动作中选择一个最能使汽车在未来一段时间内接近期望轨迹的控制动作作为当前时刻的行为,例如踩油门,刹车等等,并在每个时刻不断重复类似的思想,从而驱动车辆到期望的轨迹。

算法介绍

(图表1)

模型预测控制 (MPC) 是一种最优控制技术,在每个控制周期 tk, MPC 控制器获得系统(被控对象)当前的状态。接下来它利用基于系统当前状态和系统动态模型通过在有限时间上预测系统未来 p 步状态轨迹,并与目标轨迹构建代价函数和约束,进行一次开环优化问题(要优化的变量是作用在被控对象上的控制输入序列)求解,得到未来一段时间 [tk,tk+1,···,tk+p] 的控制输入序列[uk,uk+1,···,uk+p] 。当然对于求解得到的控制输入序列,控制器只将最近时刻 tk的控制uk作用于系统(被控对象)而忽略掉控制序列的其他值[uk+1,···,uk+p], 在下一个时刻tk+1,MPC 控制器会重复上述优化求解过程重新计算控制序输入列并只将第一个控制值作为当前时刻的控制量作用于系统,依次类推,重复上述过程进行下一时刻的求解。所以 MPC 在每个时刻都在线进行一个含约束的优化问题的求解(滚动优化,特殊情况除外)。接下来我们看一下这个优化问题是如何定义以及求解的。MPC 的优化问题 (更具体的二次规划,QP) 包含这几项主要内容[3]:

代价函数:用于度量控制器性能,目标是求它的最小值。

约束:目标解必须满足的条件,例如控制量(manipulated variables, MV)和被控对象状态输出的物理边界。

控制与决策:得到优化的控制量(MV)

代价函数

一个典型的代价函数由四部分组成,每一部分关注控制器性能的一个方面。

这里面的 zk就是 QP 问题的决策变量(控制变量)。其中每一项量化一个性能指标。

Jy(zk) 量化系统输出与目标轨迹的跟踪效果

Ju(zk) 用于量化控制输入与目标控制变量跟踪效果(在很多应用中,控制器还需要保证控制变量(MV)保持在某个目标附近,尤其在控制量数目远多于系统输出量数目的情况下)

JΔu(zk) 控制变量波动约束(多数应用场景下一般都希望控制变量有较小的变动或调整,而不希望较大的突变)。

例如对于常用的 Jy(zk),即量化图表1中黑色双箭头代表的区域。控制器的目标是将被控对象保持在指定的参考轨迹附近。MPC 控制器通过如下计算得到一个标量作为性能度量来实现目标轨迹跟踪:

其中,底标 i 是对 p 个预测步的循环,j 是对 ny个输出的循环。

k:当前控制周期

p:预测区间(Prediction Horizon)

ny:被控对象输出变量的数量

zk:QP 问题决策变量,也就是对应的时间步上的控制器输出序列,其中

yj(k+i|k):从 k 时刻开始的未来第 i 个(共 p 个)时间步长被控对象第 j 个(共 ny个)输出的预测值

rj(k+i|k):从时刻开始的未来第个(共个)时间步长被控对象第个(共个)输出的目标参考值

:未来第个时间步,被控对象第个(共个)输出的权重因子(无量纲)

约束

MPC 中最常见的约束就是边界约束,例如针对被控对象、控制变量(MV)、控制变量变化量的边界约束,如下:

yj,min(i),yj,max(i):从 k 时刻开始的未来第 i 个时间步长被控对象第 j 个(共 ny个)输出的下界和上界

uj,min(i),uj,max(i):从 k 时刻开始的未来第 i 个时间步长第 j 个(共 nu个)控制变量的下界和上界

Δuj,min(i),Δuj,max(i):从 k 时刻开始的未来第 i 个时间步长第 j 个(共 nu个)控制变量的下界和上界

预测与决策

每次滚动优化计算过程中,模型预测控制器可以获得整个预测区间 p 时间步上的参考轨迹 rj(k+i|k)。模型预测控制器中的“模型”包括被控对象模型、扰动模型和噪声模型,如图表2,控制器每次滚动优化计算过程中,使用这些模型加上可调(可优化)的控制变量 zk来预测被控对象的输出yj(k+i|k)。

(图表2)

上述预测过程可以通过简化的状态空间离散预测模型表示:

其中 v(k) 是可测干扰输入,d(k) 是不可测干扰输入白噪声。

我们详细描述一下在 k=0 时刻预测模型在预测区间 p 上的轨迹预测过程:对所有预测瞬时 i, 将 d(i) 设为0,可得,问题变成一个递归计算问题(从 k=1到 k=0)即可得到 y(i|0) 序列:

整理成矩阵形式:

其中(此处不详细列出这些矩阵表达式,可以根据上式递归自行推导)

组合各个元素得到优化问题定义

将上述的代价函数,约束,预测模型矩阵结合起来构建 MPC 的开环优化问题如下:

状态变量 x(k)∈Rnx,控制变量 u(k)∈Rnu,满足上述系统动力学方程以及时域约束,通过预测计算,求解如下最小化性能指标对应的优化变量zk

其中

即在预测区间 p 上的待优化的控制输入序列。

免费分享一些我整理的人工智能学习资料给大家,整理了很久,非常全面。包括一些人工智能基础入门视频+AI常用框架实战视频、图像识别、OpenCV、NLP、YOLO、机器学习、pytorch、计算机视觉、深度学习与神经网络等视频、课件源码、国内外知名精华资源、AI热门论文等。

下面是部分截图,加我免费领取

目录

一、人工智能免费视频课程和项目

二、人工智能必读书籍

三、人工智能论文合集

四、机器学习+计算机视觉基础算法教程

最后,我想说的是,自学人工智能并不是一件难事。只要我们有一个正确的学习方法和学习态度,并且坚持不懈地学习下去,就一定能够掌握这个领域的知识和技术。让我们一起抓住机遇,迎接未来!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以点击链接领取

二维码详情