不用Matlab MPC工具箱怎么编写MPC?

论坛 期权论坛 期权     
蓝色风衣   2018-9-29 22:58   24952   3
MPC实现。用的状态空间模型,实在没人指导。希望老师能够指导,谢谢!
分享到 :
0 人收藏

3 个回复

倒序浏览
2#
MMMarvin  3级会员 | 2018-9-29 22:58:27 发帖IP地址来自
谢邀,抛砖引玉,代码写的太丑最近还没重构完我就先不拿出来了,大概写一下我的简易版手写MPC控制器是怎么做的,有哪里不对的地方还请前辈/看官们斧正。
感谢 @Kaixiang Wang 指出的问题,已经修改。
0:形式
MPC控制器是最优控制器的一种,它有一堆名字,最广泛的另一个名字是RHC。既然是最优控制器,它的标准形式就要有,1:目标函数,包括Lagrange(求和/积分项)项和Mayer项(Terminal cost项,一个只与
有关的函数)。2:约束。其中约束包括由系统特性决定的,动力学模型/微分方程等式约束,控制量/状态量之间的一些等式和不等式关系造成的约束。
1: 离散化
如果系统是线性的,就意味着微分方程可以写成
这样的形式,如果控制量是piecewise constant,那么系统就可以被精确地离散化成
, 其中
,h是时间差,
. 同时再把目标函数也写成求和形式,离散化就完成了。把所有的

打包进一个大的状态向量s,你就得到了关于s的一个等式约束。
非线性系统需要single shooting或者multiple shooting,我当时为了偷懒就直接写了multiple shooting的。multiple shooting 又名多重打靶法,就是用微分方程生成每个时刻的等式约束,要求是
,这里的这个函数其实就是ode积分,初值为
时间差为h。然后同样,把所有的

打包进一个大的状态向量s,你就得到了关于s的一个等式约束。
同理,目标函数中的Lagrange项可以被化成求和。mayer项保留,成一个关于
的函数。
总之,离散化完了之后就得到了一个离散的最优控制问题。也就是一个带约束的优化问题。下一步就是求解这个优化问题。
2:最优控制问题求解
带约束的优化问题有很多种求解的办法,尤其是如果你的目标函数是凸的,约束域是凸的,就可以用凸优化的方法。我所采用的是SQP序列二次规划。然后这里我没有手写求解器,我调用了一个qp求解器:qpOASES https://projects.coin-or.org/qpOASES 然后找大神要了这个求解器的julia的接口。把最优控制问题的参数传进这个求解器,然后去迭代这个求解器,也就是利用SQP方法求解了这个最优控制问题。这里有个小问题就是,如果是非线性系统,需要
函数的jacobian,我自己偷懒在手写的ode45里面直接顺便算了(当然,因为我的目标函数是最小化时间,并且直接用高斯牛顿法省略高阶项,就不用去算QP里面的那个海森矩阵了,这样顺便算了也就够用了),如果有AD自动微分器的话也可以调用那个计算。
这一部分的内容在任何最优控制的教科书里都有介绍。我自己看的是Prof. Moritz Diehl 的简明笔记Lecture Notes on Optimal Control and Estimation. 除此之外,Matlab中可以直接调用famicom 求解,或者任何一个你喜欢的求解器(比如MPT,Cplex,BARON)。
3: MPC闭环
根据刚才计算出的最优解s,可以得到最优控制序列u,然后取出第一个u,也就是
,连带第一个x,也就
塞进
进行运算。然后系统就运行到了
状态,接下来,让你的目标函数中Lagrange项的积分上界T,T=T+h,重新规划未来,再来一遍过程2。
4:稳定性分析
这个计算过程不保证稳定性,假定是全状态可观测,没有干扰,没有考虑观测量,也没有设置估计器。MPC如何处理这一些问题请参照 Model Predictive Control: Theory and Design, James B. Rawlings, David Q. Mayne Model Predictive Control: Theory and Design
BTW: Mayne2000年有篇文章讲的nominal MPC的稳定性问题:
Mayne, D. Q., et.al. . Constrained model predictive control: stability and optimality. Automatica, 36, 789–814
大概就是这样……
有空再更……
3#
张艾伦  3级会员 | 2018-9-29 22:58:29 发帖IP地址来自
我可以帮你解决这个问题。
因为这个问题我以前也遇到过,初次编写mpc程序却觉得无从下手。

初学者还是以模仿他人的程序作为起步,经过一定的练习就可以根据自身的需求,写自己的程序了。
给你推荐一本书,Model Predictive Control System Design and Implication Using Matlab. by Liuping Wang.
书里的有几个经典的预测控制程序,程序写的很简介,重要的是思路清晰、结构完整且程序非常简单易懂。程序简单易懂到什么地步呢,从申明变量开始一步一步教你写matlab,直到完成整个预测控制为止。
我当初就是靠仿写这本书的程序起步的,把它前几章里面的程序消化后,立足于它的结构和模块,马上就能写自己的程序了。
4#
刘叮当  2级吧友 | 2018-9-29 22:58:30 发帖IP地址来自
在m文件上把mpc算法写一遍就行了啊,私以为有2点稍微复杂一点。
1. 注意到每一步优化问题的cost和constraints其实是u序列的函数(tube-based mpc多了一个决策变量x0),因此在编程中需要把cost和constraints重新formulate;

2. 优化问题的求解器,非线性可以用fmincon函数(matlab自带),线性的可以用cvx(请自行百度),优化函数的接口在matlab使用help就能查到。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP