拉格朗日法、KKT条件

拉格朗日对偶性



求解最优化问题中,拉格朗日乘子法和 KKT 条件是两种常用的方法。在有等式约束时使用拉格朗日乘子法,不等式约束时使用 KKT 条件。这里的最优化问题通常指函数在作用域上的全局最小值(最小值与最大值可以互换)。

最优化问题常见三种情况:



一、无约束条件

求导等于0得到极值点,将结果带回原函数验证。



二、等式约束条件

设目标函数 f(x),等式约束 hj(x),约束最优化问题描述如下:

min  f(x)s.t.    hj(x)=0    j=1,2,...,l

l 表示有 l 个约束条件。

该类问题解决办法是消元法和拉格朗日法。消元法简单,这里讲拉格朗日法,后面提到的 KKT 条件是对拉格朗日乘子法的泛化。


实例:椭球 x2a2+y2b2+z2c2=1 内接长方体的最大体积,即求 f(x,y,z)=8xyz 的最大值。


① 消元法

根据条件消去z,然后带入函数转换为无条件极值问题。(有时这种方法解不出来)


② 拉格朗日法

定义拉格朗日函数:

L(x,β)=f(x)+k=1lβjhj(x)

对各个变量求偏导:

Fxi=0  ...  Fβj=0

方程组的解可能是最优解,将结果带回原方程验证。

思想:通过引入拉格朗日乘子将含有 n 个变量和 j 个约束条件的约束优化问题转化为 (n+j) 个变量的无约束优化问题。


定义拉格朗日函数:

F(x,y,z,β)=f(x,y,z)+βφ(x,y,z)=8xyz+β(x2a2+y2b2+z2c21)

F(x,y,z,β) 求偏导:

F(x,y,z,β)x=8yz+2βxa2=0

F(x,y,z,β)y=8xz+2βyb2=0

F(x,y,z,β)z=8xy+2βzc2=0

F(x,y,z,β)β=x2a2+y2b2+z2c21=0

联立前面 3 个方程得到 bx=ayaz=cx,带入第 4 个方程:

x=33a    y=33b    z=33c

带入原函数得到最大体积:

Vmax=f(33a,33b,33c)=839abc



三、不等式约束条件

设目标函数 f(x),不等式约束 ci(x)、等式约束 hj(x),约束最优化问题描述如下:

min    f(x)s.t.    ci(x)0,    i=1,2,...,khj(x)=0,    j=1,2,...,l

定义不等式约束下的拉格朗日函数 L

L(x,α,β)=f(x)+i=1kαici(x)+j=1lβjhj(x)

其中 f(x) 是目标函数,hj(x) 是第 j 个等式约束条件,βj 是约束系数,ci(x) 是第 i 个不等式约束,αi 是约束系数。

不等式约束求最优化问题的常用方法是 KKT 条件

KKT 条件是说最优值必须满足:

xL(x,α,β)=0αL(x,α,β)=0βL(x,α,β)=0αici(x)=0ci(x)0,    i=1,2,...,kai0,    i=1,2,...,khj(x)=0,    i=1,2,...,k

原始问题、对偶问题满足严格(强)对偶关系 满足 KKT 条件(充要条件)。



posted @   做梦当财神  阅读(1754)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示