智能驾驶规划控制理论学习06-基于优化的规划方法

news2025/1/20 18:29:25

目录

一、优化概念

1、一般优化问题

2、全局最优和局部最优        

二、无约束优化

1、无约束优化概述

 2、梯度方法        

通用框架

线性搜索 

 回溯搜索

3、梯度下降

基本思想

实现流程

​4、牛顿法

基本思想

实现流程

5、高斯牛顿法 

6、LM法(Levenberg-Marquardt Method) 

 三、二次规划

 1、凸函数与凸集合

2、凸优化问题 

3、二次规划

四、非线性规划问题 


一、优化概念

1、一般优化问题

        对于一般优化问题可以如下表述:

        式中 f(x) 是目标函数,x是想要求解的决策变量,S是可行域,subject中的内容是关于变量的约束条件,由等式约束或不等式约束构成。

        举一个简单的例子,如下图所示:

2、全局最优和局部最优        

        全局最优对应上图中的global minimum,是在整段函数上取得的最小值,而局部最优则对应的是在一个小的邻域中寻找最小值,与之相对应的有强局部最优和弱局部最优。强局部最优严格要求邻域内的其他点对应的函数值大于最小值,而弱局部最优要求邻域内的其他点对应的函数值大于等于最小值。

二、无约束优化

1、无约束优化概述

        无约束优化是优化问题中一类较为容易解决的问题,在无约束优化中我们只需要找到最小化的目标函数和其依赖的变量,对于这些变量的值没有任何限制。最简单的数学表达式如下:

        当函数f(x)是可微的,x是局部最优解的必要条件是当前x的梯度为0。

        用来解决无约束优化问题的梯度法有如下几种:

  • 梯度下降法
  • 牛顿法
  • 高斯牛顿法
  • Levenberg-Marquardt Method

 2、梯度方法        

通用框架

        对于一般的梯度方法可以用如下迭代公式:

x^{(k+1)}=x^{(k)}+\alpha ^{(k)}\Delta x^{(k)}

        式中x表示优化变量,x^{(k)}表示第k次迭代优化变量的取值,\Delta x^{(k)}表示第k次迭代下降的方向,\alpha ^{(k)} 表示关于下降方向的步长。

        我们期望每经过一步,函数值下降,f (x^{(k+1)}) < f(x^{(k)})

        重复迭代过程直到满足某个收敛的条件,关于收敛条件有如下三种常见的定义:

  • \left \| x^{(i+1)}-x^{(i)} \right \|<\varepsilon
  • \left \| x^{(i+1)}-x^{(i)} \right \|/\left \| x^{(i)} \right \|<\varepsilon
  • \left | f(x^{(i+1)})-f(x^{(i)}) \right | \leq \varepsilon

        在工程上我们往往会使用多种收敛条件的组合进行判断。

线性搜索 

        关于步长α可以通过线性搜索的方式取得,将该过程抽象为数学表达式如下:

\phi (\alpha )=f(x_{k}+\alpha p_{k}), \alpha >0

        式中 x_{k}表示第k次迭代优化变量的取值,p_{k}表示第k次迭代下降的方向,对于线性搜索p_{k}是一个已知量,步长α就是我们要求解的未知量。

        线性搜索可分为精确线性搜索和非精确线性搜索:

  • 精确线性搜索:\phi (\alpha ) = argmin_{\alpha >0}f(x_{k}+\alpha p_{k}),该函数表达的是要在给定下降方向上找到一个精确到α值使得函数值达到最小;

        在工程实际中,对于一个复杂的目标函数我们很难直到一个准确的方向,想要通过一个近似得到的方向获得精确的步长显示是不合理的。

  • 非精确线性搜索:不必严格寻找使得整体代价值最小的步长,只要代价值小于一定值就可以接受,如下图所示有两个满足条件的区间,相比较而言,非精确的线性搜索更加高效。

 回溯搜索

        图中横轴t表示步长,下降方向△x对于某一点是已知的,在起点对其做泰勒展开可以得到一条切线,将切线乘对应的α因子可以得到放缓的线条。

        对于回溯法,只要搜索得到的点在两条虚线之间就认为有效。具体的判断如下:

         \alpha \epsilon (0,0.5), \beta \epsilon (0,1), t:=1

        while f(x+t\triangle x) > f(x) + \alpha t\bigtriangledown f(x)^{T}\triangle x, t:=\beta t 

