拉格朗日松弛法、KKT条件与线性规划的对偶

2023-10-11 17:20

本文主要是介绍拉格朗日松弛法、KKT条件与线性规划的对偶,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

拉格朗日松弛

深度解析拉格朗日乘子法,让你成为高手

对于等式约束,实际上是存在一条等值线,最优解必须存在在这条解上

在这里插入图片描述

其目的是判断约束 g ( x ) g(x) g(x)的梯度方向是否和等值线的梯度方向共线。

即:

[ x 1 , x 2 , x 3 ] T = λ [ y 1 , y 2 , y 3 ] [x_1,x_2,x_3]^T=\lambda[y_1,y_2,y_3] [x1,x2,x3]T=λ[y1,y2,y3]

此时 λ \lambda λ取正负都可以。

KKT条件

KKT条件,原来如此简单 | 理论+算例实践

配合下式可以说:假设最优解出现在其中n个 g ( x ) g(x) g(x)上,那么他们可以被放到拉格朗日松弛目标函数中,其余的如果不满足约束说明假设错了,如果满足约束证明是一种可行解。

min ⁡ f ( X ) s.t.  g i ( X ) ≤ 0 , i = 1 , … , m h j ( X ) = 0 , j = 1 , … , n \begin{array}{ll}\min & f(X) \\\text { s.t. } & g_i(X) \leq 0, \quad i=1, \ldots, m \\& h_j(X)=0, \quad j=1, \ldots, n\end{array} min s.t. f(X)gi(X)0,i=1,,mhj(X)=0,j=1,,n

可以被转化为:

L = f ( X ) + ∑ i = 1 m λ i g i ( X ) + ∑ j = 1 n μ j h j ( X ) L=f\left(X\right)+\sum_{i=1}^m \lambda_i g_i\left(X\right)+\sum_{j=1}^n \mu_j h_j(X) L=f(X)+i=1mλigi(X)+j=1nμjhj(X)

对于任意的X,要想使L满足要求( λ i g i ( X ) = 0 \lambda_i g_i\left(X\right)=0 λigi(X)=0)。考虑到 g i ( X ) ≤ 0 g_i\left(X\right)\le0 gi(X)0。问题就转化为求L关于 λ \lambda λ 的最大值。

f ( x ∗ ) = min ⁡ x f ( x ) = min ⁡ x { max ⁡ λ , μ L ( λ , μ , x ) } f\left(x^*\right)=\min _x f(x)=\min _x\left\{\max _{\lambda, \mu} L(\lambda, \mu, x)\right\} f(x)=xminf(x)=xmin{λ,μmaxL(λ,μ,x)}

这样,自然的可以写出KKT条件。

∇ f ( X ∗ ) + ∑ i = 1 m λ i ∇ g i ( X ∗ ) + ∑ j = 1 n μ j ∇ h j ( X ) = 0 λ i g i ( X ∗ ) = 0 , i = 1 , … , m h j ( X ∗ ) = 0 , j = 1 , … , n λ i ≥ 0 , i = 1 , … , m g i ( X ∗ ) ≤ 0 , i = 1 , … , m \begin{aligned}& \nabla f\left(X^*\right)+\sum_{i=1}^m \lambda_i \nabla g_i\left(X^*\right)+\sum_{j=1}^n \mu_j \nabla h_j(X)=0 \\& \lambda_i g_i\left(X^*\right)=0, \quad i=1, \ldots, m \\& h_j\left(X^*\right)=0, j=1, \ldots, n \\& \lambda_i \geq 0, \quad i=1, \ldots, m \\& g_i\left(X^*\right) \leq 0, \quad i=1, \ldots, m\end{aligned} f(X)+i=1mλigi(X)+j=1nμjhj(X)=0λigi(X)=0,i=1,,mhj(X)=0,j=1,,nλi0,i=1,,mgi(X)0,i=1,,m

g i ( X ∗ ) g_i(X^*) gi(X)等于0,说明约束张紧, λ ≠ 0 \lambda\not=0 λ=0。若 g i ( X ∗ ) g_i(X^*) gi(X)不等于0,说明约束不起作用(满足时), λ ≠ 0 \lambda\not=0 λ=0

为什么 λ ≥ 0 \lambda\ge0 λ0呢?

