机器人中的数值优化(二十一)—— 伴随灵敏度分析、线性方程组求解器的分类和特点、优化软件

news2025/1/4 19:26:24

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



  

   三十三、伴随灵敏度分析

   伴随灵敏度分析可以避免冗余信息的计算,在下面的例子中,我们想要求解Ax=b1、Ax=b2 … Ax=bm等一系列方程组,第一种求解思路是将A矩阵进行LU分解, A = L U A=LU A=LU,求逆后可得到 A − 1 = U − 1 L − 1 A^{-1}=U^{-1}L^{-1} A1=U1L1,然后依次将b1~bm代入下式即可得到这一系列方程组的解

   x i = U − 1 L − 1 b i x_i=U^{-1}L^{-1}b_i xi=U1L1bi

在这里插入图片描述

   但如果我们事先知道需要使用那些数据,那么我们能不能仅把需要使用的变量求出来?比如我们的目标是求每个xi的平均值ai,比如所有x1的平均值a1,那么我们是不是不需要求出每个xi的具体值,而仅仅需要他们的平均值ai。

   a i = c T x i = c T A − 1 b i = b i T A − T c a_{i}=c^{T}x_{i}=c^{T}A^{-1}b_{i}=b_{i}^{T}A^{-T}c ai=cTxi=cTA1bi=biTATc

   之前需要先算 A − 1 b i A^{-1}b_{i} A1bi 部分,再算 c T A − 1 b i c^TA^{-1}b_i cTA1bi,现在可以先算 A − T c A^{-T}c ATc,再算 b i T A − T c b_i^TA^{-T}c biTATc,我们不需要对每个bi求一个线性方程组了,仅需要求一个方程组 q ≡ A − T c q\equiv A^{-T}c qATc,求出 q q q之后,再与bi做一个点积即可, a i = b i T q a_i=b_i^Tq ai=biTq

在这里插入图片描述

   伴随灵敏度分析的思想是在计算矩阵相乘的时候考虑那个先乘,那个后乘。线性方程组有一个伴随线性方程组,伴随灵敏度分析允许优化一小部分设计参数,而不是全部参数。

   假设x是一个线性方程组的解,它的维度很大,它是一个完备的参数,从x可以获得所有我们想要的信息,但我们不能直接处理这么大维度的优化,我们需要设一组设计参数 p = ( p 1 , p 2 , . . . , p M ) \mathbf{p}=(p_{1},p_{2},...,p_{M}) p=(p1,p2,...,pM),我们要算的是一些目标函数 g ( p , x ) g(\mathbf{p},\mathbf{x}) g(p,x)关于参数 p 1 , p 2 , … , p M p_{1},p_{2},\ldots,p_{M} p1,p2,,pM的梯度

   d g d p j = ∂ g ∂ p j + ∑ i = 1 N ∂ g ∂ x i ∂ x i ∂ p j d g d p = g p + g x x p \begin{aligned}\frac{dg}{dp_j}&=\frac{\partial g}{\partial p_j}+\sum_{i=1}^N\frac{\partial g}{\partial x_i}\frac{\partial x_i}{\partial p_j}\\\\\frac{dg}{d\mathbf{p}}&=g_\mathbf{p}+g_\mathbf{x}\mathbf{x_p}\end{aligned} dpjdgdpdg=pjg+i=1Nxigpjxi=gp+gxxp

在这里插入图片描述

   一般认为 ∂ g ∂ p j 和 ∂ g ∂ x i \frac{\partial g}{\partial p_j}和\frac{\partial g}{\partial x_i} pjgxig是容易获得的, ∂ x i ∂ p j \frac{\partial x_{i}}{\partial p_{j}} pjxi是不知道的

   A p j x + A x p j = b p j ⇒ x p j = A − 1 [ b p j − A p j x ] A_{p_j}\mathbf{x}+A\mathbf{x}_{p_j}=b_{p_j}\quad\Rightarrow\quad\mathbf{x}_{p_j}=A^{-1}[b_{p_j}-A_{p_j}\mathbf{x}] Apjx+Axpj=bpjxpj=A1[bpjApjx]

在这里插入图片描述

在这里插入图片描述

   我们使用矩阵相乘交换顺序的思想,把解m次 N 2 N^2 N2复杂度的方程组,转换为解一次就可以了

在这里插入图片描述

   应用示例一:

