机器人中的数值优化(十二)——带约束优化问题简介、LP线性规划

news2024/11/26 3:39:37

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



   十八、带约束优化简介

   1、简单的例子看有无约束的区别

   在如下图所示的表达式f(x)中,无约束优化求得最最优解位于原点处,即图中的①处,若对该问题添加了不等式约束g(x)使解得范围约束在图中的红色椭圆内,此时,求得的最优解,为图中②处

在这里插入图片描述


   2、带约束优化的类别及复杂性

在这里插入图片描述

   (1)、线性规划LP

   目标函数是线性的,等式约束和不等式约束也是线性的,x是决策变量,c、d、A、b、G、h都是常数矩阵或向量

   (2)、二次规划QP

   目标函数含有二次项,一般情况下矩阵Q是半正定的,即Q>=0,等式约束或不等式约束一般是线性的。

   (3)、锥规划SOCP

   目标函数线性的,一般情况下,不等式约束由一个线性表达式的二范数小于等于另一个线性表达式的形式给出。

   (4)、半定锥规划SDP

   目标函数线性的,一般情况下,不等式约束由广义的不等式形式给出,(喇叭形状的大于等于号是半正定的意思)

   (5)、一般形式的带约束的优化问题

在这里插入图片描述


   一般来说,不加说明的话,LP、SOCP、SDP的目标函数都是线性的,等式约束也是线性的,他们的差别在不等式约束上,一般来说LP的线性不等式约束区域是一个凸多面体,SOCP的不等式约束是一个锥的形状,锥的表面和内部都是可行解。

在这里插入图片描述


   最坏时间复杂度如上图右侧所示,其中m是问题的约束个数,n是x的维度,L是求解精度,比如10的负多少次方,即精确到小数点后几位的位数。SOCP中的ki是锥的维度,m个锥的维度可能不同。SDP中的ki表示,m个广义不等式中Ai或Bi的行向量或列向量的个数。从LP→SOCP→SDP复杂度是增长的。

在这里插入图片描述

   另一类分类方式是按照近似优化算法和精确优化算法划分的,精确优化算法可以在有限次迭代后精确的收敛到最优解,而近似优化算法可以不断的逼近最优解。

在这里插入图片描述


   十九、低维度LP线性规划

   线性规划(Linear Programming,简称LP)是数学规划中的一个重要分支,用于解决在给定一组线性约束条件下,优化一个线性目标函数的问题。线性规划在工程、经济、管理等领域有广泛的应用,它能够找到最优的决策方案,使得目标函数的值达到最大或最小。

   一般线性规划问题可以表示为以下标准形式:

   最大化或最小化: f = c 1 x 1 + c 2 x 2 + … + c n x n + d f = c_1x_1 + c_2x_2 + \ldots + c_nx_n+d f=c1x1+c2x2++cnxn+d

   不等式约束为:

   a 11 x 1 + a 12 x 2 + … + a 1 n x n ≤ b 1 a_{11}x_1 + a_{12}x_2 + \ldots + a_{1n}x_n \leq b_1 a11x1+a12x2++a1nxnb1

   a 21 x 1 + a 22 x 2 + … + a 2 n x n ≤ b 2 a_{21}x_1 + a_{22}x_2 + \ldots + a_{2n}x_n \leq b_2 a21x1+a22x2++a2nxnb2

   ⋮ \vdots

   a m 1 x 1 + a m 2 x 2 + … + a m n x n ≤ b m a_{m1}x_1 + a_{m2}x_2 + \ldots + a_{mn}x_n \leq b_m am1x1+am2x2++amnxnbm

   其中, f f f是要优化的目标函数值, c 1 , c 2 , … , c n c_1, c_2, \ldots, c_n c1,c2,,cn是目标函数中各项的系数, x 1 , x 2 , … , x n x_1, x_2, \ldots, x_n x1,x2,,xn是决策变量, a i j a_{ij} aij是约束条件矩阵的元素, b i b_i bi是约束条件的右侧常数项。上面的展开式形式可以写成以下的矩阵形式:

   min ⁡ c T x + d s . t . A x ≤ b G x = h \min\quad c^\mathrm{T}x+d\quad\mathrm{s.t.}\quad Ax\leq b\quad Gx=h mincTx+ds.t.AxbGx=h

