机器人中的数值优化(十三)——QP二次规划

   本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例



   二十、低维度严格凸的QP二次规划

   1、低维度严格凸的QP二次规划数学描述

   低维度严格凸二次规划,其数学描述如下式所示,其中 M Q M_Q MQ是严格正定的对称矩阵,目标函数是严格凸函数,维度n是低维的

   min ⁡ x ∈ R n 1 2 x T M Q x + c Q T x , s.t.  A Q x ≤ b Q \operatorname*{min}_{x\in\mathbb{R}^{n}}\frac{1}{2}x^{\mathrm{T}}M_{\mathcal{Q}}x+c_{\mathcal{Q}}^{\mathrm{T}}x\text{, s.t. }A_{\mathcal{Q}}x\leq b_{\mathcal{Q}} xRnmin21xTMQx+cQTx, s.t. AQxbQ

   M Q M_Q MQ是严格正定的,因此可以对其进行Cholesky分解,Cholesky 分解是把一个对称正定的矩阵表示成一个下三角矩阵L和其转置的乘积的分解。它要求矩阵的所有特征值必须大于零,故分解的下三角的对角元也是大于零的。

   M Q = L Q L Q T M_{\cal Q}=L_{\cal Q}L_{\cal Q}^{\mathrm{T}} MQ=LQLQT

   这个QP问题等价于关于y的最小二范数问题:

   y = L Q T x + L Q − 1 c Q o r x = L Q − T y − ( L Q L Q T ) − 1 c Q y=L_{\cal Q}^{\mathrm T}x+L_{\cal Q}^{-1}c_{\cal Q}\quad\mathrm{or}\quad x=L_{\cal Q}^{-\mathrm T}y-\left(L_{\cal Q}L_{\cal Q}^{\mathrm T}\right)^{-1}c_{\cal Q} y=LQTx+LQ1cQorx=LQTy(LQLQT)1cQ

   我们可以把上面x关于y的表达式代入到目标函数中,整理后得到等价的表达式如下所示:

   min ⁡ y ∈ R n 1 2 y T y , s . t . E y ≤ f \min_{y\in\mathbb{R}^n}\frac12y^\mathrm{T}y,\mathrm{~s.t.~}Ey\leq f yRnmin21yTy, s.t. Eyf

   其中 E = A Q L Q − T , f = A Q ( L Q L Q T ) − 1 c Q + b Q E=A_{\mathcal{Q}}L_{\mathcal{Q}}^{-\mathrm{T}},f=A_{\mathcal{Q}}\big(L_{\mathcal{Q}}L_{\mathcal{Q}}^{\mathrm{T}}\big)^{-1}c_{\mathcal{Q}}+b_{\mathcal{Q}} E=AQLQT,f=AQ(LQLQT)1cQ+bQ

   对上述表达式求解得到最优的y后(在多面体中找一个范数最小的点,也即离原点最近的点),再将得到的y代入到上面x关于y的表达式,即可得到最优的x。

   线性不等式约束 E y ≤ f Ey\leq f Eyf构成了如下图所示的可行域,在该可行域内找一个使得下式最小的解,即y的二范数的平方的最小的解,也就是可行域中离原点最近的点。

   min ⁡ y ∈ R n 1 2 y T y = 1 2 ∣ ∣ y ∣ ∣ 2 2 \min_{y\in\mathbb{R}^n}\frac12y^\mathrm{T}y=\frac12{||y||_2}^2 yRnmin21yTy=21∣∣y22

在这里插入图片描述


   2、一维的QP二次规划

   与之前介绍的LP线性规划类似,一维情况下的数学描述及可行域的计算如下图所示,所不同的是,确定了可行域后,QP更容易得到最优解,只需要找到可行域中距离原点最近的点即可,若原点位于可行域左侧,则可行域左端点即为最优解,同理,若原点位于可行域右侧,则可行域右端点即为最优解,若原点位于可行域内部,则原点即为最优解。

在这里插入图片描述

   3、二维的QP二次规划

   与之前介绍的LP线性规划类似,二维情况下的解决思路依然是,在加入新的约束后,若之前的最优解依然在可行域中,则最优解不变,若之前的最优解已经不在可行域中了,则需要将之前的约束边界投影到当前新加入的约束边界上,转化得到一维的可行域,再在这个一维的可行域上寻找新的最优解,与LP不同的是,得到一维的可行域后,只需要将原点也投影到新加入的约束边界上,然后找到一维可行域中与原点的投影点距离最近的点即可

