约束优化:约束优化的三种序列无约束优化方法

news2024/7/6 19:09:29

文章目录

  • 约束优化:约束优化的三种序列无约束优化方法
    • 外点罚函数法
      • L2-罚函数法:非精确算法
        • 对于等式约束
        • 对于不等式约束
      • L1-罚函数法:精确算法
    • 内点罚函数法:障碍函数法
    • 等式约束优化问题的拉格朗日函数法:Uzawa's Method for convex optimization
    • 参考文献

约束优化:约束优化的三种序列无约束优化方法

罚函数法是指将约束作为惩罚项加到目标函数中,从而转化成熟悉的无约束优化问题。

外点罚函数法

简而言之,外点罚函数法是指对于可行域外的点,惩罚项为正,即对该点进行惩罚;对于可行域内的点,惩罚项为0,即不做任何惩罚。因此,该算法在迭代过程中点列一般处于可行域之外,惩罚项会促使无约束优化问题的解落在可行域内。罚函数一般由约束部分乘正系数组成,通过增大该系数,我们可以更严厉地惩罚违反约束的行为,从而迫使惩罚函数的最小值更接近约束问题的可行区域。

L2-罚函数法:非精确算法

对于等式约束

在这里插入图片描述 在这里插入图片描述

对于不等式约束

在这里插入图片描述 在这里插入图片描述

对于一般优化问题,则是将上述不等式约束和等式约束的惩罚项加到一起。

在这里插入图片描述

什么情况下使用L2-罚函数法?

  • 实际优化问题中,等式与不等式约束具有物理意义;
  • 约束违背量不要求特别小,在1e-2~1e-3之间可接受就行。例如某优化问题中速度约束 v ≤ 10 v \leq 10 v10,解 v = 10.01 v=10.01 v=10.01也可以接受。

使用该方法时,可采用如下两种方式:

  • 一步到位,即取 σ \sigma σ足够大,直接解无约束罚函数P最优化问题,此时P最优解是个近似解,与实际最优解之间的误差在可接受范围内;
  • 序列迭代优化,例如:

σ = 1    ⟹    P ( x , 1 ) \sigma=1 \implies P(x,1) σ=1P(x,1),解 x 1 ∗ = x 1 x^{*}_{1}=x_1 x1=x1;

σ = 10    ⟹    P ( x , 10 ) \sigma=10 \implies P(x,10) σ=10P(x,10),上一次迭代 x 1 x_1 x1作初值解 x 2 ∗ = x 2 x^{*}_{2}=x_2 x2=x2;

σ = 100    ⟹    P ( x , 100 ) \sigma=100 \implies P(x,100) σ=100P(x,100),上一次迭代 x 2 x_2 x2作初值解 x 3 ∗ = x 3 x^{*}_{3}=x_3 x3=x3;

​ ……直到达到收敛准则。算法伪代码如下:

在这里插入图片描述

一般情况下,具体选择何种方式取决于实际工程问题的精度需求和速度需求。

L2-罚函数法的优缺点?

优点:

  • 将约束优化问题转化为无约束优化问题,当 c i ( x ) c_i(x) ci(x)光滑时可以调用一般的无约束光滑优化问题算法求解;
  • 二次罚函数形式简洁直观而在实际中广泛使用。

缺点:

  • 需要 σ → ∞ \sigma \rightarrow \infty σ,此时海瑟矩阵条件数过大,对于无约束优化问题的数值方法拟牛顿法与共轭梯度法存在数值困难,且需要多次迭代求解子问题;
  • 对于存在不等式约束的 P ( x , σ ) P(x,\sigma) P(x,σ)可能不存在二次可微性质,光滑性降低;
  • 不精确,与原问题最优解存在距离。

例子:

在这里插入图片描述 在这里插入图片描述

L1-罚函数法:精确算法

由于L2-罚函数法存在数值困难,并且与原问题的解存在误差,因此考虑精确罚函数法。精确罚函数是一种问题求解时不需要令罚因子趋于正无穷(或零)的罚函数。换句话说,若罚因子选取适当,对罚函数进行极小化得到的解恰好就是原问题的精确解。这个性质在设计算法时非常有用,使用精确罚函数的算法通常会有比较好的性质。