在这里插入图片描述

   线性规划的目标是找到一组决策变量 x 1 , x 2 , … , x n x_1, x_2, \ldots, x_n x1,x2,,xn,使得目标函数 f f f的值最小化或最大化。同时,这组决策变量要满足所有的约束条件。

   每个不等式约束在几何上限制了一个半空间区域,半空间即线的某一侧区域,所有的半空间取交集即下图中蓝紫色的可行域

在这里插入图片描述


   由不等式约束确定了可行域后,在可行域内求解使得 f = c T x + d f=c^\mathrm{T}x+d f=cTx+d最大或最小,d为常量,即在可行域内找到一个使得 c T x c^\mathrm{T}x cTx最大或最小的点 v o p t v_{opt} vopt,使这样一个内积运算的值最大,即在可行域内找一个点 v o p t v_{opt} vopt,构成一个向量x,使得其在c方向上的投影最大。

   此时,最大值 c T v o p t > = c T x c^\mathrm{T}v_{opt} >= c^\mathrm{T}x cTvopt>=cTx,其中x是可行域内任意一点,由该表达式可确定如下图红线及箭头所表示的半空间,该半空间包含整个可行域,容易看出,LP问题的最优解 v o p t v_{opt} vopt常位于多边形区域内的某个顶点上。

在这里插入图片描述


   工程中的许多优化问题都是线性规划。其中一个比较精确的实用算法是单纯形算法(Simplex Method)。单纯形算法虽然是精确的,但在最坏的情况下,其复杂度可能是随问题的参数指数增长的。也有一些伪多项式算法,比如内点法(Interior point methods,IPM),只能提供近似解,计算强度也比较大。一般只在规模很大的情况下才用内点法。在路径规划中,常处理维度较低(如1<=d<=10),但约束个数较多的问题(m很大),往往需要高效率的去求解一些精确解。

   (1)一维情况

   对于下面例子中给出的一维的情况,很容易在线性时间内(O(n))得到其精确解,其中c、a1 ~ an,b1 ~ bn 为一维常数,x为一维变量

在这里插入图片描述

   假设存在如下图所示的6个不等式约束,很容易得到如下图中红色区域所示的可行域

在这里插入图片描述

   (2)二维情况

   对于下图中所示的二维的情况,两个不等式约束对应的半空间的交集为可行域,即图中绿色区域,c和x都是二维的,目标函数在红线的上侧取得最大值,可得精确解为图中的v0点。

在这里插入图片描述

   若此时加入一个新的不等式约束h1,此时可行域变为下图所示的绿色区域,加入约束h1之前得到的最优解v0已经不在可行域中,此时目标函数的最优的精确解变为v1点,易知v1点必然位于新加入的约束h1的某个顶点处,再加入新的约束h2后,由于加入约束h2之前的最优解v1依然在当前可行域中,此时的精确解v2=v1,即加入新约束h2后,最优解没有改变,依次类推,再加入新的约束h3后,精确解变为v3,再加入新的约束h4后,精确解为v4=v3。

在这里插入图片描述

   我们对上述过程进行总结,当我们加入一个新的约束 h i h_i hi时,若已知在约束 h 1 h_1 h1 ~ h i − 1 h_{i-1} hi1下的最优解为 v i − 1 v_{i-1} vi1,基于这些信息,如何获取加入新的约束 h i h_i hi后的最优解 v i v_i vi,可分为两种情况:

   ① 若 v i − 1 v_{i-1} vi1属于新加入的约束 h i h_i hi对应的半空间内,即加入新约束 h i h_i hi后, v i − 1 v_{i-1} vi1依然在可行域中,此时最优解不变, v i v_{i} vi= v i − 1 v_{i-1} vi1

   ② 若 v i − 1 v_{i-1} vi1不属于新加入的约束 h i h_i hi对应的半空间内,即加入新约束 h i h_i hi后, v i − 1 v_{i-1} vi1已经不在可行域中了,此时新的最优解 v i v_{i} vi必然位于新加入的约束 h i h_i hi的边界与之前某个约束的边界相交的顶点上,退一步来说,此时新的最优解 v i v_{i} vi必然位于新约束 h i h_i hi的边界 l i l_i li上,此时,我们可以把之前所有的约束 h 1 h_1 h1 ~ h i − 1 h_{i-1} hi1投影到 l i l_i li上,转化为上面介绍的一维的情况,即在一维线区域 l i l_i li上寻求满足各个约束投影的区间的交集,再配合目标函数,即可得到此时的最优解 v i v_{i} vi

