机器人中的数值优化(五)——信赖域方法

news2024/11/23 8:31:58

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



   七、信赖域方法

   1、信赖域方法简介

   信赖域方法(Trust Region Methods)是一种用于非线性优化的数值优化方法,旨在寻找目标函数的最小值。信赖域算法是一种迭代算法,即从给定的初始解出发,通过逐步迭代,不断改进,直到获得满意的近似最优解为止。其基本思想是把最优化问题转化为一系列简单的局部寻优问题。

   它的核心思想是在当前点的局部模型和真实模型之间建立一个可信区域(Trust Region),并在可信区域内寻找更优的解。

   该方法在解决非线性优化问题时,常使用局部二次模型来近似目标函数,并在每个迭代步骤中解决这个二次模型的最小化问题。信赖域方法是求解非线性最优化问题的有效方法之一,广泛应用于计算机视觉、机器学习、优化控制等领域。


   2、信赖域方法基本思想

   信赖域方法的基本思想是将问题分解为多个步骤。首先,用一个二次模型来近似目标函数,这个模型只在一个局部域内是准确的。其次,在这个局部域内求解二次模型的最小值。最后,使用这个最小值来更新优化变量,然后检查更新后的函数值是否小于当前的函数值。如果是,则扩大局部域的半径,否则缩小局部域的半径,以此控制每个步骤的更新大小。

   那么为什么要构建局部模型,而不使用真实模型呢?

   假设在点 x k x_k xk处,我们欲求下降方向 d x d_x dx,若直接求解极小值问题 m i n f ( x k + d ) min f(x_k+ d) minf(xk+d)去得到 d k d_k dk,那么这个问题与原问题复杂程度相同,而关于方向d的问题应该是相对简单、易求的。所以,解决这个问题简单可行的方法是:利用Taylor展式,在点 x k x_k xk的邻域中,使用 f ( x k + d ) f(x_k+ d) f(xk+d)的一阶近似函数或二阶近似函数作为局部模型代替 f ( x k + d ) f(x_k+ d) f(xk+d)去求 d k d_k dk(常使用二阶近似函数),我们记这个局部模型函数为 q k ( d ) q_k(d) qk(d).求取局部模型 q k ( d ) q_k(d) qk(d)的极小点,并将其作为迭代方向 d k d_k dk ,即求

   min ⁡ d q k ( d ) \operatorname*{min}_{d}q_{k}(d) dminqk(d)


   q k ( d ) q_k(d) qk(d)近似 f ( x k + d ) f(x_k+ d) f(xk+d)的好坏,是受到 x k x_k xk处邻域大小的影响的.合适的邻域和合适的近似函数的选取,可以保证 q k ( d ) q_k(d) qk(d) f ( x k + d ) f(x_k+ d) f(xk+d)的一个好的近似函数,如取

   q k ( d ) = f k + ∇ f k T d + 1 2 d T ∇ 2 f k d q_k(d)=f_k + \nabla f_k^T d + \frac{1}{2} d^T \nabla^2 f_k d qk(d)=fk+fkTd+21dT2fkd

   当||d||较小时, q k ( d ) q_k(d) qk(d)近似 f ( x k + d ) f(x_k+ d) f(xk+d)的误差亦小. 如果 x k x_k xk处的邻域太大,就无法保证 q k ( d ) q_k(d) qk(d) f ( x k + d ) f(x_k+ d) f(xk+d)的好的近似函数,此时可能会出现 q k ( d ) q_k(d) qk(d)的极小点与目标函数 f ( x k + d ) f(x_k+ d) f(xk+d)的极小点相差甚远的情况. 而邻域的大小决定了步长的长短,太短的步长会增加算法的迭代次数,影响算法的收敛速度,所以领域也不能取得过小。

   因此,每步迭代在 x k x_k xk处选择一个合适的邻域,在这个邻域中求解 min ⁡ d q k ( d ) \operatorname*{min}_{d}q_{k}(d) mindqk(d),这就是信赖域方法的思想.这个邻域,我们称之为信赖域,即在此信赖域中,我们相信 q k ( d ) q_k(d) qk(d) f ( x k + d ) f(x_k+ d) f(xk+d)的好的近似函数.

   假定在第k步迭代已得 x k x_k xk以及信赖域的半径 Δ k \Delta_k Δk,则信赖域的子问题即为求解如下表达式,得到 d k d_k dk

   min ⁡ q k ( d ) , s.t. ∥ d ∥ ⩽ Δ k , Δ k > 0 \begin{array}{l}\min q_k(d),\\ \textrm{s.t.}\|d\|\leqslant\Delta_k,\Delta_k>0\end{array} minqk(d),s.t.dΔk,Δk>0

   在得到新的迭代点 x k + 1 = x k + d k x_{k+1}=x_k+d_k xk+1=xk+dk之后,我们可以判断 Δ k \Delta_k Δk是否是下一步迭代的合适的信赖域半径,若不合适,可以修正 Δ k \Delta_k Δk得下一步迭代的 Δ k + 1 \Delta_{k+1} Δk+1,上式中的范数可依方法而定。


   那么如何衡量 Δ k \Delta_k Δk是否是下一步迭代的合适的信赖域半径呢?

   应该根据 x k x_k xk q k ( d ) q_k(d) qk(d)近似 f ( x k + d ) f(x_k+ d) f(xk+d)的好坏来确定,具体来说,可以根据从 x k x_k xk x k + d k x_k+d_k xk+dk f ( x ) f(x) f(x)的实际减少量 Δ f k \Delta f_k Δfk与近似函数 q k ( d ) q_k(d) qk(d)的减少量 Δ q k \Delta q_k Δqk之比 γ k \gamma_k γk来衡量,其中 q k ( 0 ) = f ( x k ) q_k(0)=f(x_k) qk(0)=f(xk)

   Δ f k = f ( x k ) − f ( x k + d k ) Δ q k = q k ( 0 ) − q k ( d k ) γ k = Δ f k Δ q k \begin{array}{l}\Delta f_k=f(x_k)-f(x_k+d_k)\\ \\ \Delta q_k=q_k(0)-q_k(d_k)\\ \\ \gamma_k=\dfrac{\Delta f_k}{\Delta q_k}\end{array} Δfk=f(xk)f(xk+dk)Δqk=qk(0)qk(dk)γk=ΔqkΔfk

   γ k \gamma_k γk接近1时,表明 q k ( d ) q_k(d) qk(d)近似 f ( x k + d ) f(x_k+ d) f(xk+d)的程度好,下一步迭代应增大 Δ k \Delta_k Δk;当 γ k \gamma_k γk为接近于零的正数时,表明 q k ( d ) q_k(d) qk(d)近似 f ( x k + d ) f(x_k+ d) f(xk+d)的程度不好,下一步迭代应减小 Δ k \Delta_k Δk;当 γ k \gamma_k γk为零或负数时,说明 f ( x k + d k ) ≥ f ( x k ) f(x_k+ d_k)≥ f(x_k) f(xk+dk)f(xk) x k + d k x_k+ d_k xk+dk不应被接受为下一步的迭代点,这时只应缩小信赖域的半径 γ k \gamma_k γk:,并重新求解。


   3、信赖域方法的具体步骤

   (1)初始化:选择一个初始点 x 0 x_0 x0,设定信赖域的初始大小 Δ 0 \Delta_0 Δ0,初始化迭代次数k=0。

   (2)开始迭代:判断是否满足终止条件(例如目标函数的值达到了一定的精度),若满足则输出 x k x_k xk,迭代停止

   (3)构建局部模型:在当前点 x k x_k xk处,构建一个局部二次模型,

   q k ( d ) = f k + ∇ f k T d + 1 2 d T ∇ 2 f k d q_k(d)=f_k + \nabla f_k^T d + \frac{1}{2} d^T \nabla^2 f_k d qk(d)=fk+fkTd+21dT2fkd

   其中, f k f_k fk是目标函数在 x k x_k xk处的函数值, ∇ f k \nabla f_k fk是目标函数在 x k x_k xk处的梯度, ∇ 2 f k \nabla^2 f_k 2fk是目标函数在 x k x_k xk处的Hessian矩阵的近似值。

   (4)寻找下降方向:求解 q k ( d ) q_k(d) qk(d)的最小值 d k d_k dk,满足 ∣ d k ∣ ≤ Δ k |d_k| \leq \Delta_k dkΔk,其中 Δ k \Delta_k Δk是当前信赖域的半径。

   (5)计算实际下降量和预测下降量:计算从 x k x_k xk x k + d k x_k+d_k xk+dk f ( x ) f(x) f(x)的实际减少量 Δ f k \Delta f_k Δfk与近似函数 q k ( d ) q_k(d) qk(d)的减少量 Δ q k \Delta q_k Δqk之比 γ k \gamma_k γk

   (6)更新信赖域大小:根据比值 γ k \gamma_k γk的大小更新信赖域大小

   如果 γ k \gamma_k γk一定程度上接近于1(比如说 γ k \gamma_k γk>0.75)说明局部模型对目标函数有较好的拟合效果,可以增加信赖域的大小 Δ k + 1 = min ⁡ ( γ 2 Δ k , Δ max ⁡ ) \Delta_{k+1}=\min(\gamma_2 \Delta_k, \Delta_{\max}) Δk+1=min(γ2Δk,Δmax),其中 γ 2 > 1 \gamma_2>1 γ2>1是一个大于1的常数, Δ max ⁡ \Delta_{\max} Δmax是信赖域大小的上限。

   如果 γ k \gamma_k γk一定程度上接近于0(比如说 γ k \gamma_k γk<0.25)说明局部模型对目标函数的拟合效果较差,应该减少信赖域的大小 Δ k + 1 = γ 1 Δ k \Delta_{k+1}=\gamma_1 \Delta_k Δk+1=γ1Δk,其中 0 < γ 1 < 1 0<\gamma_1<1 0<γ1<1是一个小于1的常数。

   如果 γ k \gamma_k γk位于0~1之间,既不靠近0也不靠近1(比如说0.25< γ k \gamma_k γk<0.75)说明局部模型对目标函数的拟合效果既不好也不坏,可以保持信赖域不变 Δ k + 1 = Δ k \Delta_{k+1}=\Delta_k Δk+1=Δk

   (7)判断是否接受新的点 x k + 1 = x k + d k x_{k+1}=x_k+d_k xk+1=xk+dk

   如果 γ k \gamma_k γk<=0,说明 f ( x k + d k ) ≥ f ( x k ) f(x_k+ d_k)≥ f(x_k) f(xk+dk)f(xk) x k + d k x_k+ d_k xk+dk不应被接受为下一步的迭代点,取 x k + 1 = x k x_{k+1}=x_k xk+1=xk,转到第(2)步继续迭代,重新求取第k次迭代的解。

   如果 γ k \gamma_k γk>0,说明 f ( x k + d k ) < f ( x k ) f(x_k+ d_k)< f(x_k) f(xk+dk)<f(xk) x k + d k x_k+ d_k xk+dk可以被接受为下一步的迭代点,取 x k + 1 = x k + d k x_{k+1}=x_k+d_k xk+1=xk+dk,并将迭代数加1,即k=k+1,转到第(2)步继续迭代。


   4、总结

   与线搜索方法先在 x k x_k xk点求得下降方向 d k d_k dk,再沿 d k d_k dk方向确定步长 a k a_k ak不同,信赖域方法是先限定步长的范围,再同时确定下降方向 d k d_k dk和步长 a k a_k ak

   信赖域方法相对于其他优化算法的优点在于它可以保证每次迭代都可以得到一个可行解,并且可以保证在可信区域内寻找更优的解,从而增加算法的稳定性和可靠性。此外,信赖域方法也可以灵活地处理约束条件和不等式约束问题。

   然而,信赖域方法也存在一些缺点。例如,它可能会陷入局部最优解,并且每次迭代需要计算Hessian矩阵或其近似,计算成本较高。同时,信赖域大小的选取也需要一定的经验和调试。

   总的来说,信赖域方法是一种有效的非线性优化算法,可以用于解决一类较为复杂的优化问题。



   参考资料:

   1、机器人中的数值优化

   2、信赖域算法

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

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

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