由于L1-罚函数非光滑,因此无约束优化问题P的收敛速度无法保证,这实际上就相当于用牺牲收敛速度的方式来换取优化问题P的精确最优解。

在这里插入图片描述

内点罚函数法:障碍函数法

前面介绍的L1和L2罚函数均属于外点罚函数,即在求解过程中允许自变量 x x x位于原问题可行域之外,当罚因子趋于无穷时,子问题最优解序列从可行域外部逼近最优解。自然地,如果我们想要使得子问题最优解序列从可行域内部逼近最优解,则需要构造内点罚函数。顾名思义,内点罚函数在迭代时始终要求自变量 x x x不能违反约束,因此它主要用于不等式约束优化问题

如下图所示,考虑含不等式约束的优化问题,为了使迭代点始终在可行域内,当迭代点趋于可行域边界时,我们需要罚函数趋于正无穷。常见的罚函数有三种:对数罚函数,逆罚函数和指数罚函数。对于原问题,它的最优解通常位于可行域边界,即 c i ( x ) ≤ 0 c_i(x) \leq 0 ci(x)0中至少有一个取到等号,此时需要调整惩罚因子 σ \sigma σ使其趋于0,这会减弱障碍罚函数在边界附近的惩罚效果。

在这里插入图片描述

算法伪代码如下:

在这里插入图片描述

同样地,内点罚函数法也会有类似外点罚函数法的数值困难,即当 σ \sigma σ趋于0时,子问题 P ( x , σ ) P(x,\sigma) P(x,σ)的海瑟矩阵条件数会趋于无穷,因此对子问题的求解将会越来越困难。

在这里插入图片描述

等式约束优化问题的拉格朗日函数法:Uzawa’s Method for convex optimization

基础预备:

凸优化学习笔记(一)

凸优化学习笔记:Lagrange函数、对偶函数、对偶问题、KKT条件

多元函数的极值和鞍点

**若原问题是凸问题,则KKT条件是充要条件。**原问题连续凸则拉格朗日函数严格凸,原问题的最优值 p ∗ p^* p与对偶问题的最优值 d ∗ d^* d相等, ( x ∗ , λ ∗ ) (x^*,\lambda ^*) (x,λ)是拉格朗日函数的鞍点,同时也是原问题和对偶问题的最优解。

在这里插入图片描述 在这里插入图片描述