在这里插入图片描述

   如果我们随机化约束条件的输入顺序,采用以上增量式方法进行求解,理论上期望的时间复杂度是线性的。

在这里插入图片描述

   可以使用Fisher-Yates算法对约束条件的顺序进行打乱,Fisher-Yates算法的目标是给定一个n,随机生成一个1 ~ n 的排列,给定n后,有n!,即n的阶乘种可能的排列,Fisher-Yates算法生成任意一种排列的概率是相同的,每种排列的可能性都是1/(n!)

   用C++实现时,可以使用 < random >库来实现生成1~m中任意一个整数的功能,来供Fisher-Yates算法调用。

   Fisher-Yates算法的流程如下:

   ①、首先初始化一个1~n的序列,该序列中第几个位置上的数就是几,如序列第n的位置上存放的数值就是n。

   ②、随机生成一个1~n之间的整数k1,将序列第k1位置上存放的数值,与序列第n个位置上存放的数值进行交换。

   ③、随机生成一个1~(n-1)之间的整数k2,将序列第k2位置上存放的数值,与序列第(n-1)位置上存放的数值进行交换。

  

  

  

   依次类推,直至随机生成1~2之间的一个数(kn-1),将序列第(kn-1)位置上存放的数值,与序列第2个位置上存放的数值进行交换。完成后,Fisher-Yates算法就生成了一个由整数1 ~ n构成 的排列。


   (3)更一般的d维情况(d一般是比较小的个位数)

   d维的LP线性规划的主要思想是,d维的线性规划在遇到新加入的超平面是Exact时,将其转换成d-1维的线性规划,这跟上面2维线性规划时转换成1维线性规划的思想是相同的,这种思想有点像递归的思想。

在这里插入图片描述

   上图中给出的伪代码中,输入参数H即不等式约束 a T x < = b a^\mathrm{T}x<=b aTx<=b,也即一系列半空间,输入参数c即 c T x c^\mathrm{T}x cTx中的系数,如果此时c的维度是一维的,则直接采用上文中介绍的一维情况的解决方法求解,若此时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’,然后将c也用高斯消元法投影到h上,得到低一个维度的c’,然后将低一个维度的H’和c’作为参数递归调用SeidelLP()函数本身进行降维处理,直至降为1维情况。然后就可以得到新的最优解x,此时约束h已经满足,将其添加到集合 I I I中,本轮循环结束,继续进行下一轮for循环,处理下一个约束h。

   for循环结束后,即可得到满足所有约束hi的最优解x


   当d的维数较大时,比如d是20维的,深层次的递归调用可能出现复杂度爆炸,但当d的维数是个位数时,可以高效率的得到精确解。


   接下来借助下图中的例子,来看一下如何使用高斯消元法将d维的半空间,投影成d-1维的半空间:

在这里插入图片描述


   Seidel′s LP线性规划可以高效的处理维度不高,约束很多的情况,可以得到高效率的精确解。下图给出了一些应用实例

在这里插入图片描述

   (1)线性可分问题:假设图中红色凸多边形是障碍物,蓝色凸多边形是机器人或机器人的一部分,现在想要知道机器人是否与障碍物发生了碰撞,可以将障碍物的顶点及其内部的一些冗余点vi与机器人的顶点及其内部的一些冗余点wi,若他们不碰撞,那必然存在一个分离超平面,设该超平面为 a T x < = b a^\mathrm{T}x<=b aTx<=b,则机器人满足 a T w i < = b a^\mathrm{T}w_{i}<=b aTwi<=b,障碍物满足 a T v i > = b a^\mathrm{T}v_{i}>=b aTvi=b,在这两组约束下,求解目标函数 c T x c^\mathrm{T}x cTx,这里的x即为a,b构成的向量,c可设成0向量。可求得任意一个可行超平面,说明两者没有碰撞。Seidel′s LP线性规划可以很好的用于检测机器人是否与障碍物发生了碰撞。

在这里插入图片描述