相关文章

18.kthread_worker:内核线程异步传输

目录 kthread_worker 驱动传输数据的方式 同步传输 异步传输 头文件 kthread_worker结构体 kthread_work结构体 kthread_flush_work结构体 init_kthread_worker()函数 为kthread_worker创建内核线程 init_kthread_work()函数 启动工作 刷新工作队列 停止内核线程…

3D点云测量:计算三个平面的交点

文章目录 0. 测试效果1. 基本内容文章目录:3D视觉测量目录微信:dhlddxB站: Non-Stop_0. 测试效果 1. 基本内容 计算三个平面的交点需要找到满足所有三个平面方程的点。三个平面通常由它们的法向量和通过它们的点(或参数形式的方程)来定义。以下是计算三个平面的交点的一般步…

在VScode中使用sftp传输本地文件到服务器端

安装SFTP 在VScode的扩展中安装sftp 注意这里需要在你没连接服务器的状态下安装&#xff0c;即本机需要有sftp 配置传输端口 安装成功后&#xff0c;使用快捷键"ctrlshiftp",输入sftp&#xff0c;选择Config 根据自己的实际情况修改配置文件&#xff0c;主要改h…

设计模式-6--装饰者模式(Decorator Pattern)

一、什么是装饰者模式&#xff08;Decorator Pattern&#xff09; 装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你在不修改现有对象的情况下&#xff0c;动态地将新功能附加到对象上。这种模式通过创建一个包装类&#xff0c;…