综上分析,Uzawa’s Method迭代过程分为两个步骤:
{ x k + 1 = argmin ⁡ x L ( x , λ k ) λ k + 1 = λ k + α ( A x k + 1 − b ) \left\{\begin{array}{l} x^{k+1}=\underset{x}{\operatorname{argmin}} \mathcal{L}\left(x, \lambda^k\right) \\ \lambda^{k+1}=\lambda^k+\alpha\left(A x^{k+1}-b\right) \end{array}\right. {xk+1=xargminL(x,λk)λk+1=λk+α(Axk+1b)
(1)给定 λ k \lambda^k λk,求解 min ⁡ x L ( x , λ k ) \min _x \mathcal{L}(x, \lambda^k) minxL(x,λk)无约束优化问题,求解得到 x k + 1 x^{k+1} xk+1

(2)更新 λ \lambda λ L ( x k + 1 , λ ) L(x^{k+1},\lambda) L(xk+1,λ)关于 λ \lambda λ的梯度为 ∂ L ∂ λ ∣ x + 1 = A x k + 1 − b \left.\frac{\partial L}{\partial \lambda}\right|_{x+1}=A x^{k+1}-b λL x+1=Axk+1b,若要求解 max ⁡ λ L ( x k + 1 , λ ) \max _\lambda \mathcal{L}(x^{k+1}, \lambda) maxλL(xk+1,λ),则沿着梯度上升方向进入步长迭代,即 λ k + 1 = λ k + α ( A x k + 1 − b ) \lambda^{k+1}=\lambda^k+\alpha\left(A x^{k+1}-b\right) λk+1=λk+α(Axk+1b) α \alpha α为迭代步长。

该方法的前提就是原函数连续凸, L ( x , λ ) \mathcal L(x,\lambda) L(x,λ)关于 x x x严格凸,则 min ⁡ x L ( x , λ k ) \min _x \mathcal{L}(x, \lambda^k) minxL(x,λk)只存在一个最优解,可求出唯一 x k + 1 x^{k+1} xk+1进而更新 λ k + 1 \lambda^{k+1} λk+1,否则 x k + 1 x^{k+1} xk+1会存在多个,不知道选择哪个去更新 λ \lambda λ。因此缺点很明显,该方法要求原函数必须为连续凸函数,梯度上升步长需要调整且收敛速率不能保证。


参考文献

机器人中的数值优化

最优化:建模、算法与理论/最优化计算方法

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

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

相关文章

Win10 环境 安卓ollvm编译与配置 ndk代码混淆加密

确定你正在使用的ndk版本 查看build.gradle ndkVersion 21.4.7075529 确定你使用的ndk的ollvm版本 C:\Users\Administrator\AppData\Local\Android\Sdk\ndk\21.4.7075529\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-config.exe --version 9.0.9svn 确定了ollvm版本后…

Java序列化机制

Java序列化机制 概述 java中的序列化可能都停留在实现Serializable接口上,对于它里面的一些核心机制没有深入了解过。直到最近在项目中踩了一个坑,就是序列化对象添加一个字段以后,使用方系统报了反序列化失败,原因是我们双方的…

【ArcGIS Pro二次开发】(6):工程(Project)的基本操作

在ArcGIS Pro中我们对工程的基本操作一般包括打开、新建、保存等。下面演示在二次开发中如何用代码进行以上操作。 新建一个项目,命名为【ProjectManager】,添加8个按钮,命名为【CreateEmptyProject、CreateProjectByDefault、OpenExProjest…

易基因|MeRIP-seq揭示m6A RNA甲基化通过调控组蛋白泛素化来促进癌症生长和进展:Cancer Res

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。2022年05月16日,《Cancer Res》杂志发表了题为“M6A RNA Methylation Regulates Histone Ubiquitination to Support Cancer Growth and Progression”的研究论文,该…

Python解题 - CSDN周赛第30期 - 天然气订单

本期比赛的在线测试系统好像出了点问题,导致很多选手最后提交的分数是0,而问哥也遇到好几次提交后一直显示“运行中”而没有结果的情况。鉴于之前遇到过类似情况,不停地刷新页面才得以继续。但是此问题已经存在并持续了好几期,极大…

三、NetworkX工具包实战2——可视化【CS224W】(Datawhale组队学习)

开源内容:https://github.com/TommyZihao/zihao_course/tree/main/CS224W 子豪兄B 站视频:https://space.bilibili.com/1900783/channel/collectiondetail?sid915098 斯坦福官方课程主页:https://web.stanford.edu/class/cs224w NetworkX…

【Python--XML文件读写】XML文件读写详解

【Python–XML文件读写】XML文件读写详解 文章目录【Python--XML文件读写】XML文件读写详解1. 前言1.1 介绍1.2 用法2. xml文件内容形式3. xml文件读写3.1 项目框架3.1 写入操作(创建)(create_xml.py)3.2 读取操作(解析…

虚拟 DOM 详解

什么是虚拟 dom? 虚拟 dom 本质上就是一个普通的 JS 对象,用于描述视图的界面结构 在vue中,每个组件都有一个render函数,每个render函数都会返回一个虚拟 dom 树,这也就意味着每个组件都对应一棵虚拟 DOM 树 查看虚拟…

Linux docker(03)可使用GPU渲染的x11docker实战总结

该系列文章的目的旨在之前的章节基础上,使用x11docker构建一个可以使用GPU的docker容器。该容器可以用于3D图形渲染/XR 等使用GPU渲染的程序调试和运行。 0 why docker 为什么非要用x11docker,而不是其他的docker呢? 因为一般的docker是不…

这么好的政策和创新基地,年轻人有梦想你就来

周末有空去参观了下一个朋友办的公司。位置和环境真不错,且租金低的离谱,半年租金才2000元,且提供4个工位。这个创新基地真不赖啊,国家鼓励创新创业,助力年轻人实现梦想。场地有办公区,休息区应有尽有&…

linux集群技术(一)--LVS(负载均衡)(一)

集群功能分类负载均衡LVS概述LVS工作模式轮训算法 1.集群功能分类 1.1 LB (一)简介 LB:Load Balancing,负载均衡(增加处理能力),有一定高可用能力,但不是高可用集群,是以提高服务的…

CData Drivers for Avro v22

CData Drivers for Avro v22 从报告工具或数据库加入ApacheAvro。您还可以根据标准通过驱动程序连接到自定义应用程序。 与BI分析、报告、ETL工具和定制解决方案集成。 用于Avro的CData驱动程序功能强大: BI和分析 我们的驱动程序提供了将实时Avro数据连接到分析、B…

QT 设计一个串口调试工具,用一个工程就能轻松解决,外加虚拟串口工具模拟调试,在日常工作中可类比模块间通信,非常详细建议收藏

QT 串口调试工具第一节 虚拟串口工具安装第二节 QT创建一个基于QWidget的项目第三节 UI界面设计第三节 项目头文件widget.h第四节 项目实现文件widget.cpp第五节 main函数第六节 编译结果重点第七节 使用QT打包程序,不安装QT的电脑可使用第一节 虚拟串口工具安装 -…

【C++】模拟map和set以及改造红黑树

文章目录1、set和map的基础用法1.1 set的基本使用1.2 map的基本使用2、set和map的模拟实现2.1 建立map和set类2.1 红黑树的完善1、set和map的基础用法 stl中,像vector、list、deque等这样的容器,称之为序列式容器,其底层是线性序列的数据结构…

RabbitMQ学习(九):延迟队列

一、延迟队列概念延时队列中,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望 在指定时间到了以后或之前取出和处理。简单来说,延时队列就是用来存放需要在指定时间内被处理的 元素的队列。其实延迟…

005 利用fidder抓取app的api,获得股票数据

一、下载安装fidder 百度搜索fidder直接下载,按提示安装即可。 二、配置fidder 1. 打开fidder,选择tools——options。 2. 选择HTTPS选项卡,勾选前三项,然后点击右侧【actions】,选择【trust root certificate】&a…

七大排序经典排序算法

吾日三省吾身:高否?富否?帅否?答曰:否。滚去学习!!!(看完这篇文章先)目前只有C和C的功底,暂时还未开启新语言的学习,但是大同小异,语法都差不多。目录:一.排序定义二.排序…

fuzz测试之libfuzzer使用小结

fuzz测试之libfuzzer使用小结背景基本原理使用方法主调DEMO参考资料背景 项目中,为测试算法的鲁棒性,经常会用到fuzz测试进行压力测试。fuzz测试是一种模糊测试方法,本质是通过灌入各种变异的随机数据,去遍历不同函数分支&#xf…

蓝桥杯训练day1

前缀和差分1.前缀和(1)3956. 截断数组(2)795. 前缀和(3)796. 子矩阵的和(4)1230. K倍区间(5)99. 激光炸弹2.差分(1)797. 差分(2)差分矩阵(3)3729. 改变数组元素(4)100. 增减序列1.前缀和 (1)3956. 截断数组 方法1:暴力 先用两个数组分别保存前缀和,后缀…

如何快速、全面、深入地掌握一门编程语言

思考路线 如何快速? 什么样的Demo才能让人觉得你掌握了它? 空 判断:构造一个可以判断所有空的 is_empty 函数 for 循环:i 和 集合迭代两种 时间获取:年/月/日 时分秒 时间戳与时间格式互转 休眠时间函数 字符串处理…