在这里插入图片描述


   (2)圆形可分问题,在工业流水线的机器视觉中有时需要判断是否存在一个圆来分隔两种点集,如下图中的蓝色点集和红色点集

在这里插入图片描述
   可以进行升维处理,将圆形区域作为增加的维度,下图等式中右侧是一个线性可分问题,若右侧表达式线性可分,则左侧表达式存在圆形来分隔两个点集

在这里插入图片描述


   (3)在安全区域中找一个点,距离安全区域的边界的距离最大化,即在安全区域中找一个圆,使得该圆的半径最大化,即最小的碰撞距离最大化,此时圆心即为所求的最安全的点。

在这里插入图片描述



   参考资料:

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

   2、机器人中的数值优化



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

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

相关文章

移动端App持续集成体系构建实战

这里写目录标题 一、目标1、前言2、优势&#xff1a;3、涉及技术点4、目标 二、测试app构建、打包过程1、安卓打包的环境要求 三、演示安卓源码打包四、演示安卓App部署1、前提条件2、命令控制apk安装与卸载 五、安卓UI自动化测试1、Appium app自动化测试-Python2、实现的验证点…

Vue3+Ts实现父子组件间传值的两种方式

文章目录 写在前面1、v-modelemit传值1.1父向子传递数据1.2子向父传递数据 2、使用v-bindemit2.1父向子传递数据2.2子向父传递数据 总结 写在前面 对于常用的组件间传参最近有了有点小心得总结一下&#xff0c;主要是两种子向父组件传参的方式总结。欢迎评论区讨论 概览&…

Linux的服务器日志分析及性能调优

作为网络安全和数据传输的重要环节&#xff0c;代理服务器在现代互联网中扮演着至关重要的角色。然而&#xff0c;在高负载情况下&#xff0c;代理服务器可能面临性能瓶颈和效率问题。本文将介绍如何利用Linux系统对代理服务器进行日志分析&#xff0c;并提供一些实用技巧来优化…

数组模拟实现环形队列

目录 前言 一、什么是队列? 二、数组模拟非环形队列的实现 三 . 数组模拟环形队列 总结 前言 笔者: 最爱吃兽奶 博文内容: 数据结构队列的模拟实现 这篇博客理解起来或许没有那么简单,我尽力讲的容易理解一点,接下来跟我一起去看看吧! 一、什么是队列? 队列是一种特殊…

#452. 序列操作

序列操作 - 题目 - Daimayuan Online Judge 问题描述&#xff1a; 思路&#xff1a;首先想的是第二次操作的y可以将前面所以操作进行抵消&#xff0c;只需要第二次操作的最大值即可。但是发现&#xff0c;对于第一个操作&#xff0c;它是单点修改&#xff0c;每修改一次对于第…

2023年7月京东投影仪行业品牌销售排行榜(京东大数据)

鲸参谋监测的京东平台7月份投影仪行业销售数据已出炉&#xff01; 7月份&#xff0c;投影仪市场呈现增长趋势。根据鲸参谋平台的数据可知&#xff0c;7月京东平台投影仪的销量将近20万&#xff0c;同比增长约16%&#xff1b;销售额将近3.8亿&#xff0c;同比增长约4%。 ​*数据…

机器人中的数值优化(十一)——高斯牛顿法、LMF方法、Dogleg方法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

MySQL——MySQL的基础操作部分

使用命令行登录 mysql -u root -p 直接敲击回车后输入密码即可&#xff1a; 当看到出现“mysql>“的符号之后&#xff0c;就表示已经进入到了&#xff2d;&#xff59;&#xff33;&#xff31;&#xff2c;系统中&#xff0c;就可以输入&#xff2d;&#xff59;&#xf…

Streamlit项目:乐高风格马赛克设计工坊~打造个性化马赛克图案的平台

文章目录 1 前言2 项目概述2.1 项目背景和目标2.2 功能和特性2.3 技术实现2.4 开发计划2.5 预期成果2.6 应用场景 3 使用指南3.1 源代码使用指南3.2 普通网页用户使用指南3.3 文件保存3.3.1 导出图像文件3.3.2 获取像素RGB数据 3.4 注意事项 4 实现细节4.1 准备工作4.2 编写代码…

如何手动读取 GLTF/GLB 文件