在这里插入图片描述

   应用示例二:

   当路径上选取的优化点变密集后,安全性会更好,那么我们能不能,不选取那么多的优化点,而同样使其有较好的安全性

在这里插入图片描述

   对于任意阶样条,我们可以解耦线段的数目和约束的数目。所有的路径点和持续时间都是我们轨迹的设计参数(决策变量)。样条系数是由路点确定的线性方程组的解。

   A ( T ) c ( p , T ) = b ( p ) \mathbf{A(T)c(p,T)=b(p)} A(T)c(p,T)=b(p)

   A和b构成了样条系数的线性方程组。这很自然地符合伴随敏感性分析的模型。

在这里插入图片描述


   三十四、线性方程组求解器的分类和特点

在这里插入图片描述

   线性方程组求解器可分为两大类或三小类,两大类即直接求解和迭代求解,直接求解可以得到Ax=b的精确解,迭代求解随着迭代次数的增多,所得到的近似解与精确解的误差也逐渐减小。三小类是因为有的求解器会利用矩阵的稀疏结构,而有的求解器不利用,因此,直接法又分为稠密法和稀疏直接法。

   (1)稠密法

   具有简单数据结构,不需要索引数据结构等特殊的数据结构,采用矩阵的直接表示,主要是O(N3)分解算法

   (2)稀疏直接法

   当矩阵中有很多0元素时,我们可以仅储存非0元素的位置和具体的值,使其占较少的内存。

   因子分解成本取决于问题结构(1D低成本;2D可接受成本;3D高成本;不容易给出一般规则,NP难以排序以获得最佳稀疏性)

   (3)迭代法

   迭代求取近似解,仅需要知道 y = A x   ( m a y b e   y = A T x ) y=Ax\mathrm{~(maybe~}y=A^Tx) y=Ax (maybe y=ATx),良好的收敛性取决于预条件。

在这里插入图片描述

   当我们求解Ax=b时,如果是稠密的矩阵,尽可能的根据矩阵的对称性、半正定性、带状结构等特点,以此来挑选不同的稠密求解器,比如使用LAPACK/ScaLAPACK库,或者Eigen库

在这里插入图片描述

   若,我们知道矩阵的非零元素比零元素少很多,可以选用稀疏直接法中的求解器,看看能不能提前把矩阵预分解

在这里插入图片描述

   如果问题比较大,如 1 0 5 10^5 105,此时采用稠密法会有问题,可以用CG方法处理正定对称矩阵,还有一系列迭代法可以处理对称不定或非对称的矩阵。

在这里插入图片描述

   因式分解有很多种方法,比如

   L U , L L T / L L H , L D L T / L D L H , Q R , L Q , Q R Z , generalized QR and RQ \begin{aligned}LU,LL^T /LL^H,LDL^T/LDL^H,QR,LQ,QRZ,\end{aligned}\text{generalized QR and RQ} LU,LLT/LLH,LDLT/LDLH,QR,LQ,QRZ,generalized QR and RQ

   除了因式分解,还有对称/Hermitian和非对称特征值、奇异值分解、广义特征值与奇异值分解

在这里插入图片描述


   LU分解其实就是高斯消元法,把一个矩阵进行高斯消元,进行一些行变换

   A = P L U A=PLU A=PLU

在这里插入图片描述


   稀疏LU分解法不仅需要做行变换,还需要做列变换。

在这里插入图片描述


   Cholesky分解:

在这里插入图片描述

   稀疏Cholesky分解:

在这里插入图片描述

   LDL分解:

在这里插入图片描述

   稀疏矩阵:

在这里插入图片描述

在这里插入图片描述


   稀疏矩阵分解:

在这里插入图片描述

   稀疏排序会对虚实化的稀疏性产生巨大的影响:

在这里插入图片描述

   选择产生最小二乘分解的排序的一般问题是困难的,但是,几个简单的启发式方法是非常有效的。例如嵌套排序方法,可以起作用。

在这里插入图片描述

在这里插入图片描述

   迭代法:

在这里插入图片描述


   三十五、优化软件


   1、swMATH

   里面包含优化、线性代数、大规模矩阵运算等丰富的资源

   链接:https://zbmath.org/software/

在这里插入图片描述


   2、gamsworld

   gamsworld收录了很多的工具,在这里可以找到锥规划等性能测评的手段

   链接:https://gamsworld.org/

   链接:https://github.com/GAMS-dev/gamsworld

