优化问题的拉格朗日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

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错