优化|高性能模块预测控制求解器

news2024/12/26 11:08:11

本文介绍的是另外一种针对模块控制MPC问题的一种高效求解方法。High-Performance Small-Scale Solvers for Linear Model Predictive Control,Gianluca Frison, Hans Henrik Brandenborg Sørensen, Bernd Dammann, John Bagterp Jørgensen [1]。本文讲了HPIPM的前身,HPMPC, 其实也就是HPIPM中牺牲鲁棒性的高速求解选项。核心是采用了动态规划法推导出riccati方程的形式,不过迭代速度比riccati更快。

首先有两个相似的工作,一个是CVXGEN[2]。核心思路是“. It employs a predictor-corrector Interior-Point (IP) method, and a sparse LDL factorization for the solution of the KKT system at each iteration of the IP method”,核心是采用LDL分解处理kkt矩阵。另一个方案是FORCES[3], 核心思路是:“It employs a predictor-corrector IP method, and a tailored solver for the KKT system, based on a block Cholesky factorization of the Schur complement of the KKT matrix.”处理kkt矩阵的思路稍有不同,采用了schur补kkt, 然后cholesky分解。这个思路其实在fast MPC里面也存在[4]。

这两者对比时,前面CVXGEN的问题在于:“The main disadvantages are that instruction cache is not exploited (since each instruction is executed only once), and that the code size grows with the cube of the matrices size, becoming quickly intractable.”问题维度上去就不行了。后者FROCES: “The main advantage of this approach is that the performance scales much better with the problem size. The main disadvantage is that a triple-loop based approach can attain only a small fraction of the peak performance of the processor.” 就还不错。

而本文中的原文描述是:

“The proposed algorithm for the solution of the KKT system of MPC problems is similar to the one presented in [5], with the difference that it moves the integration process one step further: the factorization and the backward recursion of the solution are fused. This allows us to reduce the number of function calls to linear-algebra routines to 3 in the factorization and 3 in the solution, for each iteration of the Riccati-like recursion.”

文章[5]也是一个反向riccati的方法。对比[5]来说,本文的核心优势就是将factorization和backward recursion结合在一起,后面可以看到,推导的结果类似riccati, 但没有显式算Riccati的P。然后这里也说了在他的Riccati-like recursion,能推出Riccati的结果,但是过程有点不一样。

线性MPC问题:

本文中想要解决的是经典的线性MPC问题:

其中 n ∈ { 0 , 1 , … , N − 1 } n \in \{0,1,\dots,N-1\} n{0,1,,N1}。求解MPC问题的核心思路还是动态规划,利用动态规划的思路去做推导。

在n+1步的最优stage cost为:

状态转移方程:

把状态转移方程(2)放进(1):

如果 P n + 1 \mathcal{P}_{n+1} Pn+1是个正定矩阵,那我们可以对其进行Cholesky分解,

最优的stage cost V n + 1 ∗ ( x n , u n ) V_{n+1}^*(x_n,u_n) Vn+1(xn,un)重写为:

根据动态规划的思路,我们倒退回前一个stage cost V n ( x n , u n ) V_n(x_n,u_n) Vn(xn,un),可以通过bellman公式写成:

把二次型cost中间那一项单独列出来,定义成 M n \mathcal{M}_n Mn,再来做一次Cholesky分解:

有了(5)之后,stage cost V n ( x n , u n ) V_n(x_n,u_n) Vn(xn,un)可以重新表达成如下公式:

假设 x n x_n xn已知,那么对于上述stage cost V n ( x n , u n ) V_n(x_n,u_n) Vn(xn,un)求导可以得到最优控制表达:

带回 V n ( x n , u n ) V_n(x_n,u_n) Vn(xn,un)可以得到基于状态 x n x_n xn的最优value function V n ∗ ( x n ) V_n^*(x_n) Vn(xn):

接下来还要继续根据动态规划的思路迭代stage cost V n − 1 ( x n − 1 , u n − 1 ) V_{n-1}(x_{n-1},u_{n-1}) Vn1(xn1,un1)直到 t = 0 t=0 t=0,同时可以看到在 t = N − 1 t=N-1 t=N1这里的 V n ∗ ( x n ) V_n^*(x_n) Vn(xn)在下一次迭代 V n − 1 ( x n − 1 , u n − 1 ) V_{n-1}(x_{n-1},u_{n-1}) Vn1(xn1,un1)中就可以直接使用了,非常方便,整个算法流程伪代码为:

注意到riccati就是:

看得出和上面的u控制量的表达就是一回事。但是这里的做法我们没有显式算P,因为不需要,原文说了:“However, the procedure to compute u n u_n unas in (4) is more efficient from a computational point of view. Also notice that the recursion matrix Pn of the Riccati recursion is never computed explicitly in the above solution procedure.”这个(4)就是

总结来说,对于每一个内点法循环,通过合理的前向迭代,本文将一次KKT矩阵分解和计算拆解成对于MPC问题中单个horizon问题的矩阵分解和计算(从 T T T时刻一直倒退计算得到 u N − 1 , … , u 0 u_{N-1}, \dots, u_0 uN1,,u0)。

一般线性MPC问题的求解

可以看到,如果只有系统的线性等式约束,那么只需要解一次线性方程组就可得到最优解了,解释同经典的线性约束下的QP问题,当我们引入等式约束的对偶变量 λ \lambda λ,则根据QP问题的一阶最优条件,等价于求解如下线性系统:

现在考虑具有不等式约束的MPC问题(MPC问题的不等式约束一般是每一个horizon内部的约束):

那么我们需要使用内点法不断迭代,求解KKT系统

这其实就是和只有线性等式约束MPC问题的KKT系统具有同样的结构,那就可以利用上面的动态规划思路推导的结果去求解这个方程组啦。文章结尾给出了HPMPC算法的数值计算结果,单位都是ms级别:

参考文献

[1] G. Frison, H. H. B. Sørensen, B. Dammann and J. B. Jørgensen, “High-performance small-scale solvers for linear Model Predictive Control,” 2014 European Control Conference (ECC), Strasbourg, France, 2014, pp. 128-133, doi: 10.1109/ECC.2014.6862490.

[2] https://cvxgen.com/docs/index.html

[3] Zanelli, A., Domahidi, A., Jerez, J., & Morari, M. (2017). FORCES NLP: an efficient implementation of interior-point methods for multistage nonlinear nonconvex programs. International Journal of Control, 93(1), 13–29. https://doi.org/10.1080/00207179.2017.1316017

[4] Y. Wang and S. Boyd, “Fast Model Predictive Control Using Online Optimization,” in IEEE Transactions on Control Systems Technology, vol. 18, no. 2, pp. 267-278, March 2010, doi: 10.1109/TCST.2009.2017934.

[5] G. Frison and J. B. Jørgensen, “Efficient implementation of the Riccati recursion for solving linear-quadratic control problems,” 2013 IEEE International Conference on Control Applications (CCA), Hyderabad, India, 2013, pp. 1117-1122, doi: 10.1109/CCA.2013.6662901.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1965231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Phalco安装过程以及踩的一些坑(mac环境)

一 背景 公司用Phalcon框架好长时间了,中途发现了一些Phalcon使用的上的问题,于是想在本地搭建一套Phalcon的环境,方便排查问题使用。 二 Mac系统下的安装 看了很多说法,最终发现还是官网给力,安装Phalcon使用下列命令即可(前提条件是PHP已安装好,工具pecl也安装好了):…

2024-07-31 Android studio gradle、sdk、ndk 等路径记录

一、gradle的下载路径:C:\Users\user\.gradle\wrapper\dists 二、NDK下载路径C:\Users\user\AppData\Local\Android\Sdk\ndk 三、SDK下载路径:C:\Users\user\AppData\Local\Android\Sdk\platforms

数据结构的基本概念与算法

数据结构的基本概念与算法 什么是数据? 数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合;总结来说 -> 数据就是计算机程序加工的原料; 数据元素、数据项&#xf…

Python+Vue3+onlyoffice开发私有化文档管理系统实战笔记 20240731