在这里插入图片描述


   3、DECISION TREE FOR OPTIMIZATION SOFTWARE

   可以根据优化问题的结构,查找某个问题有哪些现有的方案

   链接:http://plato.asu.edu/guide.html

在这里插入图片描述


   4、Mathematical Software

   里面包含优化、非线性求解器等丰富的资源

   链接:https://arnold-neumaier.at/software.html

在这里插入图片描述


   5、neos solvers

   neos solvers是比较有名的求解器

   链接:https://neos-server.org/neos/solvers/index.html

在这里插入图片描述


   6、netlib

   里面几乎包含所有的线性求解办法

   链接:https://netlib.org/

在这里插入图片描述


   7、GAMS

   里面包含一些数学库,不仅仅是优化

   链接:https://gams.nist.gov/

在这里插入图片描述


   8、HSL Software

   专门的线性方程组求解器,包含很多源代码

   链接:https://www.hsl.rl.ac.uk/catalogue/

在这里插入图片描述


   9、autodiff

   收集了一些求微分的方法的网站

   链接:https://www.autodiff.org/

在这里插入图片描述


   10、Local Optimization Software

   链接:https://arnold-neumaier.at/glopt/software_l.html

在这里插入图片描述


   11、Global Optimization Software

   链接:https://arnold-neumaier.at/glopt/software_g.html

在这里插入图片描述



   参考资料:

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

   2、机器人中的数值优化


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

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

相关文章

二、图像处理

