机器人学中的数值优化(一)

Preliminaries

0 前言

在这里插入图片描述
最优解 x ∗ x^{*} x在满足约束的所有向量中具有最小值。

两个基本的假设:
(1)目标函数有下界
目标函数不能存在负无穷的值,这样会使得最小值无法在计算机中用浮点数表示,最小值可以很小但必须有界
(2)目标函数具有有界子区间映射
在这里插入图片描述
sub-level sets就是下水平集,此时要求目标函数不能存在当x趋于无穷时函数趋于某个值即下水平集无界,这同样会导致最小值无法用浮点数表示

f , g , h f,g,h f,g,h都是连续的(连续优化)

在slam、轨迹规划、点云配准、TOPP问题上都有数值优化的应用

在这里插入图片描述
本章大纲(非凸问题)
在这里插入图片描述

数值优化基础
(1)数值优化与机器人
(2)非凸优化中的凸性
(3)凸集和凸函数
(4)无约束非凸优化
(5)线搜索最大梯度下降
(6)改进的阻尼牛顿法

1 非凸优化中的凸性

在这里插入图片描述
① 凸集上凸函数的优化已经得到了很好的研究
② 优化算法利用凸函数集的性质来分析收敛性
③ 一些重要的问题有凸公式 / 松弛
④ 很多非凸函数在局部极小值点附近是局部凸的
⑤ 实践中,非凸函数的局部极小值可能足够好

2 凸集Convex Sets

集合中任意两点连线形成的线段属于这个集合,这个集合是凸集。
θ x 1 + ( 1 − θ ) x 2 , 0 ≤ θ ≤ 1 \theta x_1+(1-\theta)x_2,0≤\theta≤1 θx1+(1θ)x2,0θ1

More General:所有的凸组合都在集合中。
在这里插入图片描述
在这里插入图片描述
注意:是否是凸集,集合的边界是否属于这个集合很重要
在这里插入图片描述
凸包(Convex Hull)
在这里插入图片描述

什么是凸包?
假设平面上有 p 0 p_0 p0~ p 12 p_{12} p12共13个点,过某些点作一个多边形,使这个多边形能把所有点都"包"起来。当这个多边形是凸多边形的时候,就叫它“凸包”。
在这里插入图片描述
凸包问题:把这些点都放在二维坐标系下,每个点都能用 ( x , y ) (x,y) (x,y)来表示。现给出点的数目13,和各个点的坐标,求能构成凸包的点。

  • 凸包:计算几何(图形学)中的概念
    在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点( X1 ,. . . ,Xn )的凸组合来构造
  • 在二维欧几里得空间中,凸包可想象为一条刚好包着所有点的橡皮圈。用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点
  • 凸包问题:给定点集,求构成凸包的点

常见的凸集:
① 超平面 { x ∣ α T x = b x|\alpha^Tx=b xαTx=b}
② 半平面 { x ∣ α T x ≥ b x|\alpha^Tx≥b xαTxb}
③ 球的表面 { x ∣   ∣ ∣ x − x 0 ∣ ∣ = b x| \ ||x-x_0||=b x ∣∣xx0∣∣=b}
④ 球 { x ∣   ∣ ∣ x − x 0 ∣ ∣ ≤ b x| \ ||x-x_0||≤b x ∣∣xx0∣∣b}
⑤ 多项式 { f   ∣   f = ∑ i a i x i f\ | \ f=\sum_{i}^{} a_ix^i f  f=iaixi}
⑥ 锥 (不一定是凸的)

x ∈ C = > α x ∈ C , ∀ α ≥ 0 x∈C=>\alpha x∈C,\forall \alpha ≥0 xC=>αxC,α0

二阶锥(通过增加一个维度产生的):
在这里插入图片描述
锥不一定是凸集,比如锥的横截面是非凸集合,那么锥也是非凸的。

半正定锥:
在这里插入图片描述
半正定的锥为何是凸集可以利用在集合中取A,B,证明他们的凸组合仍然在这个集合里。