之前进度 表字段设计如下: const columns [{title: 名称,key: name,dataIndex: name,},{title: 类型,key: category,dataIndex: category,},{title: 作者,key: author,dataIndex: author,},{title: 路径,key: path,dataIndex: path,},{title: 最近访问时间,key: l…

【Spark计算引擎----上篇:(全网最详细)带你从零基础通往精通之路】

前言: 💞💞大家好,我是书生♡,本阶段和大家一起分享和探索大数据技术–spark计算引擎,本篇文章主要讲述了:spark的概念,spark的起源,Spark的计算框架,Spark组…

Python爬虫入门03:用Urllib假装我们是浏览器

文章目录 引言Urllib库简介Request模块详解Error模块与异常处理Parse模块与URL解析Robotparser模块 模拟浏览器请求使用Request方法添加请求头信息代码示例1. 设置请求URL和请求头2. 定义请求参数并转换为适当的格式3. 使用Request方法封装请求4. 发送请求并获取响应 常用使用方…

项目实战_表白墙(升级版)

你能学到什么 表白墙(升级版)Mybatis的一些简单应用 正文 前⾯的案例中, 我们写了表⽩墙, 但是⼀旦服务器重启, 数据就会丢失. 要想数据不丢失, 需要把数据存储在数据库中,接下来咱们借助MyBatis来实现数据库的操作。 数据准备 如果我们…

Linux-用户和用户组管理

用户管理 创建 useradd USERNAME(名字) [rootlocalhost ~]# useradd bao 创建指令 怎么判断创建成功与否(是否报错) 观察是否报错可行但用变量的方式判断会更加直观 [rootlocalhost ~]# echo $? 变量 什么是变量&…

Vant2框架tab切换list不加载问题(切换后onload不继续触发)

遇到的问题: van-list 加载,页面上有个切换的 van-tab,实现切换不同的类型,加载不同的list的功能。 Vant2 的 List 列表 就有个 bug,当切换 tab 的时候,它的 onload 没有自动触发。 然而在当前标签页&#…

AMD第二季度财报:数据中心产品销售激增,接近总收入一半

#### 财报亮点 7月30日,AMD公布了截至6月29日的第二季度财务业绩,利润超过了华尔街的预期。根据TechNews的报道,最值得注意的是,AMD现在近一半的销售额来自于数据中心产品,而非传统的PC芯片、游戏主机或是工业与汽车嵌…

IDEA打开项目显示在顶端

问题 IDEA打开项目显示在顶端,更改到左侧 解决方案 删除项目中.idea文件,重新打开

【pikachu靶场】跨站脚本攻击详细教程Cross-Site Scripting(xss)

文章目录 XSS(跨站脚本)概述 1.反射型xss(get) 2.反射型xss(post) 3.存储型XSS 4.DOM型xss 5.DOM型XSS-X 6.xss之盲打 7.xss之过滤 8.xss之htmlspecialchars 9.xss之href输出 10.xss之js输出 XSS…

并发编程相关面试题-Synchronized

重量级锁实现的原理 1、synchronized是JVM内置锁,基于Monitor机制实现,依赖底层操作系统的互斥锁Mutex(互斥量),它是一个重量级锁、 2、synchronized同步方法是通过方法中的access_flags中设置ACC_SYNCHRONIZED标志来…

换根dp学习总结3

我也不想搞这么多,但是这东西真的太难了,因为我还是个蒟蒻。算了蒟蒻继续写这次的总结了 寻找全图最远路径问题——Computer ——题目来源于hdu2196 题意:题目就是说会输入多组数据,每组数据给你一个n,表示结点的总数…

怎么评价程序员40岁了竟然还在撸代码?

怎么评价外卖员40岁了竟然还在送外卖? 怎么评价滴滴司机40岁了竟然还在跑滴滴? 怎么评价老师40岁了竟然还在教书?难道程序员的本职工作不是敲代码吗?无论你是管理层还是螺丝钉,工业环境下怎么可能一行代码都不敲呢&…

RocketMQ Dashboard安装

RocketMQ Dashboard 是一个基于 Web 的管理工具,用于监控和管理 RocketMQ 集群。它提供了一个用户友好的界面,使管理员能够轻松地查看和操作 RocketMQ 系统中的各种组件和状态。 主要功能包括: 集群管理: 监控和管理 NameServer 和 Broker …

web框架:django基础(二)

文章目录 django基础(二)1.回顾2.今日概要3.路由系统3.1 传统的路由3.2 正则表达式路由3.3 路由分发小结 3.4 name3.5 namespaceapp_namenamespace的多层嵌套 3.4 最后的 / 如何解决?3.5 当前匹配对象小结 4.视图4.1 文件or文件夹4.2 相对和绝…

《QDebug 2024年7月》

一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.Qt5 QML 在某些环境下,有些字体中文渲染有问题 如 Qt5.15 在部分安卓机上复制的复只有半截宽,半径的径字也不对,等等 用 Qt6.7 测试则正常,或者换成其他如小米、阿里巴巴…

Golang的TLS版本配置参数-排坑经历

一、背景 公司有个黑盒监控拨测组件,类似可以通过各种协议如HTTP、TCP、ICMP等等针对目标主机、目标IP、目标站点进行定时拨测,通过返回的状态码等信息来推断,目标业务系统/主机、站点是否存在异常,健康情况如何。 最近在配置一个…

一文搞懂机器学习!2024.6月最新!(附代码实现)

前言 机器学习入门精品文章 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文介绍机器学习的基础内容。 机器学习是人工智能的一个分支,它使计算机系统能够从数据中学习并做出决策或预测&am…