排序之交换排序

文章目录 前言一、冒泡排序1、冒泡排序基本思想2、冒泡排序的效率 二、快速排序 -- hoare版本1、快速排序基本思想2、快速排序代码实现3、为什么最左边值做key时&#xff0c;右边先走 三、快速排序 -- 挖坑法1、快速排序 -- 挖坑法基本思想2、快速排序 -- 挖坑法代码实现3、为什…

stable diffusion实践操作-随机种子seed

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、seed是什么&#xff1f;二、使用步骤1.多批次随机生成多张图片2.提取图片seed3. 根据seed 再次培养4 seed使用4.1 复原别人图4.1 轻微修改 三、差异随机种子1. webUI位置2. 什么是差异随机种子3.使用差异…

找redis大key工具rdb_bigkeys

github官网 https://github.com/weiyanwei412/rdb_bigkeys 在centos下安装go [roothadoop102 rdb_bigkeys-master]# wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz [roothadoop102 rdb_bigkeys-master]# tar -zxf go1.13.5.linux-amd64.tar.gz -C /usr/local将g…

安装bpftrace和bcc的踩坑记录

最后在Ubuntu22.04使用Ubuntu提供的安装命令完成了安装。这里是记录尝试在Ubuntu18.04和Ubuntu22.04使用源码安装未果的过程。 文章目录 22版本安装bcc准备工具安装命令使用报错&#xff1a;iovisor封装的安装方式ubuntu的安装方式 For Bionic (18.04 LTS)官方提供的源码安装准…