在这里插入图片描述

在这里插入图片描述


   4、更一般的d维QP二次规划

   与前文介绍的d维的LP线性规划的主要思想类似,d维的二次规划在当前最优解不满足新加入的约束时,也将其转换成d-1维的二次规划,这跟上面2维二次规划时转换成1维二次规划的思想是相同的,这种思想有点像递归的思想。

在这里插入图片描述

   上图中给出的伪代码中,输入参数H即不等式约束 a T y < = b a^\mathrm{T}y<=b aTy<=b,也即一系列半空间,如果此时H的维度是一维的,则直接采用上文中介绍的一维情况的解决方法求解,若此时c不是一维的,则初始化一个空集 I I I,可以提前用Fisher-Yates算法对H的序列进行打乱,打乱后进行for循环时,每次依次从H中取一个h,然后判断:

   情况1:若当前最优解属于h,则当前最优解满足约束h,不需要计算新的最优解,直接将h添加到集合 I I I中,继续进行下一轮for循环,处理下一个约束h

   情况2:若当前的最优解不属于h,则需要计算一个新的最优解x,将已经加入到集合 I I I中的约束投影到约束h的边界上,得到低一个维度的H’,将原点也投影到h上,得到低一个维度的原点v,M是h的一个正交基,然后将低一个维度的H’作为参数递归调用LowDimMinNorm()函数本身进行降维处理,直至降为1维情况。然后就可以得到新的y’,运用关系式 y ← M y ′ + v y\leftarrow My^{\prime}+v yMy+v得到新的最优解y,此时约束h已经满足,将其添加到集合 I I I中,本轮循环结束,继续进行下一轮for循环,处理下一个约束h。

   for循环结束后,即可得到满足所有约束hi的最优解y,然后再带入到x关于y的表达式,得到满足所有约束的最优解x。


在这里插入图片描述

   在前文介绍的LP线性规划中,把d维的问题转换成d-1维的问题,并逐步转换为1维问题是通过高斯消元法完成的,接下来介绍在QP二次规划中,如何把高维问题转换成低维问题。

   在上图中的例子中,之前的约束构成的空间如绿色区域所示,新加入的约束h如图中灰色区域所示,新的最优解 y ∗ y^* y必然位于约束h所确定的平面上且位于之前的约束构成的区域的内部,原点o在约束h所确定的平面上的投影点为v,由勾股定理可得他们满足以下表达式

   ∥ y ∗ − o ∥ 2 = ∥ y ∗ − v ∥ 2 + ∥ v − o ∥ 2 \|y^*-o\|^2= \|y^*-v\|^2+\|v-o\|^2 yo2=yv2+vo2

   假设,我们已知约束h所确定的平面中以v为原点的一组标准正交基M,然后,约束h所确定的灰色平面中所有点均可表示为该组标准正交基的坐标,因此 y ∗ y^* y满足如下表达式,其中 y 1 ′ y_1^{\prime} y1 y 2 ′ y_2^{\prime} y2 y ∗ − v y^*-v yv在标准正交基下的坐标:

   y ∗ − v = y 1 ′ M 1 + y 2 ′ M 2 = M y ′ y^*-v=y_1^{\prime}M_1+y_2^{\prime}M_2=My^{\prime} yv=y1M1+y2M2=My

   将上式代入到 ∥ y ∗ − o ∥ 2 = ∥ y ∗ − v ∥ 2 + ∥ v − o ∥ 2 \|y^*-o\|^2= \|y^*-v\|^2+\|v-o\|^2 yo2=yv2+vo2中可得以下表达式(因为M是标准正交基,所以 M T M = I M^TM=I MTM=I所以求范数后可以约去 )

   ∥ M y ′ ∥ 2 + ∥ v − o ∥ 2 = ∥ y ′ ∥ 2 + ∥ v − o ∥ 2 = ∥ y ∗ ∥ 2 \|My'\|^2+\|v-o\|^2=\|y'\|^2+\|v-o\|^2=\|y^*\|^2 My2+vo2=y2+vo2=y2

   因为,v-o是常量,所以求最小的y*可以转换为求最小的y’,把一个线性等式约束上的最小范数问题转化为一个无约束的最小范数问题。

   接下来看一下,上面提到的点v和标准正交基M如何求,约束h= g T y = f g^Ty=f gTy=f,可知当 y = f g g T g y=\frac{\color{red}{fg}}{\color{red}{g^Tg}} y=gTgfg必然满足该约束,所以v可取为: v = f g g T g v=\frac{\color{red}{fg}}{\color{red}{g^Tg}} v=gTgfg