保持凸性的运算
A ∩ B A ∩ B AB
在这里插入图片描述
两个凸集的交集还是凸的
多面体:
{ x : A x ≤ b x:Ax≤b x:Axb}
在这里插入图片描述

超平面的交集是凸集,以后的障碍物或者是ego-car都常用此来表示。

半定锥:
在这里插入图片描述
任何一个向量x代入不等式都成立,而此不等式的本质是一个线性不等式,也就是相当于一个半空间,半空间的交集一定是凸的

A + B = A+B= A+B={   x + y   ∣   x ∈ A , y ∈ B \ x+y \ | \ x ∈ A,y∈B  x+y  xA,yB}
A A A x B B B = = ={   ( x , y )   ∣   x ∈ A , y ∈ B \ (x,y) \ | \ x ∈ A,y∈B  (x,y)  xA,yB}

A ∪ B A∪B AB不一定保持凸性

3 函数的高阶信息

在这里插入图片描述
hessian矩阵在函数光滑时是对称矩阵,最后一个公式是函数关于0的泰勒展开
使每一点下降最快的方向叫梯度
在这里插入图片描述
注意区分Hessian矩阵与Jacobian矩阵,Hessian矩阵对应的函数是向量映射到标量,矩阵元素是二阶信息,而Jacobian矩阵对应的函数是向量映射到向量,矩阵元素是一阶信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

https://en.wikipedia.org/wiki/Matrix_calculus

在这里插入图片描述
用两种方法计算梯度,一种是元素法,一种是向量法
在这里插入图片描述

4 凸函数

琴生不等式
在这里插入图片描述
凸函数最重要的性质就是Jensen’s inequality,也就是琴生不等式。
在这里插入图片描述
若能取到等号则是一般凸函数,不取等号则是强凸函数,若不等号相反,则是凹函数。

在这里插入图片描述
上方图就是函数上方的区域,“凸函数”与“上方图是凸集”是充要条件

凸函数的下水平集也是凸集
在这里插入图片描述
!为什么要关心凸函数?
因为凸性容易保持
在这里插入图片描述
凸轮廓 = 准凸 > 凸
拟凸函数的和不一定是拟凸的
任何的局部最优解都是全局最优解
解集是凸的
凸函数在许多运算下可以被保留

凸函数的和是凸的在这里插入图片描述
仿射变换:凸函数经过仿射变换仍然是凸函数,因为凸函数的上方图经过仿射变换仍然是凸的
在这里插入图片描述
逐点max保持凸性,逐点取大运算,即通过将运算分别应用于定义域中每个点的函数值来定义函数的取大运算
在这里插入图片描述

在这里插入图片描述

线性算子、凸上最大、特例、仿射补偿
如果 g ( x , y ) g(x,y) g(x,y)是凸的,则对 y y y 的极小化保持凸性
在这里插入图片描述
凸函数在线性逼近的上方
一阶条件 = 仅凸函数的最优性
在这里插入图片描述
二阶条件
在这里插入图片描述
Hessian函数是光滑函数的一个很好的局部模型
二次函数: f ( x ) = x T Q x ∈ R 2 f(x)=x^TQx∈R^2 f(x)=xTQxR2
在这里插入图片描述
③ 强凸性:
在这里插入图片描述
在这里插入图片描述
强凸意味着hessian矩阵严格正定。强凸对提高算法收敛速率又很大帮助
条件数:存在hessian矩阵的函数,作奇异值分解,最大的奇异值除最小的奇异值就是条件数,可导但没有二阶信息的函数,通过利普希茨常数与强凸函数的常数的比值得到条件数,对于一般的不可微的函数,构造等高线,长轴与短轴之比为条件数
在这里插入图片描述
④ 次微分:
在这里插入图片描述
次梯度的反方向不一定是下降方向
在这里插入图片描述
次梯度集合中模长最短的次梯度的反方向是最快下降方向
次微分示例:
在这里插入图片描述
⑥ 梯度单调性:任何凸函数的(次)梯度都是单调的
在这里插入图片描述

5 对非凸函数做无约束优化