SpringCloudGateway集成SpringDoc

SpringCloudGateway集成SpringDoc 最近在搞Spring版本升级&#xff0c;按客户要求升级Spring版本&#xff0c;原来用着SpringBoot 2.2.X版本&#xff0c;只需要升级SpringBoot 2.X最新版本也就可以满足客户Spring版本安全要求&#xff0c;可是好像最新的SpringBoot 2.X貌似也不…

Laravel chunk和chunkById的坑

在编写定时任务脚本的时候&#xff0c;经常会用到chunk和chunkById的API。 一、前言 数据库引擎为innodb。 表结构简述&#xff0c;只列出了本文用到的字段。 字段类型注释idint(11)IDtypeint(11)类型mark_timeint(10)标注时间&#xff08;时间戳&#xff09; 索引&#x…

手撕 视觉slam14讲 ch13 代码(1)工程框架与代码结构

在学习slam一年之后开始&#xff0c;开始自己理思路&#xff0c;全手敲完成ch13的整个代码 我们按照自己写系统的思路进行&#xff0c;首先确定好SLAM整体系统的流程&#xff0c;见下图&#xff0c;输入为双目图像&#xff0c;之后进入前端位姿估计和后端优化&#xff0c;中间…

滑动窗口实例3(最大连续1的个数Ⅲ)