在这里插入图片描述

   g是h约束所确定平面的法向量,那么平面的标准正交基均垂直于g,我们可以先构造下图中绿色的这样一组正交基,其某一个维度的模长为||g||,然后再通过旋转把模长为||g||的那个基变得跟g同方向,其他的绿色基,自然也就变成了我们想要的图中黄色的基M。其相关数学表达式如下所示:

   u = g − ∥ g ∥ e i u=g-\|g\|e_i u=ggei

   H = I d − 2 u u T u T u H=I_d-\frac{2uu^\mathrm{T}}{u^\mathrm{T}u} H=IduTu2uuT

   先根据g和ei计算出u,再代入上式计算出H(注意这里的H不是约束的意思),然后把H转置一下,得到 H T H^T HT后去掉第i列,就得到我们想要的M了,M中的d-1个列向量是由H中的d-1个行向量构成的

在这里插入图片描述


   参考资料:

   1、数值最优化方法(高立 编著)

   2、机器人中的数值优化


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

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

相关文章

WebSocket 协议及其使用案例

文章目录 前言一、初识 WebSocket 协议1.1 什么是 WebSocket 协议1.2 WebSocket 与 HTTP 的关系1.3 WebSocket 握手的过程1.4 WebSocket 解决了什么问题 二、WebSocket 数据帧格式2.1 WebSocket 数据帧格式图示2.2 各字段的详细说明 三、SpringBoot 项目中引入 WebSocket3.1 创…

蓝桥杯打卡Day2

文章目录 糖果分享游戏玛雅人的密码 一、糖果分享游戏IO链接 本题思路:本题是一道模拟题&#xff0c;最终需要每个人得到相同的糖果&#xff0c;那么此时我们开辟一个数组用来保存每个人分一半的结果&#xff0c;然后每个人都需要从左边拿到对方糖果&#xff0c;那么左边就是…

C#面试十问

1&#xff1a;C#中变量类型分为哪两种&#xff1f;它们的区别是什么&#xff1f;2&#xff1a;Class和Struct的区别&#xff1f;3&#xff1a;C#中类的修饰符和类成员的修饰符有哪些&#xff1f;4&#xff1a;面向对象的三个特征&#xff08;特点&#xff09;是什么&#xff1f…

js获得相对路径文件,并上传到服务器

如何通过js获得相对路径文件 已知一个相对路径文件&#xff0c;如何使用js将该文件读取为File格式&#xff0c;最后上传到服务器中呢。 1.最简单的解决方案——fetch 代码 import ./index.scss// js通过相对路径获取文件 function FetchGetLocalFile() {const fetchLocalFile …

centos7升级openssh版本

linux升级openssh版本&#xff0c;升级到8.6p1 小白教程&#xff0c;一看就会&#xff0c;一做就成。 1.下载rpm包 2.编写一键安装脚本&#xff08;然后执行&#xff09; #把所有的rpm包&#xff0c;我都放到了/ydy目录&#xff0c;下面安装时&#xff0c;也指定了这个目录 #编…

mysql、MHA高可用配置即故障切换

MHA概述 一套优秀的MySQL高可用环境下故障切换和主从复制的软件 MHA的出现就是解决MySQL 单点的问题 MySQL故障过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换 MHA能在故障切换的过程中最大程度上保证数据的一致性以达到真正意义上的高可用 MHA的组成&#xff08;核…

助力网络管理的利器:企业办公网络中的VLAN划分策略

企业办公网络的性能和安全性对员工的高效工作和信息安全具有重要意义。在实现这一目标时&#xff0c;VLAN&#xff08;Virtual Local Area Network&#xff09;划分在网络设计中发挥着至关重要的作用。通过将办公网络划分为多个虚拟局域网&#xff0c;VLAN划分可以实现网络资源…

uniapp - 倒计时组件-优化循环时间倒计时

使用定时器的规避方法 为了避免定时器误差导致倒计时计算错误&#xff0c;可以采用一些规避方法&#xff0c;比如将倒计时被中断时的剩余时间记录下来&#xff0c;重新开启定时器时再将这个剩余时间加到新的计算中。同时&#xff0c;为了避免定时器延迟&#xff0c;可以在每次执…

