【学习笔记】拉格朗日乘数法&KKT

拉格朗日乘数法&KKT 学习笔记

前置芝士:导数,解方程组,加减乘除

偏导

对一个多元函数中的某一个变量求偏导,实际上就是将其他变量视为系数,对此变量求导。

例:f(x,y)=2x2+3lny6xy,分别求 f(x,y)xf(x,y)y(即对 xy 求偏导)。

解:

x 求偏导:

f(x,y)x=4x6y

y 求偏导:

f(x,y)y=3y6x

拉格朗日乘数法

介绍

拉格朗日乘数法是求一个多元函数在受到一些奇奇怪怪的约束(等式约束)的情况下的最值(max/min)。

内容

设一多元函数 f(x1,x2,...,xm),求在一系列的等式约束 hi(x1,x2,...,xm)=0 下的极值。其中 i[1,n]n 为等式约束的数量,m 为未知数数量。

构造拉格朗日函数 L(x1,x2,...,xm,λ1,λ2,...,λn)=f(x1,x2,...,xm)+i=1nλihi(x1,x2,...,xm)

接着,分别求 Lx1Lx2,...,,LxmLλ1Lλ2,...,,Lλn

Lx1Lx2,...,,LxmLλ1Lλ2,...,,Lλn 均等于 0,得到一个关于 x1,x2,...,xm,λ1,λ2,...,λn 的方程组。

最后,解方程组,得到 x1,x2,...,xm 的值。将得到的值代回到 f(x1,x2,...,xm),得到的结果即为在 hi(x1,x2,...,xm) 等式约束下的极值。

注意:λ0

例:已知 4x2+y2+xy=1,求 2x+y 的最大值。

解:

设二元函数 f(x,y)=2x+y,约束条件 h(x,y)=4x2+y2+xy1=0

构造拉格朗日函数 L(x,y,λ)=2x+y+λ(4x2+y2+xy1)

x,y,λ 求偏导得:

Lx=2+8λx+λyLy=1+2λy+λxLλ=4x2+y2+xy1

令以上三者均为 0,得方程组:

{28λxλy=012λyλx=04x2+y2+xy1=0

解得

{x=1010y=105λ=105


{x=1010y=105 带入到 f(x,y)f(x,y)=2x+y=2105

所以 2x+y 的最大值为 2105

KKT

介绍

事实上这玩意有点复杂,涉及到向量啊超平面啊等乱七八糟的东西。在这里我们只讨论求解最大最小值的基本方法。

我们回过头看拉乘,发现他只能解决等式约束的极值。那么对于不等式约束,我们要如何求解极值?

KKT闪亮登场!

内容

设一函数 f(x),求在一系列的等式约束 hi(x)=0 与不等式约束 gj(x)0 下的极值。其中 i[1,n],j[1,m]n 为等式约束的数量,m 为不等式约束数量。

构造拉格朗日函数 L(x,α1,α2,...,αm,λ1,λ2,...,λn)=f(x,y)+α1g1(x)+...+λ1h1(x)+...

x 求偏导并令其等于 0,再令 αg(x)=0。全部联立起来可得方程组,解方程组再代回去即可。

注意,α,λ0,且在解方程组的同时要记得讨论 α0 的关系。

当然,KKT也可以解决多元函数的问题,只是在后面多添几个未知数而已。为了简便我们这里只写一元函数。

不难看出,KKT本质是拉乘的推广。

例:求 f(x1,x2)=x126x1+9+x22+2x2+1{x1x21x1+x22 约束下的最小值。

解:将约束转化为 KKT 的标准形式

{g1(x1,x2)=1x1+x20g2(x1,x2)=x1+x220

并构造拉格朗日函数 L(x1,x2,α1,α2)=f(x1,x2)+α1g1(x1,x2)+α2g2(x1,x2),分别对 x1x2 求偏导可得

{2x16α1+α2=02x2+2+α1+α2=0

αg(x)=0

{α1(1x1+x2)=0α2(x1+x22)=0

下面就是根据上面的两个联立方程组对 α1α2 的符号进行分类讨论,需要注意的是 KKT 是拉格朗日问题的推广,仍然满足 α1,α20

  1. α1>0α2>0,则有

{1x1+x2=0x1+x22=0

解得 {x1=32x2=12,回代进另一个方程组有

{α1+α2=3α1+α2=3

可得 α2=0,与假设矛盾,舍去;

  1. α1>0α2=0,则有

{1x1+x2=02x16α1=02x2+2+α1=0

解得 α1=3,与假设矛盾,舍去;

  1. α1=0α2>0,则有

{x1+x22=02x16+α2=02x2+2+α2=0

解得 α2=0,与假设矛盾,舍去;

  1. α1=0α2=0,显然假设可以成立,则有

{2x16=02x2+2=0

解得 {x1=3x2=1,此即为 f(x1,x2) 取得最小值时的解。
综上所述,f(x1,x2)=x126x1+9+x22+2x2+1{x1x21x1+x22 约束下的最小值为 f(3,1)=0

总结

在解决条件极值问题时,遇到难以下手的可以尝试使用拉乘和KKT解决,但计算量偏大。

update on 2023.1.23

posted @   osfly  阅读(127)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示