3、梯度下降

基本思想

        在高等数学中我们学过梯度方向是一个函数值增长最快的方向,对应上图中的steepest ascent,而想要让代价函数的下降值最快则要沿着负梯度方向,梯度下降正是依赖于这种思想。

        对于上图的二维函数,使用迭代框架,从起始点x0开始,每一步都朝着负梯度方向前进。

实现流程

 4、牛顿法

基本思想

        相比于梯度下降这种一阶的方法(只用到了梯度的信息),牛顿法是一个二阶的方法。用一维函数来简述牛顿法的步骤:

        第一步是在当前点进行二阶的泰勒展开;通过第二步是通过泰勒展开的方式对原函数进行近似,我们想利用二次函数的最优质找到合适的下降方向因此通过将第二步中得到的函数对\delta进行求导即可到达第三步中的梯度函数;通过移项等方式得到最终第四步\delta的表达式。

实现流程

        牛顿法的伪代码实现与梯度下降方式基本一致,只是牛顿法的前提是函数二阶可导,而梯度下降法只要一阶可导。

5、高斯牛顿法 

        高斯牛顿法是牛顿法的优化,它的最小化成本函数基于最小二乘的思想:

f(x)=\sum_{i=1}^{m}(f_{i}(x))^{2}

        将累计求和的形式转换成向量的形式:

min\left \| F(x) \right \|^{2}, F(x)=\begin{pmatrix} f_{1}(x)\\ \vdots \\ f_{m}(x) \end{pmatrix}

        对F(x)向量进行一阶展开,得到:

F(x+\delta )=F(x)+J_{F}(x)\delta 

        再将展开得到的式子代入:

min\left \| F(x)+J_{F}(x\delta ) \right \|^{2}

        将平方项展开后对\delta进行求导记得可到高斯牛顿的搜索方向:

\delta = -(J^{T}J)^{-1}J^{T}F

        将高斯牛顿得到的结果与牛顿法得到的结果\delta = -(H_{f}(x))^{-1}\bigtriangledown f(x)进行对比,高斯牛电脑中J是表示F(x)函数的梯度,J^{T}J等效于牛顿法中的H_{f}(x),而后面的J^{T}F等效于牛顿法中的梯度。之所要有这样替代的操作,是因为当优化变量非常多时,在每一步迭代用牛顿法计算H_{f}(x)是非常耗时的操作。

        具体伪代码的实现流程如下:

6、LM法(Levenberg-Marquardt Method) 

         LM法是高斯牛顿法的优化,在高斯牛顿法中可能会出现J^{T}J是一个奇异矩阵或存在病态条件,此时下降方向的稳定性较差,导致算法出现发散。

        LM法通过引入参数\lambda在梯度下降法和高斯牛顿法之间做动态地调整,公式如下:

(J^{T}J+\lambda diag(J^{T}J))\delta _{lm}=Jf 

 三、二次规划

 1、凸函数与凸集合

         凸函数在数学上的精确定义如下:

         在某个向量空间的凸子集中,有任意两个向量x,y有:

f(tx+(1-t)y)\leq tf(x)+(1-t)f(y), for 0\leq t\leq 1

        简单来说,就是f函数的值在连接f(x)和f(y)的线段下方;

        对于凸集合,有如下定义:

        对于一个集合C,若对于任意x,y∈C,有tx+(1-t)y\varepsilon C, for all 0\leq t\leq 1

        简单来说,对于凸集合内的任意两点,链接该对点的直线段上的每一个点也在这个集合内。如下图左侧就是一个凸集合,右侧就不是凸集合。