推荐&#xff1a;使用NSDT场景编辑器快速搭建3D应用场景 文件类型 GLTF文件有两种不同的主要文件类型&#xff1a;.gltf和.glb。 GLTF文件本质上只是一个重新命名的json文件&#xff0c;它们通常与包含顶点数据等内容的.bin文件相提并论&#xff0c;但这些内容也可以直接包含…

聊聊大模型位置编码及其外推性

作者 | 王嘉宁 整理 | NewBeeNLP https://wjn1996.blog.csdn.net/article/details/131753251 大家好&#xff0c;这里是 NewBeeNLP。 现如今很多大模型都开始支持超过4096长度的推理&#xff0c;例如GPT-4支持超过30k&#xff0c;ChatGLM2-6B也支持最长为32K的文本。但是由于显…

CentOS7安装时直接跳过了安装信息摘要页面的解决方法

最近在配置Hadoop虚拟机的时候&#xff0c;创建的centos7虚拟机在安装信息摘要时直接自动跳过&#xff0c;直接跳到设置用户名和密码&#xff0c;在重复多次的重新删除安装后发现了问题所在&#xff1a; 在进行到选择操作系统来源时&#xff0c;注意是否出现“该操作系统将使用…

matplotlib设置绘图中文标记

项目场景 使用matplotlib时为图形设置x轴标记&#xff0c;y轴标记&#xff0c;标题默认只能使用英文&#xff0c;当使用中文时会出现以下错误&#xff1a; UserWarning: Glyph 32654 (\N{CJK UNIFIED IDEOGRAPH-7F8E}) missing from current font. 解决方法 在引入matplotl…

成功的硬件公司不仅是产品,更是一种创新文化

目录 内容简介 客户 建立公司&#xff0c;而不仅仅是产品 CSDN学院 作者简介 内容简介 很多时候&#xff0c;你决定去做一件事、一款产品&#xff0c;往往都始于一个想法、一个灵感。 然后&#xff0c;许多硬件创业者会花费数月、甚至是数年的时间来确定并分析他们的想法…

基于ITIL的ITSM工具

随着企业的ITSM(IT服务管理)的逐渐成熟进而深入应用&#xff0c;如果您希望以低成本寻找一款基于ITIL的ITSM管理工具&#xff0c;然后那么卓豪ServiceDesk Plus将是您性价比高的免费ITSM、工单系统选择。因为它提供全面的ITSM和资产管理能力&#xff0c;更重要的是&#xff0c;…

java八股文面试[多线程]——CompletableFuture

1 CompletableFuture介绍 平时多线程开发一般就是使用Runnable&#xff0c;Callable&#xff0c;Thread&#xff0c;FutureTask&#xff0c;ThreadPoolExecutor这些内容和并发编程息息相关。相对来对来说成本都不高&#xff0c;多多使用是可以熟悉这些内容。这些内容组合在一起…

全国唯一一所初试考Java的学校!平均300分拿下

苏州科技大学 考研难度&#xff08;☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分析&#xff09;、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1187字&#xff0c;预计阅读&#xff1a;3分钟 2023考情概况 苏州科技…

澳大利亚纽扣电池/含纽扣电池商品合规认证详细解答

近期收到很多客户前来咨询亚马逊澳洲站纽扣电池或含纽扣电池商品的合规性认证&#xff0c;和我说我做了认证了&#xff0c;为什么还是审核不通过&#xff0c;审核被拒呢&#xff1f; 一般是两种情况&#xff1a; 一&#xff1a;检测标准没有做对或对亚马逊合规政策的标准有误…

四川玖璨电子商务有限公司:短视频及直播运营

​ &#xfeff;短视频及直播运营是当下最火热的互联网行业之一&#xff0c;它以轻松、有趣的方式改变了人们的生活和娱乐方式。作为一名短视频及直播运营实训学员&#xff0c;我有幸得到了具体的操作指导和实践机会&#xff0c;让我对这个行业有了更深入的了解。 在短视频及直…

怎么激活IDM

IDM是一个下载软件。 激活它需要用到git上面的一个项目&#xff0c;同时网络要能连到github GitHub - lstprjct/IDM-Activation-Script: IDM Activation & Trail Reset Script WINR 输入powershell 输入命令行 iex(irm is.gd/idm_reset) 或者 iwr -useb https://raw.…