记一次Nginx代理Mysql服务的经历

背景&#xff1a; 根据组长背景描述&#xff0c;具备以下前提 1. Mysql服务器为 某A云厂商的RDS SAAS服务&#xff0c;但是不开通外网服务 2. EC2 服务器一台&#xff0c;某A云厂商LaaS服务&#xff0c;也不开通外网 3.阿里云服务器一台&#xff0c;这台服务器有服务需要连…

5700A福禄克FLUKE 5700A多功能校准器

181/2461/8938Fluke 5700A/5720A 高精度多功能校准器 5700A: 世界级标准产品 通过不断的改进、提高&#xff0c;5700A已经演变为5700A系列II。这是福禄克公司生产的、经过大量测试证明、极为可靠的、高精度校准器。5700A已经在全世界的范围被看作是校准器的标准&#xff0c;具有…

用python开发一个炸金花小游戏

众所周知&#xfeff;扑克牌可谓是居家旅行、桌面交友的必备道具&#xff0c; 今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏&#xff0c;先来看一下基本的游戏规则。 炸&#xff08;诈&#xff09;金花又叫三张牌&#xff0c;是在全国广泛流传的一种民间多人纸牌游戏…

【算法与数据结构】106、LeetCode从中序与后序遍历序列构造二叉树

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;首先我们要知道后序遍历数组的最后一个元素必然是根节点&#xff0c;然后根据根节点在中序遍历数组中的…

postgres源码解析55 Brin Index--2(brinbuild流程)

上一篇讲解了brin index的基本概念以及页布局postgres源码解析54 Brin Index–1&#xff0c;后续会从源码角度对索引的构建、维护等方面进行深入讲解。 1 关键数据结构 2 brinbuild执行流程图 3 brinbuild 函数详解 1 首先调用brin_matepage_init初始化brin meta元数据页&…

【0904作业】QT 完成登陆界面跳转到聊天室+完成学生管理系统的查找和删除功能

一、完成登陆界面跳转到聊天室 1> 项目结构 2> 源码 ① .pro ②main #include "mywnd.h" #include"chatCli.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);MyWnd w;w.show();Form f;QObject::co…

Lite transformer

图片以及思想来源请参考论文 Lite Transformer with Long-Short Range Attention 瓶颈结构&#xff08;bottleneck&#xff09;是否真的有效 注意力机制被广泛应用在诸多领域&#xff0c;包括自然语言处理&#xff0c;图像处理和视频处理。它通过计算所有输入元素的点积来建模…

低代码平台:IVX 重新定义编程

目录 &#x1f36c;一、写在前面 &#x1f36c;二、低代码平台是什么 &#x1f36c;三、为什么程序员和技术管理者不太可能接受“低代码”平台&#xff1f; &#x1f36d;1、不安全&#xff08;锁定特性&#xff09; &#x1f36d;2、不信任 &#x1f36c;四、IVX低代码平台 &a…

《阿里巴巴 Java 开发手册》(一)命名风格

《阿里巴巴 Java 开发手册》 一、编程规约(一)命名风格(二)常量定义(三)代码格式 一、编程规约 (一)命名风格 (二)常量定义 (三)代码格式

LabVIEW开发感应电机在线匝间短路故障诊断系统

LabVIEW开发感应电机在线匝间短路故障诊断系统 工业中使用的超过85%的电动机是三相感应电动机。它们因其可靠性、设计便利性、高性能和过载能力而被广泛用于不同的应用&#xff0c;例如制造、加工、电力系统、运输等。无论它们的能力如何&#xff0c;它们都被认为是现代工业学…

Unity通过偏移UV播放序列帧动画

大家好&#xff0c;我是阿赵。   在Unity引擎里面用shader播放序列图&#xff0c;估计很多人都有用到了&#xff0c;我自己而已写过好几个版本。这里大概介绍一下。 一、原理 先说目的&#xff0c;我现在有一张这样的图片&#xff1a; 这张图片上面&#xff0c;有9个格子&a…

使用errors.Wrapf()代替log.Error()

介绍不同语言的错误处理机制: Error handling patterns[1] Musings about error handling mechanisms in programming languages[2] 项目中 main调func1&#xff0c;func1调取func2... 这样就会出现很多的 if err ! nil { log.Printf()} , 在Kibana上查看时会搜到多条日志, 需要…