2、凸优化问题 

        对于上述优化处理,若满足f_{0},f_{1},\cdots ,f_{m}都是凸函数,那么这种规划就是凸优化。

        凸优化有以下几个优点:

  • 可行集是凸集合;
  • 凸函数的局部最优解必定是全局最优解
  • 在理论和工程实际中,相比较其他优化方法,凸优化是比较好处理的。因此在自动驾驶规划领域,我们很多时候也会把问题建模成凸优化问题。

        下面简单介绍几种在凸优化领域方法的定义:

  • LP:linear program(线性规划)
  • QP: quadratic program(二次规划)
  • SOCP: second-order cone program(二阶锥规划)
  • SDP: semidefinite program(半定规划)
  • CP: cone program(锥规划)

        本节我们主要关注二次规划问题。

3、二次规划

          本节不重点二次规划原理和具体实现流程,主要将在工程实际中如何处理类似的二次规划问题。        

        QSOP求解器是一个数值优化包,用于求解形式为凸的二次规划。

         具体到代码层面来说:

四、非线性规划问题 

        此处的非线性主要指的是目标函数和约束都是非凸的。

        求解非线性规划问题有:

  • 顺序二次规划(SQP)
  • 内点法(IPM)

        同样在工程上也有直接处理非线性规划问题的处理器——Ipop,该处理器基于内点法,主要思想是:

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

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

相关文章

怎么判断晶振是否起振?晶振不起振该怎么办?

如果怀疑晶振不起振造成电路板上电不良&#xff0c;该如何进一步判定是晶振本身的不良呢?这一步的判定非常关键&#xff0c;因为若为晶振不振&#xff0c;就可以排除晶振与电路板不匹配造成电路板上电不良发生的假定。晶发电子以下介绍针对晶振单体判定的方法&#xff1a; 1.…

Python内置模块

目录 什么是模块 模块分类 通过模块创建者分类 系统内置模块 第三方模块 在线安装 离线安装 模块导入 math和random模块介绍 math模块 random模块 什么是模块 在我们编写程序时&#xff0c;需要导入包。例如随机数的产生&#xff0c;需要import random。import XXX&…

C++引入

引用不是新定义一个变量&#xff0c;而是给已经存在的变量取一个别名&#xff0c;编译器不会为了引用变量开辟内存空间&#xff0c;它和它引用的变量公用同一块内存空间。如李白被称为诗仙。李白和诗仙都是同一个人。 语法: 类型& 引用变量名(对象名)引用实体; 特性: 引用在…

一体化对账和结算平台的设计与实现

随着企业规模的扩大和业务的复杂化&#xff0c;对账和结算工作变得愈发繁琐和复杂。为了提高工作效率和降低错误率&#xff0c;许多企业开始寻求一体化对账和结算平台的解决方案。本文将探讨一体化对账和结算平台的设计原则和实施步骤&#xff0c;以及其在企业管理中的重要性。…

Canvas笔记04:绘制九大基本图形的方法,重头戏是贝塞尔曲线

hello&#xff0c;我是贝格前端工场&#xff0c;最近在学习canvas&#xff0c;分享一些canvas的一些知识点笔记&#xff0c;本期分享canvas绘制图形的知识&#xff0c;欢迎老铁们一同学习&#xff0c;欢迎关注&#xff0c;如有前端项目可以私信贝格。 Canvas是HTML5中的一个绘…

全方位碾压chatGPT4的全球最强模型Claude 3发布!速通指南在此!保姆级教学拿脚都能学会!

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