在这里插入图片描述
最优解 x ∗ x^* x 在所有向量中具有最小值

5.1 迭代方向

梯度方向是函数上升最快的方向,而负梯度方向则是函数下降最快的方向,因此最速下降法就是以负梯度方向为迭代方向,当函数非光滑时,迭代点不存在梯度时,以次梯度集合内的取最小模长的负方向为迭代方向。
在这里插入图片描述
在这里插入图片描述

5.2 步长的选择

在这里插入图片描述
在这里插入图片描述
在迭代方向上走多少步长合适,这里列出了四种方法:
① 恒定步长
② 不断衰减的步长
③ 精确线搜索
④ 非精确线搜索
在这里插入图片描述
在这里插入图片描述
(1)如果采用恒定步长迭代,将导致不停的震荡,始终无法收敛
(2)如果采用衰减步长迭代,可以保证收敛,但是随着步长越来越短,收敛越来越慢
(3)因此需要一个兼顾收敛性与收敛速度的步长调整方法

精确线搜索:相当于以步长为自变量又进行一次求最优解的过程,这能保证每次迭代得到的优化最彻底,但实际上这导致我们又需要去求解子优化问题,本来就是在求解优化问题,又化归成一系列子优化问题,只不过变成一维优化问题,但是求解时间还是有较大损耗
非精确线搜索:我们不希望再求解子优化问题,也就是只希望每次得到一个接近最优解的步长,即满足一些条件,接下来将详细介绍这个条件(Armijo condition)

5.3 Armijo condition

在这里插入图片描述
将迭代步长看作自变量画出图,然后对当前迭代点进行一阶近似,然后对此直线的斜率进行松弛也就是乘上一个0到1的系数,得到另一条直线,在这条直线下方的区域都是下降比较充分的。
在这里插入图片描述
这里采用了一种二分的方法,当二分到满足Armijo condition时,就可以停止二分,取此步长
迭代的终止条件是梯度足够小,或者次梯度包含0
在这里插入图片描述
重复此操作,直到梯度很小或次微分包含零。

5.4 非精确线搜索的优势

在这里插入图片描述
在这里插入图片描述
上面两张图表明非精确线搜索在工程上由于精确线搜索,一般来说迭代时间与迭代次数和每次迭代需要的时间乘积成正比,虽然精确线搜索iteration很小,但每次iteration的time cost很大,就使得总耗时大,非精确线搜索与之相反,iteration虽然多,但每次iteration的time cost很小
在这里插入图片描述
在这里插入图片描述
还需要考虑条件数的问题,条件数很大将导致最速下降法每次迭代震荡很厉害,因此当条件数很大时,不适用最速下降法
在这里插入图片描述
可见当条件数很大时,曲率信息我们不能忽略

6 修正阻尼牛顿法

引入函数的二阶信息就考虑到了curvature info,这里先对函数进行泰勒展开,取二阶近似,对近似后的函数取最优解,通过梯度等于0得到一个等式。
最小化二次逼近,注:如果函数是二次函数,那么牛顿法只需一步就能达到最优。
在这里插入图片描述
当函数是二次型时,近似没有起到效果,迭代的过程就是求解原函数最优解的过程,因此当然一次迭代就能得到最优解
在这里插入图片描述

在这里插入图片描述
使用牛顿法和恒定步长0.1的梯度下降法求解
牛顿法走的是一条更“直接”的道路,牛顿法需要的迭代次数要少得多,但每次迭代的代价更高
在这里插入图片描述
将牛顿法与最速下降法相比,牛顿法需要的迭代次数很少就能直达最优解,但是由于需要求解hessian矩阵的逆,导致,每一步的迭代时间有所增加
在这里插入图片描述
评价数值优化方法的三个方面:
① 收敛速度
② 适用于不同功能时的稳定性
③ 每次迭代的计算工作量
在这里插入图片描述
缺点:在实践中,Hessian可以是单数和不定的;需要注意牛顿法的适用条件是hessian矩阵正定,否则会出现上述两种情况,若半正定可能找不到最优解,若负定,将使迭代方向变成上升方向,因此我们必须保证迭代方向与负梯度方向成锐角
在这里插入图片描述
(1)构造一个足够接近hessian的正定矩阵M
(2)通过因式分解而不是求逆来求解线性系统
(3)线搜索不需要grad和Hessian
在这里插入图片描述
首先M矩阵等于hessian矩阵加上一个单位阵乘上一个系数;对于对称正定线性方程组而言,可采用Cholesky分解或Bunch-Kaufman 分解对下降方向d进行快速求解。假如函数为凸函数,M矩阵可以利用 cholesky 分解,将稠密的矩阵分解为上三角与下三角乘积。假如函数为非凸函数, M矩阵可以利用 Bunch-Kaufman 分解。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文章页的上下篇功能是否有必要?boke112百科取消上下篇功能