g i ( X ) ≤ 0 g_i(X) \leq 0 gi(X)0

g i ( x ) g_i(x) gi(x)的梯度方向仍然是可行的。

求目标函数的最小值时,若目标函数的梯度方向与 g i ( x ) g_i(x) gi(x)的梯度同向, 说明目标函数仍然可以继续下降,并没有取到最优值。

因此,

∇ f ( X ∗ ) = − λ ∇ g i ( X ∗ ) \nabla f\left(X^*\right)=-\lambda\nabla g_i(X^*) f(X)=λgi(X)

min ⁡ x 1 2 + 2 x 2 2 − 4 x 1 − 4 x 2 s.t.  x 1 + x 2 ≤ 3 x 1 + 2 x 2 ≥ 5 \begin{array}{ll}\min & x_1^2+2 x_2^2-4 x_1-4 x_2 \\\text { s.t. } & x_1+x_2 \leq 3 \\& x_1+2 x_2 \geq 5\end{array} min s.t. x12+2x224x14x2x1+x23x1+2x25

最小值需要整理为小于等与0的形式

min ⁡ x 1 2 + 2 x 2 2 − 4 x 1 − 4 x 2 s.t.  x 1 + x 2 − 3 ≤ 0 − x 1 − 2 x 2 + 5 ≤ 0 \begin{array}{ll}\min & x_1^2+2 x_2^2-4 x_1-4 x_2 \\\text { s.t. } & x_1+x_2-3 \leq 0 \\& -x_1-2 x_2+5 \leq 0\end{array} min s.t. x12+2x224x14x2x1+x230x12x2+50

x 1 2 + 2 x 2 2 − 4 x 1 − 4 x 2 + λ 1 ( x 1 + x 2 + x 3 ) + λ 2 ( − x 1 − x 2 + 5 ) x_1^2+2 x_2^2-4 x_1-4 x_2+\lambda_1(x_1+x_2+x_3)+\lambda_2(-x_1-x_2+5) x12+2x224x14x2+λ1(x1+x2+x3)+λ2(x1x2+5)

(1)若 λ 1 = λ 2 = 0 \lambda_1=\lambda_2=0 λ1=λ2=0,求无约束极值问题:

需要检查 g i ( X ∗ ) g_i(X^*) gi(X)是否小于0,若满足上式成立,一种可行解。

(2)若 λ 1 = 0 , λ 2 ≠ 0 \lambda_1=0,\lambda_2 \not=0 λ1=0λ2=0

检查 λ 2 \lambda_2 λ2是否大于0, g 1 ( X ∗ ) g_1(X^*) g1(X)是否小于0,都满足是一种可行解

线性规划的对偶

min ⁡ c T x s.t.  A x ≥ b x ≥ 0 \begin{gathered}\min c^T x \\\text { s.t. } A x \geq b \quad x \geq 0\end{gathered} mincTx s.t. Axbx0

利用KKT条件进行转化:

L ( x , λ ) = c T x − λ T ( A x − b ) = λ T b + ( c T − λ T A ) x ( λ ≥ 0 ) \begin{align*} L(x, \lambda) &= c^T x - \lambda^T(Ax - b) \\ &= \lambda^T b + (c^T - \lambda^T A) x \end{align*}(\lambda\ge0) L(x,λ)=cTxλT(Axb)=λTb+(cTλTA)x(λ0)

这时的 L ( x , λ ) L(x, \lambda) L(x,λ)已经没有约束,若想使其有最小值,需要 ( c T − λ T A ) (c^T-\lambda^TA) (cTλTA)每一个分量都大于等于0。( x ≥ 0 x\ge0 x0)

这时问题转化为如下形式:

min ⁡ x L ( x , λ ) = λ T b i f c T − λ T A ≥ 0 \min_x L(x,\lambda)=\lambda^T b \quad if \quad c^T-\lambda^TA\ge 0 xminL(x,λ)=λTbifcTλTA0

由于 f ( x ∗ ) = min ⁡ x f ( x ) = min ⁡ x { max ⁡ λ , μ L ( λ , μ , x ) } f\left(x^*\right)=\min _x f(x)=\min _x\left\{\max _{\lambda, \mu} L(\lambda, \mu, x)\right\} f(x)=minxf(x)=minx{maxλ,μL(λ,μ,x)}