HTML静态网页成品作业(HTML+CSS)——舞蹈网页设计制作(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码CSS部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 &#x1…

CogCaliperTool卡尺工具

CogCaliperTool(卡尺工具) CogCaliperTool&#xff08;卡尺工具&#xff09;是一种用于测量直线特征的工具。该工具通常用于检测图像中的边缘、轮廓或其他直线特征&#xff0c;并提供精确的测量数据&#xff0c;如长度、角度和位置信息。 比如说我们需要测量下图工具的边缘对…

Typescript的联合类型和交叉类型

联合类型 在 TypeScript 中&#xff0c;可以使用联合类型来定义对象接口&#xff0c;从而表示一个对象可以具有多种不同结构的类型。联合类型是或的关系!!! interface Circle {kind: "circle";radius: number; }interface Square {kind: "square";sideLe…

Positional Encoding 位置编码

Positional Encoding 位置编码 flyfish Transformer模型没有使用循环神经网络&#xff0c;无法从序列中学习到位置信息&#xff0c;并且它是并行结构&#xff0c;不是按位置来处理序列的&#xff0c;所以为输入序列加入了位置编码&#xff0c;将每个词的位置加入到了词向量中…

C 嵌入式系统设计模式 20:队列模式

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述嵌入式并发和资源管理模式之六…

Docker容器化解决方案(进程管理操作)

kill 杀死一个或多个正在运行的容器 语法格式 docker kill [OPTIONS] CONTAINER [CONTAINER...] 重点: docker kill子命令可杀死一个或多个容器向容器内部的主进程发送SIGKILL 信号&#xff08;默认&#xff09;&#xff0c;或使用 --signal选项指定的信号 说明 options作…

微信jsSDK前端签名错误,巨坑; 前后端分离的一大失误。

微信 JS 接口签名校验工具 1. 确保你后端生成的签名是正确&#xff0c;这个是第一步。否则后面都是白扯。 以用上面微信自带的验证签名工龄进行验证。 确保生成的签名和你的签名是一致的。 2. timestamp需要是字符串类型. 3. 切记&#xff0c;URL不要encode&#xff0c;如果…

Redis核心数据结构之SDS和链表(三)

SDS与C字符串的区别 二进制安全 C字符串中的字符必须符合某种编码(比如ASCII),并且除了字符串的末尾之外&#xff0c;字符串里面不能包含空字符&#xff0c;否则最先被程序读入的空字符将被误认为是字符串结尾&#xff0c;这些限制使得C字符串只能保存文本数据&#xff0c;而…

fastadmin自定义弹出框的回调问题

使用了 vue 更改了 fastadmin 项目的列表页面 但是&#xff0c;当点击 添加时&#xff0c; 弹出 fastadmin 的弹出框&#xff0c;添加也是fastadmin 自带的 上面的代码有点不如意的地方&#xff0c;就是 当我们新增完成之后&#xff0c; 在关闭弹出窗时&#xff0c;想让当前…

keycloak18.0.0==本地源码启动

github下载源码&#xff0c; 版本18.0.0 java和maven的版本如下 E:\keycloak-18.0.0>java -version java version "21.0.1" 2023-10-17 LTS Java(TM) SE Runtime Environment (build 21.0.112-LTS-29) Java HotSpot(TM) 64-Bit Server VM (build 21.0.112-LTS-…

Qt QPainter的使用方法

重点&#xff1a; 1.QPainter在QWidget窗口的paintEvent中使用。 2.QPainter通常涉及到设置画笔、设置画刷、绘图&#xff08;QPen、QBrush、drawxx&#xff09;三个流程。 class Widget : public QWidget {Q_OBJECTprotected:void paintEvent(QPaintEvent *event) Q_DEC…

Linux第71步_将linux中的多个文件编译成一个驱动模块

学习目的&#xff1a;采用旧字符设备测试linux系统点灯&#xff0c;进一步熟悉其设计原理。采用多文件参与编译&#xff0c;深度学习编写Makefile&#xff0c;有利于实现驱动模块化设计。 1、创建MyOldLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home…

个人健康管理系统|基于微信小程序的个人健康管理系统设计与实现(源码+数据库+文档)

个人健康管理小程序目录 目录 基于微信小程序的个人健康管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2 运动教程管理 3、公告信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设…

2024最新算法:斑翠鸟优化算法(Pied Kingfisher Optimizer ,PKO)求解23个基准函数

一、斑翠鸟优化算法 斑翠鸟优化算法&#xff08;Pied Kingfisher Optimizer ,PKO&#xff09;&#xff0c;是由Abdelazim Hussien于2024年提出的一种基于群体的新型元启发式算法&#xff0c;它从自然界中观察到的斑翠鸟独特的狩猎行为和共生关系中汲取灵感。PKO 算法围绕三个不…