优化问题的拉格朗日Lagrange对偶法原理

2023-11-20 16:10

本文主要是介绍优化问题的拉格朗日Lagrange对偶法原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先我们定义一般形式的求解x的优化问题:

\\ \text{ Minimize }\ f_o(x) \\ f_i(x)\leq 0, i=1,...,m \\ h_j(x)= 0, j=1,...n \\

  • f_o(x)表示优化的目标函数,上述为最小优化,实际上最大优化可以改写为-f_o(x)的形式
  • f_i(x)\leq 0表示第i个不等式约束
  • h_j(x)=0表示等式约束

1. Lagrange对偶问题

上述优化问题的拉格朗日Lagrange对偶法求解,是将上述带约束的目标优化问题改写为如下无约束的Lagrange函数式子。

L(x,\lambda ,\nu )=f_o(x) + \sum_i^m \lambda_i f_i(x) + \sum_j^n \nu_j h_j(x)

上述Lagrange函数式子存在如下对偶函数,其是Lagrange函数关于x取最小值,即:

g(\lambda ,\nu) = \underset{x}{inf}(L(x,\lambda ,\nu ))=\underset{x}{inf}(f(x) + \sum_i^m \lambda_i f_i(x) + \sum_j^n \nu_j h_j(x))

对偶函数是关于\lambda ,\nu的函数,很显然其是原来Lagrange函数式子的下界,假设优化问题存在最优解x^*,当\lambda_i\geq 0时,此时存在最优目标大于对偶函数。

f_o(x^*)>L(x^*,\lambda ,\nu )=f_o(x^*) + \sum_i^m \lambda_i f_i(x^*) + \sum_j^n \nu_j h_j(x^*)>=g(\lambda ,\nu)

Lagrange对偶法即是通过最大化原问题Lagrange对偶函数,从而逼近原问题的下界来求解原问题最优解,因为\lambda ,\nu的参数远小于原问题的求解参数,因此转换为对偶问题后,求解更为简单。

\\ \text{ Maximize }\ g(\lambda, \nu) \\ \lambda_i \geq 0, i=1,...,m

2. 强弱对偶性

接下来的问题是通过对偶函数得到下界d^*同原问题的最优解p^*之间的差距是多少?当对偶函数得到下界同原问题的最优解相等时,称之为强对偶性,反之称为弱对偶性。而这个差值称之为最优对偶间距

Slater约束准则给出为强对偶性成立的条件:

  • 原问题f_o(x)是凸问题
  • 存在内点使得所有的不等式约束严格成立即f_i(x) < 0,如果f_i(x)是仿射不等式时取等于也是可行的。

3. 如何转换为对偶函数

因为对偶函数g(\lambda ,\nu )是Lagrange函数关于x取最小值,假设L(x,\lambda ,\nu )是关于x的凸函数,且存在关于x的最小值,此时存在\hat{x}使得关于x的偏导数为0,则存在对偶函数为g(\lambda, \nu)=L(\hat{x},\lambda, \nu)

\frac{\partial }{\partial x}L(\hat{x},\lambda, \nu)=0

假设为对偶函数为g(\lambda, \nu)=L(\hat{x},\lambda, \nu)也是关于\lambda, \nu可导,此时最优值\lambda^*, \nu^*存在

\\ \frac{\partial }{\partial \lambda_i}g(\lambda^*, \nu^*)=f_i(\hat{x}) \leq 0 \\ \frac{\partial }{\partial \nu_j}g(\lambda^*, \nu^*)=h_j(\hat{x})=0

此外最优值\lambda^*, \nu^*要使对偶函数g(\lambda, \nu)存在最大值,由于\lambda_i\geq 0,因此:

\lambda_if_i(\hat{x})=0

上述五个条件构成了在Slater约束准则下求解优化问题最优解\hat{x}存在的KKT条件:

\begin{cases} \frac{\partial }{\partial x}L(\hat{x},\lambda, \nu)=0 \\ \frac{\partial }{\partial \lambda_i}g(\lambda^*, \nu^*)=f_i(\hat{x}) \leq 0 \\ \frac{\partial }{\partial \nu_j}g(\lambda^*, \nu^*)=h_j(\hat{x})=0 \\ \lambda_if_i(\hat{x})=0 \\ \lambda_i\geq 0 \end{cases}

例子1:线性规划问题

首先我们定义一个一般性的线性规划问题,其中x是表示求解向量[x_1,x_2,...,x_n],该问题可解是指存在唯一解。

\\ \text{ Minimize }\ c^T\cdot x \\ \text{subject: }A\cdot x \leq b

Lagrange函数式子表示为:

L(x,\lambda )=c^Tx + \lambda(Ax-b)=-\lambda b + (c^T + \lambda A)x

Lagrange函数仅当c^T + \lambda A=0时,才是有界的,此时对偶函数为g(\lambda )=-\lambda b,否则为负无穷,因此原问题可以转换为求解对偶问题g(\lambda )=-\lambda b的最大值,此时Slater约束准则,对偶问题的解也是原问题的最优解。

\\ \text{ Maximize }\ -\lambda b \\ \text{subject: }c^T + \lambda A=0 ,\ \lambda \geq 0

例子2:最小二乘法

考虑以下问题:

\\ \text{ Minimize }\ x^T\cdot x \\ \text{subject: }A\cdot x = b

Lagrange函数式子表示为:

L(x,\nu)=x^Tx + \nu^T(Ax-b)=-b\nu^T + x^Tx + \nu^T Ax

Lagrange函数关于x是二阶可导的凸函数,存在最小值的解\hat{x}

\frac{\partial }{\partial x}L(\hat{x},\lambda, \nu)=2\hat{x}+A^T\nu =0\rightarrow \hat{x}=-\frac{1}{2}A^T\nu

此时对偶函数为下式,此时原问题被转换为一个无约束的对偶问题的求解。

g(\nu)=L(\hat{x}, \nu)=\hat{x}^T \hat{x} + \nu^T A\hat{x}-b^T\nu =-\frac{1}{4}\nu^T AA^T\nu-b^T\nu

4. 最优问题的转换

接下来我们考虑更为通用的优化问题形式,之前讨论了不等式约束中的大于和小于可以通过变换符号进行调整,实际上我们可以通过新增求解变量x_i^s将不等式约束转换为等式约束:

\\ \text{ Minimize }\ f_o(x) \\ f_i(x) + x_i^s = 0, i=1,...,m \\ h_j(x)= 0, j=1,...n \\ x_i^s\geq 0

结合上述对偶问题的转换,我们可以将通用的优化问题形式转换为等式约束问题,甚至无约束的问题,下一篇我们将介绍等式约束优化问题和无约束优化问题的通用求解方法。

这篇关于优化问题的拉格朗日Lagrange对偶法原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/395845

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装