拉格朗日对偶性
求解最优化问题中,拉格朗日乘子法和 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)+l∑k=1βjhj(x)
对各个变量求偏导:
∂F∂xi=0 ... ∂F∂βj=0
方程组的解可能是最优解,将结果带回原方程验证。
思想:通过引入拉格朗日乘子将含有 n 个变量和 j 个约束条件的约束优化问题转化为 (n+j) 个变量的无约束优化问题。
定义拉格朗日函数:
F(x,y,z,β)=f(x,y,z)+βφ(x,y,z)=8xyz+β(x2a2+y2b2+z2c2−1)
对 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+z2c2−1=0
联立前面 3 个方程得到 bx=ay 和 az=cx,带入第 4 个方程:
x=√33a y=√33b z=√33c
带入原函数得到最大体积:
Vmax=f(√33a,√33b,√33c)=8√39abc
三、不等式约束条件
设目标函数 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)+k∑i=1αici(x)+l∑j=1β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,...,ka∗i≥0, i=1,2,...,khj(x∗)=0, i=1,2,...,k
原始问题、对偶问题满足严格(强)对偶关系 ⟺ 满足 KKT 条件(充要条件)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)