交换顺序:

f ( x ∗ ) = min ⁡ x f ( x ) = max ⁡ λ b T λ s.t. A T λ ≤ c λ ≥ 0 f\left(x^*\right) = \min_x f(x) = \max_{\lambda} b^T \lambda \\ \begin{align*} \text{s.t.} \quad A^T\lambda &\leq c \\ \lambda &\geq 0 \end{align*} f(x)=xminf(x)=λmaxbTλs.t.ATλλc0

对偶问题的标准形式

针对上述的推导,我们进行一定的拓展:

(1)若原问题存在等式约束

KKT条件退化为拉格朗日松弛,不需要对 λ \lambda λ进行限制

(2)若原问题存在自由变量。

若想使L有界,需要对系数项 ( c T − λ T A ) (c^T-\lambda^TA) (cTλTA)置0,不等式约束转化为等式约束。

综上,对偶问题的转化关系如下:

原问题:

min ⁡ c T x s.t.  g i ( X ) ≤ b i , i = 1 , … , p h j ( X ) = b j , j = p + 1 , … , m x l ≥ 0 , l = 1 , … , q x k ≷ 0 , k = q + 1 , … , n \begin{array}{ll}\min & c^Tx \\\text { s.t. } & g_i(X) \leq b_i, \quad i=1, \ldots, p \\& h_j(X)=b_j, \quad j=p+1, \ldots, m\\ &x_l \geq 0, \quad l=1, \ldots, q\\& x_k \gtrless 0, \quad k=q+1, \ldots, n\end{array} min s.t. cTxgi(X)bi,i=1,,phj(X)=bj,j=p+1,,mxl0,l=1,,qxk0,k=q+1,,n

对偶问题:

max ⁡ b T λ s.t.  λ i ≥ 0 , i = 1 , … , λ i λ j ≷ 0 , j = p + 1 , … , m c l − A l T λ ≥ 0 , l = 1 , … , q c l − A l T λ = 0 , k = q + 1 , … , n \begin{array}{ll}\max & b^T\lambda \\\text { s.t. } & \lambda_i \geq 0, \quad i=1, \ldots, \lambda_i \\& \lambda_j \gtrless0, \quad j=p+1, \ldots, m\\ &c_l-A_l^T\lambda\ge0, \quad l=1, \ldots, q\\& c_l-A_l^T\lambda=0, \quad k=q+1, \ldots, n\end{array} max s.t. bTλλi0,i=1,,λiλj0,j=p+1,,mclAlTλ0,l=1,,qclAlTλ=0,k=q+1,,n

这篇关于拉格朗日松弛法、KKT条件与线性规划的对偶的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,

notepad++ 正则表达式多条件查找替换

基础语法参考: https://www.cnblogs.com/winstonet/p/10635043.html https://www.linuxidc.com/Linux/2019-05/158701.htm   通常情况下我们查找的内容和要被替换掉的内容是一样的,我们只需要使用正则表达式精确框定查找内容,替换直接输入要替换的内容即可。 但有时会比较复杂,查找的内容,只需要替换其中

FPGA开发:条件语句 × 循环语句

条件语句 if_else语句 if_else语句,用来判断是否满足所给定的条件,根据判断的结果(真或假)决定执行给出的两种操作之一。 if(表达式)语句; 例如: if(a>b) out1=int1; if(表达式)         语句1; else         语句2; 例如: if(a>b)out1=int1;elseout1=int2; if(表达式1) 语句1; els

Kernel 中MakeFile 使用if条件编译

有时需要通过if  else来选择编译哪个驱动,单纯的obj-$(CONFIG_)就不是很方便,下面提供两种参考案例: 案例一: 来源:drivers/char/tpm/Makefileifdef CONFIG_ACPItpm-y += tpm_eventlog.o tpm_acpi.oelseifdef CONFIG_TCG_IBMVTPMtpm-y += tpm_eventlog.o

shell循环sleep while例子 条件判断

i=1# 小于5等于时候才执行while [ ${i} -le 5 ]doecho ${i}i=`expr ${i} + 1`# 休眠3秒sleep 3doneecho done 参考 http://c.biancheng.net/cpp/view/2736.html