也不知道是从什么时候开始,我们很多站长的博客网站文章页都会在文末添加上“上一篇”和“下一篇”功能,目的是进行站内SEO优化和方便用户阅读上下篇文章。 boke112百科不管是以前使用的Three主题还是现在使用的YIA主题,刚开始的文章页都是有…

HTTP网络通信协议基础

目录 前言: 1.HTTP协议理论 1.1协议概念 1.2工作原理 2.HTTP抓包工具 2.1Fiddler工具 2.2抓包原理 3.HTTP协议格式 3.1HTTP请求 3.2HTTP响应 3.3格式总结 前言: 在了解完网络编程的传输层UDP和TCP通信协议后,就需要开始对数据进行…

电动汽车上哪些部位用到了电机?

一、背景 电动汽车中除了主驱动电机之外的其他电机的控制复杂度因电机的种类和功能而异。 一般来说,助力转向电机、空调风扇电机、冷却水泵电机等辅助电机的控制相对较为简单。这些电机通常只需要进行简单的开/关控制或速度调节,以满足车辆的基本需求。…

mac电脑上使用android studio创建flutter项目

mac电脑环境配置可以看这篇文章:https://xiaoshen.blog.csdn.net/article/details/136068650 配置玩环境之后,开始创建第一个flutter项目:点击new flutter project或者new project都可以 然后选择flutter: 并将sdk配置为解压后的…

java nio零拷贝

零拷贝是一种计算机执行IO操作的优化技术,其核心目标是减少数据拷贝次数,从而提高系统性能。它主要体现在以下几个方面: 1. **定义与原理**:零拷贝字面上的意思包括“零”和“拷贝”。其中,“拷贝”是指数据从一个存储…

政安晨:在Jupyter中【示例演绎】Matplotlib的官方指南(一){Pyplot tutorial}

介绍 Matplotlib是一个Python的绘图库,可以用于创建各种静态、动态、交互式的图表和可视化效果。它提供了一种方便的方式来可视化数据,并支持多种图表类型,包括线图、散点图、柱状图、饼图、等高线图等。 Matplotlib可以与NumPy一起使用&am…

【前端web入门第五天】02 盒子模型基础

文章目录: 1.盒子模型的组成 1.1盒子模型重要组成部分1.2 盒子模型-边框线1.3 盒子模型–内边距 1.3.1 盒子模型–内边距-多值写法 1.4 盒子模型–尺寸计算 1.5 盒子模型-版心居中 1.盒子模型的组成 不同组件之间的空白就是盒子模型的功劳 作用:布局网页,摆放盒子…

【Linux】信号保存与信号捕捉处理

信号保存与信号捕捉 一、信号保存1. 信号的发送2. 理解信号保存(1)信号保存原因(2)信号保存概念 3. 信号保存系统接口(1)sigset_t(2)sigprocmask()(3)sigpend…

Blazor SSR/WASM IDS/OIDC 单点登录授权实例5 - Winform 端授权

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor SSR/WASM IDS/OIDC 单点登录授权实例2-登录信息组件wasmBlazor SSR/WASM IDS/OIDC 单点登录授权实例3-服务端…

Netty应用(八) 之 ByteBuf 半包粘包问题 半包粘包解决方案-封帧解码器