题目&#xff1a; 给定一个二进制数组 nums 和一个整数 k&#xff0c;如果可以翻转最多 k 个 0 &#xff0c;则返回 数组中连续 1 的最大个数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1,0,0,0,1,1,1,1,0], K 2 输出&#xff1a;6 解释&#xff1a;[1,1,1,0,0,1,1…

stable diffusion实践操作-宽高设置以及高清修复

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、SD宽高怎么设置&#xff1f;1.1 宽高历史 二、高清修复总结 前言 主要介绍SD的宽高设置以及高清修复 一、SD宽高怎么设置&#xff1f; 1.1 宽高历史 SD生成256256图片效果最好。512512是SD一直使用的画…

【管理运筹学】第 7 章 | 图与网络分析(1,图论背景以及基本概念、术语)

文章目录 引言一、图与网络的基本知识1.1 图与网络的基本概念1.1.1 图的定义1.1.2 图中相关术语1.1.3 一些特殊图类1.1.4 图的运算 写在最后 引言 按照正常进度应该学习动态规划了&#xff0c;但我想换换口味&#xff0c;而且动态规划听说也有一定难度&#xff0c;还不一定会考…

设计模式—简单工厂

目录 一、前言 二、简单工厂模式 1、计算器例子 2、优化后版本 3、结合面向对象进行优化&#xff08;封装&#xff09; 3.1、Operation运算类 3.2、客户端 4、利用面向对象三大特性&#xff08;继承和多态&#xff09; 4.1、Operation类 4.2、加法类 4.3、减法类 4…

VTK——使用ICP算法进行模型配准

ICP算法 迭代最近点&#xff08;Iterative Closest Point&#xff0c;ICP&#xff09;算法是一种用于两个三维形状之间几何对齐&#xff08;也叫做配准&#xff09;的计算方法。通常&#xff0c;这两个形状至少有一个是点云数据。ICP算法用于最小化源点云与目标点云之间点到点…

【设计模式】Head First 设计模式——构建器模式 C++实现

设计模式最大的作用就是在变化和稳定中间寻找隔离点&#xff0c;然后分离它们&#xff0c;从而管理变化。将变化像小兔子一样关到笼子里&#xff0c;让它在笼子里随便跳&#xff0c;而不至于跳出来把你整个房间给污染掉。 设计思想 ​ 将一个复杂对象的构建与其表示相分离&…

【两个有序数组合并】

问题描述: 给定两个有序整数数组 A 和 B&#xff0c;将B合并到A中&#xff0c;使得 A 成为一个有序数组。 说明: 初始化 A 和 B 的元素数量分别为 m 和 n。A有足够的空间&#xff08;空间大小大于或等于 m n&#xff09;来保存 B 中的元素。默认升序。 输入输出描述&#xf…

大数据组件-Flume集群环境的启动与验证

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

《YOLOv5:从入门到实战》专栏介绍 专栏目录

&#x1f31f;YOLOv5&#xff1a;从入门到实战 | 目录 | 使用教程&#x1f31f; 本专栏涵盖了丰富的YOLOv5算法从入门到实战系列教程&#xff0c;专为学习YOLOv5的同学而设计&#xff0c;堪称全网最详细的教程&#xff01;该专栏从YOLOv5基础知识入门到项目应用实战都提供了详细…