待完善 一、图片缩放 import org.bytedeco.opencv.global.opencv_imgcodecs; import org.bytedeco.opencv.global.opencv_imgproc; import org.bytedeco.opencv.opencv_core.Mat; import org.bytedeco.opencv.opencv_core.Size;public class ImageResizer {public static voi…

LLMs 蒸馏, 量化精度, 剪枝 模型优化以用于部署 Model optimizations for deployment

现在,您已经了解了如何调整和对齐大型语言模型以适应您的任务,让我们讨论一下将模型集成到应用程序中需要考虑的事项。 在这个阶段有许多重要的问题需要问。第一组问题与您的LLM在部署中的功能有关。您需要模型生成完成的速度有多快?您有多…

Linux深度学习:除基本命令操作外的实用操作

Linux深度学习:除基本命令操作外的实用操作 软件安装systemctl软连接日期、时区IP地址、主机名网络传输下载和网络请求端口 进程管理主机状态系统资源监控磁盘信息监控网络状态监控 环境变量上传、下载压缩、解压root用户、用户、用户组管理查看、修改权限控制 软件…

windows动态配置多个JDK遇到的问题

环境变量配置如下:问题:当切换JAVA_HOME 为%JAVA17_HOME%,查看java版本还是java 11。 我检查path配置发现这个路径 删除这个路径配置,再切换JAVA_HOME的配置, 查看版本号这时就可以了

使用Python抓取某音数据详细步骤

某音作为当今最受欢迎的短视频平台之一,吸引了亿万用户的眼球。但是,你是否曾经想过如何通过Python来抓取某音数据?本文将揭示这个秘密,并分享使用Python来抓取某音数据的实用技巧,帮助你深入了解背后的数据世界。 第一…

【Go】excelize库实现excel导入导出封装(一),自定义导出样式、隔行背景色、自适应行高、动态导出指定列、动态更改表头

前言 最近在学go操作excel,毕竟在web开发里,操作excel是非常非常常见的。这里我选择用 excelize 库来实现操作excel。 为了方便和通用,我们需要把导入导出进行封装,这样以后就可以很方便的拿来用,或者进行扩展。 我参…

uni-app:服务器端数据绘制echarts图标(renderjs解决手机端无法显示问题)

效果 代码 <template><view click"echarts.onClick" :prop"option" :change:prop"echarts.updateEcharts" id"echarts" class"echarts"></view> </template><script>export default {data()…

MDK(Keil)的MAP文件都记录了啥

1.Section Cross References&#xff1a;译为各区域的交叉参考&#xff0c;记录了每个C文件调用了哪些其它文件的函数&#xff0c;内容很多所以这个部分相当长 2.Removing Unused input sections from the image&#xff1a;移除未使用的输入部分&#xff0c;记录哪些文件的哪些…

Quarto 入门教程 (2):如何使用并编译出不同文档

接着上一期内容&#xff1a;手把手教你使用 Quarto 构建文档 (1)&#xff0c;本文介绍如何使用 Quarto&#xff0c;并编译出文档&#xff08;PDF&#xff0c;MS Word&#xff0c;html&#xff09;等。 安装 根据官方链接&#xff0c;选择适合自己电脑的 Quarto 版本并下载&am…

【开发篇】二十一、SpringBoot整合Kafka

文章目录 1、整合2、消息的生产3、消费4、补充&#xff1a;安装 Kafka主体不是用来做消息中间件的&#xff0c;但也有这个功能&#xff0c;接下来整合Kafka 1、整合 导入依赖坐标&#xff1a; <dependency> <groupId>org.springframework.kafka</groupId&g…

聚观早报 | 微软将推出首款AI芯片;Galaxy S24系列首发

【聚观365】10月8日消息 微软将推出首款AI芯片 Galaxy S24系列首发 特斯拉将发布第三季度财报 台积电9月份营收56亿美元 2023国庆档新片总票房破27亿 微软将推出首款AI芯片 据外媒援引知情人士消息透露&#xff0c;微软计划在下个月举行的年度开发者大会上推出该公司首款…

【PG】Linux系统部署PostgreSQL 单机数据库

安装方式 1 安装包方式 &#xff08;Packages and Installers&#xff09; 支持的操作系统包括 liunxMacosWindowsBSDSolaris 2 源码安装 &#xff08;Source code&#xff09; 下载源码包 通过下载地址PostgreSQL: File Browser 可以看到有各个版本的源码目录 选择13.1…

80、90童年回忆之小霸王游戏机网页版

前言 在如今快节奏的生活中&#xff0c;我们常常追逐着最新潮流&#xff0c;迷失了曾经的经典与回忆。现在&#xff0c;有一种游戏机能够带你回到小时候&#xff0c;让你重温那些令人难以忘怀的游戏时光&#xff0c;这就是小霸王游戏机&#xff01; 作为 80 年代和 90 年代最受…

对于复杂二进制数位dp问题考虑朴素思想:agc015d

https://atcoder.jp/contests/agc015/tasks/agc015_d 我一开始考虑的是直接上二进制数位dp&#xff0c;但发现这很难做 然后其实可以从最朴素的二进制分类讨论角度考虑 同样是那么几个套路&#xff0c;考虑最高位

AXI总线协议基础--几分钟熟悉通道信号和基础架构

目录 一、AXI协议基础 1.1读写通道的基本架构图 1.2猝发操作举例 1.3传输顺序 二、各个通道中的信号描述 2.1全局信号 2.2写地址通道信号 2.3写数据通道信号 2.4写响应通道信号 2.5读地址通道信号 2.6读数据通道 三、通道握手 3.1单一信息传输时的握手过程 3.2不…

NPM 常用命令(九)

目录 1、npm link 1.1 使用语法 1.2 描述 2、npm login 2.1 描述 3、npm logout 3.1 描述 4、npm ls 4.1 使用语法 4.2 描述 5、npm org 5.1 使用语法 5.2 示例&#xff1a; 6、npm outdated 6.1 使用语法 6.2 描述 6.3 示例 7、npm owner 7.1 使用语法 7.2…

使用Spring Initailizr功能~

Spring Initializr是一个用于快速生成Spring Boot项目的在线工具&#xff0c;它允许用户选择所需的Spring Boot版本、添加所需的依赖&#xff0c;并生成一个可用的项目结构&#xff0c;包括基本的配置文件和代码框架&#xff0c;它能够简化Spring Boot项目的初始化过程&#xf…

高通camx开源部分简介

camera整体框架 ISP Pipeline diagram Simple Model Camx and chi_cdk 整体框架 CtsVerifier, Camra Formats Topology of Camera Formats. Topology (USECASE: UsecaseVideo) Nodes List Links between nodes Pipeline PreviewVideo Buffer manager Create Destro…

Centos7安装Redis7.x最新稳定版|配置开机启动(骨灰级|保姆级)

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 Python3数据科学包系列(三):数据分析实战 Win11查看安装的Python路…

数据丢失怎么办?分享3个神仙方法!

“紧急求解答&#xff01;数据丢失了怎么用简单的方法恢复呀&#xff1f;电脑中保存了一些非常重要的数据&#xff0c;不知道怎么就不见了。有没有方法帮我找回来呀&#xff1f;” 在日常办公中&#xff0c;很多用户会将重要的数据保存在电脑中。这样有利于在需要时及时使用文件…