目录 19.ByteBuf 19.1 ByteBuf的基本使用 19.2 ByteBuf的扩容机制 19.3 ByteBuf与内存的关系 19.4 ByteBuf的内存结构 19.5 ByteBuf的API 19.5.1 ByteBuf的写操作 19.5.2 ByteBuf的读操作 19.5.3 ByteBuf的slice 19.6 ByteBuf的内存释放 19.6.1 实现API 19.6.2 如何…

肿瘤微环境各种浸润细胞及maker(学习)

目录 Tumor Infiltrating Leukocytes(肿瘤浸润性白细胞) TISCH2数据库收录的TIL 免疫细胞的分类 28种不同免疫细胞类型 Tumor Infiltrating Leukocytes(肿瘤浸润性白细胞) Gene expression markers of Tumor Infiltrating Le…

[2024]常用的pip指令

[2024]常用的pip指令 HI,这里是肆十二,好久不见,大家! 新年好! pip是Python的包管理工具,它可以用来安装、升级、卸载Python包。以下是一些常用的pip指令: 安装包: bash复制代码…

钓鱼邮件便捷发送工具(GUI)

简介 本程序利用Python语言编写,使用Tkinter实现图形化界面,可使用Pyinstaller进行exe打包,程序主界面截图如下: 功能 支持腾讯企业邮、网易企业邮、阿里企业邮、自建邮服SMTP授权账号(其他邮服,可在自建…

医疗处方架构设计和实现的实战经验总结

医疗处方是医生开具给患者的药物治疗建议。在现代医疗系统中,设计和实现一个高效而可靠的医疗处方架构至关重要。本文将介绍医疗处方架构的设计原则和关键组件,以及如何实现一个可扩展和安全的处方管理系统。 内容: 1. 引言 - 医疗处方的…

vue3 之 商城项目—home

home—整体结构搭建 根据上面五个模块建目录图如下&#xff1a; home/index.vue <script setup> import HomeCategory from ./components/HomeCategory.vue import HomeBanner from ./components/HomeBanner.vue import HomeNew from ./components/HomeNew.vue import…

HarmonyOS 状态管理装饰器 Observed与ObjectLink 处理嵌套对象/对象数组 结构双向绑定

本文 我们还是来说 两个 harmonyos 状态管理的装饰器 Observed与ObjectLink 他们是用于 嵌套对象 或者 以对象类型为数组元素 的数据结构 做双向同步的 之前 我们说过的 state和link 都无法捕捉到 这两种数据内部结构的变化 这里 我们模拟一个类数据结构 class Person{name:…

java实现文件随机加密

1、引言 有时候我们需要对我们的某些文件数据进行加密&#xff0c;并且不希望被轻易破译&#xff0c;此时最好不要使用已知的加密方法&#xff0c;这里我就给大家提供一种数据加密的方式&#xff0c;用以实现文件数据的加密&#xff0c;我称之为随机加密&#xff0c;即使是对相…

【ES6】模块化

nodejs遵循了CommonJs的模块化规范 导入 require() 导出 module.exports 模块化的好处&#xff1a; 模块化可以避免命名冲突的问题大家都遵循同样的模块化写代码&#xff0c;降低了沟通的成本&#xff0c;极大方便了各个模块之间的相互调用需要啥模块&#xff0c;调用就行 …

vulnhub-->hacksudo-Thor靶机详细思路

目录 1. IP探测2.端口服务扫描3.网站漏洞扫描4.目录扫描5.信息分析6.破壳漏洞(Shellshock)nmap---漏洞检测CVE-2014-6271 7.nc反弹8.提权9.service提权 1. IP探测 ┌──(root㉿kali)-[~] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:10:3c:9b, IPv4: 19…

C++入门学习(二十七)跳转语句—break语句

1、与switch语句联合使用 C入门学习&#xff08;二十三&#xff09;选择结构-switch语句-CSDN博客 #include <iostream> #include <string> using namespace std;int main() { int number;cout<<"请为《斗萝大路》打星(1~5※)&#xff1a;" &…