拉格朗日乘数法

在数学最优问题中,拉格朗日乘数法(以数学家约瑟夫·路易斯·拉格朗日命名)是一种寻找变量受一个或多个条件所限制的多元函数极值的方法。这种方法将一个有n 个变量与k 个约束条件最优化问题转换为一个有n + k个变量的方程组的极值问题,其变量不受任何约束。本文介绍拉格朗日乘数法(Lagrange multiplier)。

概述

  • 我们擅长解决的是无约束极值求解问题,这类问题仅需对所有变量求偏导,使得所有偏导数为0,即可找到所有极值点和鞍点。我们解决带约束条件的问题时便会尝试将其转化为无约束优化问题

  • 事实上如果我们可以通过g得到某个变量的表示,例如 x 1 = h ( x 2 , . . . , x n ) x_1 = h(x_2, ..., x_n) x1=h(x2,...,xn),将该式带入 y y y即可抓换为无约束优化(初高中就是这么做的,所谓消元法是也),但有的时候我们无法得到这样的表示,便需要借助拉格朗日乘数法来避免消元法的困境。

作为一种优化算法,拉格朗日乘数法主要用于解决约束优化问题,它的基本思想就是通过引入拉格朗日乘子来将含有 n n n个变量和 k 个 k个 k约束条件的约束优化问题转化为含有 ( n + k ) (n+k) n+k个变量的无约束优化问题。拉格朗日乘子背后的数学意义是其为约束方程梯度线性组合中每个向量的系数。

思想

  • 考虑二元函数 f ( x , y ) f(x,y) f(x,y),在约束 g ( x , y ) = c g(x,y)=c g(x,y)=c下的极值
  • 首先我们可以绘制出 f ( x , y ) f(x,y) f(x,y)的一层层等高线,当等高线与 g ( x , y ) = c g(x,y)=c g(x,y)=c相切时即可能是该问题的极值点

拉格朗日乘数法示意图(转自知乎)

拉格朗日乘数法

单个等式约束

考虑 n n n元函数 y = f ( x 1 , x 2 , . . . , x n ) y=f(x_1, x_2,...,x_n) y=f(x1,x2,...,xn),在等式约束 g ( x 1 , x 2 , . . . , x n ) = 0 g(x_1, x_2,...,x_n)=0 g(x1,x2,...,xn)=0 下的极值点求解问题

  • 在极值点,必有 y y y g g g法向量平行
  • y y y的法向量为:

[ ∂ y ∂ x 1 , ∂ y ∂ x 2 , . . . , ∂ y ∂ x n ] [\frac{{\partial y}}{{\partial {x_1}}},\frac{{\partial y}}{{\partial {x_2}}},...,\frac{{\partial y}}{{\partial {x_n}}}] [x1y,x2y,...,xny]

  • g g g的法向量为:

[ ∂ g ∂ x 1 , ∂ g ∂ x 2 , . . . , ∂ g ∂ x n ] [\frac{{\partial g}}{{\partial {x_1}}},\frac{{\partial g}}{{\partial {x_2}}},...,\frac{{\partial g}}{{\partial {x_n}}}] [x1g,x2g,...,xng]

  • 二者平行,则存在常数 λ \lambda λ使得:

[ ∂ y ∂ x 1 , ∂ y ∂ x 2 , . . . , ∂ y ∂ x n ] + λ [ ∂ g ∂ x 1 , ∂ g ∂ x 2 , . . . , ∂ g ∂ x n ] = 0 [\frac{{\partial y}}{{\partial {x_1}}},\frac{{\partial y}}{{\partial {x_2}}},...,\frac{{\partial y}}{{\partial {x_n}}}] + \lambda [\frac{{\partial g}}{{\partial {x_1}}},\frac{{\partial g}}{{\partial {x_2}}},...,\frac{{\partial g}}{{\partial {x_n}}}] = 0 [x1y,x2y,...,xny]+λ[x1g,x2g,...,xng]=0

  • 即:

∂ y ∂ x i + λ ∂ g ∂ x i = 0 , 1 ≤ i ≤ n \frac{{\partial y}}{{\partial {x_i}}} + \lambda \frac{{\partial g}}{{\partial {x_i}}} = 0,1 \le i \le n xiy+λxig=0,1in

  • 这样我们就得到了 n n n个等式方程,再加上 g ( x 1 , x 2 , . . . , x n ) = 0 g(x_1, x_2,...,x_n)=0 g(x1,x2,...,xn)=0一起构成 n + 1 n+1 n+1个方程的方程组,未知数为 [ x 1 , x 2 , . . . , x n , λ ] [x_1,x_2,...,x_n,\lambda] [x1,x2,...,xn,λ] n + 1 n+1 n+1个,方程组的解即为所有极值点和鞍点的集合,每组解中的 λ \lambda λ即为两个平行法向量的倍数,该值在等式约束轨迹穿过 y y y的极值点时为0。
多个等式约束

原理与单个等式约束情况类似

考虑 n n n元函数 y = f ( x 1 , x 2 , . . . , x n ) y=f(x_1, x_2,...,x_n) y=f(x1,x2,...,xn),在 m m m个等式约束( g i ( x 1 , x 2 , . . . , x n ) = 0 , 1 ≤ i ≤ m g_i(x_1, x_2,...,x_n)=0, 1 \le i \le m gi(x1,x2,...,xn)=0,1im) 下的极值点求解问题

  • n n n维空间由 m m m个条件约束,会确定一个 n − m n-m nm维的曲面,我们讨论 y y y在这个曲面上的极值问题
  • 这个曲面由 m m m n − 1 n-1 n1维曲面交织而成,存在 m m m个法向量,这 m m m个法向量构成了 n − m n-m nm维曲面的法空间
  • 在问题的极值点, y y y的法向量必然落在 n − m n-m nm维曲面的法空间之内,也就是说 y y y的法向量可以由 n − m n-m nm维曲面的 m m m个法向量的线性组合表示:

[ ∂ y ∂ x 1 , ∂ y ∂ x 2 , . . . , ∂ y ∂ x n ] + ∑ i = 1 m λ i [ ∂ g i ∂ x 1 , ∂ g i ∂ x 2 , . . . , ∂ g i ∂ x n ] = 0 [\frac{{\partial y}}{{\partial {x_1}}},\frac{{\partial y}}{{\partial {x_2}}},...,\frac{{\partial y}}{{\partial {x_n}}}] + \sum\limits_{i = 1}^m {{\lambda _i}[\frac{{\partial {g_i}}}{{\partial {x_1}}},\frac{{\partial {g_i}}}{{\partial {x_2}}},...,\frac{{\partial {g_i}}}{{\partial {x_n}}}]} = 0 [x1y,x2y,...,xny]+i=1mλi[x1gi,x2gi,...,xngi]=0

  • 即:

∂ y ∂ x j + ∑ i = 1 m λ i ∂ g i ∂ x j = 0 , 1 ≤ j ≤ n \frac{{\partial y}}{{\partial {x_j}}} + \sum\limits_{i = 1}^m {{\lambda _i}\frac{{\partial {g_i}}}{{\partial {x_j}}}} = 0,1 \le j \le n xjy+i=1mλixjgi=0,1jn

  • 此时我们得到了 n n n个等式方程,再加上 m m m个等式约束( g i ( x 1 , x 2 , . . . , x n ) = 0 , 1 ≤ i ≤ m g_i(x_1, x_2,...,x_n)=0, 1 \le i \le m gi(x1,x2,...,xn)=0,1im) 一起构成 n + m n+m n+m个方程的方程组,未知数为 [ x 1 , x 2 , . . . , x n , λ 1 , λ 2 , . . . , λ m ] [x_1,x_2,...,x_n,\lambda_1,\lambda_2,...,\lambda_m] [x1,x2,...,xn,λ1,λ2,...,λm] n + m n+m n+m个,方程组的解即为所有极值点和鞍点的集合,每组解中的 λ i \lambda_i λi的值即为 y y y的法向量在 n − m n-m nm维曲面的法空间中的线性组合系数。
单个不等式约束

不等式约束其实是等式约束的扩展,等式约束表示一组确定的等高线(面),不等式约束则表示等高线(面)的某一边区域

考虑 n n n元函数 y = f ( x 1 , x 2 , . . . , x n ) y=f(x_1, x_2,...,x_n) y=f(x1,x2,...,xn),在不等式约束 g ( x 1 , x 2 , . . . , x n ) ≤ 0 g(x_1, x_2,...,x_n) \le 0 g(x1,x2,...,xn)0 下的极值点求解问题

  • 若该问题有解,那么有两种情况
  1. 解在 g ( x 1 , x 2 , . . . , x n ) = 0 g(x_1, x_2,...,x_n) = 0 g(x1,x2,...,xn)=0 曲面上
  2. 解在 g ( x 1 , x 2 , . . . , x n ) < 0 g(x_1, x_2,...,x_n) < 0 g(x1,x2,...,xn)<0 范围内
  • 当解在 g ( x 1 , x 2 , . . . , x n ) = 0 g(x_1, x_2,...,x_n) = 0 g(x1,x2,...,xn)=0 曲面上时,说明该不等式对 y y y取最小值的区域进行了限制,最终解落在了 y y y和约束相切的位置,那么此时二者的法向量方向必然相反(否则 y y y会在 g ( x 1 , x 2 , . . . , x n ) < 0 g(x_1, x_2,...,x_n) < 0 g(x1,x2,...,xn)<0 范围内找到更小的值),按照等式情况构建方程:

∂ y ∂ x i + λ ∂ g ∂ x i = 0 , 1 ≤ i ≤ n \frac{{\partial y}}{{\partial {x_i}}} + \lambda \frac{{\partial g}}{{\partial {x_i}}} = 0,1 \le i \le n xiy+λxig=0,1in

  • 便有结论: λ ≥ 0 \lambda \ge 0 λ0

  • 当解在 g ( x 1 , x 2 , . . . , x n ) < 0 g(x_1, x_2,...,x_n) < 0 g(x1,x2,...,xn)<0 范围内时,事实上这个不等式没有对 y y y的求解起到约束作用,此时相当于 λ = 0 \lambda = 0 λ=0

  • 而且两种情况下分别有 g ( x 1 , x 2 , . . . , x n ) = 0 g(x_1, x_2,...,x_n) = 0 g(x1,x2,...,xn)=0 λ = 0 \lambda = 0 λ=0,也就是二者必有一方为0

  • 因此对于单个不等式约束的拉格朗日乘数法,仅需增加限制条件: λ ≥ 0 \lambda \ge 0 λ0 λ g ( x 1 , x 2 , . . . , x n ) = 0 \lambda g(x_1, x_2,...,x_n) = 0 λg(x1,x2,...,xn)=0

多个不等式约束

考虑 n n n元函数 y = f ( x 1 , x 2 , . . . , x n ) y=f(x_1, x_2,...,x_n) y=f(x1,x2,...,xn),在 m m m个不等式约束( g i ( x 1 , x 2 , . . . , x n ) ≤ 0 , 1 ≤ i ≤ m g_i(x_1, x_2,...,x_n)\le0, 1 \le i \le m gi(x1,x2,...,xn)0,1im) 下的极值点求解问题

  • 本质上与单个不等式约束相同,只是数量变多了
  • 此情况下需要在等式拉格朗日乘数法基础上增加条件:

λ i ≥ 0 , 1 ≤ i ≤ m λ i g i = 0 , 1 ≤ i ≤ m \begin{aligned} \lambda_i &\ge 0,1 \le i \le m\\ \lambda_ig_i &= 0,1 \le i \le m \end{aligned} λiλigi0,1im=0,1im

算法描述

  • 基于上述原理,提出了拉格朗日乘数法:
  1. 考虑 n n n元函数 y = f ( x 1 , x 2 , . . . , x n ) y=f(x_1, x_2,...,x_n) y=f(x1,x2,...,xn),在 m 1 m_1 m1个等式约束( g i ( x 1 , x 2 , . . . , x n ) = 0 , 1 ≤ i ≤ m 1 g_i(x_1, x_2,...,x_n)=0, 1 \le i \le m_1 gi(x1,x2,...,xn)=0,1im1) 、 m 2 m_2 m2个不等式约束( h j ( x 1 , x 2 , . . . , x n ) ≤ 0 , 1 ≤ j ≤ m 2 h_j(x_1, x_2,...,x_n)\le0, 1 \le j \le m_2 hj(x1,x2,...,xn)0,1jm2) 下的极值点求解问题

  2. 加入常数 λ , μ \lambda,\mu λ,μ构造方程:

z = f ( x 1 , x 2 , . . . , x n ) + ∑ i = 1 m 1 λ i g i ( x 1 , x 2 , . . . , x n ) + ∑ j = 1 m 2 μ j h j ( x 1 , x 2 , . . . , x n ) z = f({x_1},{x_2},...,{x_n}) + \sum\limits_{i = 1}^{{m_1}} {{\lambda _i}{g_i}({x_1},{x_2},...,{x_n})} + \sum\limits_{j = 1}^{{m_2}} {{\mu _j}{h_j}({x_1},{x_2},...,{x_n})} z=f(x1,x2,...,xn)+i=1m1λigi(x1,x2,...,xn)+j=1m2μjhj(x1,x2,...,xn)

  1. 对所有变量求偏导,并令导数为0:

∂ z ∂ x i = 0 ∂ y ∂ x k + ∑ i = 1 m 1 λ i ∂ g ∂ x k + ∑ j = 1 m 1 μ j ∂ h ∂ x k = 0 \begin{aligned} \frac{{\partial z}}{{\partial {x_i}}} &= 0\\ \frac{{\partial y}}{{\partial {x_k}}} + \sum\limits_{i = 1}^{{m_1}} {{\lambda _i}\frac{{\partial g}}{{\partial {x_k}}}} + \sum\limits_{j = 1}^{{m_1}} {{\mu _j}\frac{{\partial h}}{{\partial {x_k}}}} {\rm{ }} &= 0 \end{aligned} xizxky+i=1m1λixkg+j=1m1μjxkh=0=0

其中: 1 ≤ k ≤ n 1 \le k \le n 1kn

  1. 将上述 n n n个方程与 m 1 m_1 m1个等式约束方程 g i ( x 1 , x 2 , . . . , x n ) = 0 , 1 ≤ i ≤ m 1 g_i(x_1, x_2,...,x_n)=0, 1 \le i \le m_1 gi(x1,x2,...,xn)=0,1im1 联立
  2. 将上述 n + m 1 n+m_1 n+m1个方程与 μ j h j = 0 , 1 ≤ j ≤ m 2 \mu_j h_j=0, 1 \le j \le m_2 μjhj=0,1jm2联立,得到 n + m 1 + m 2 n+m_1+m_2 n+m1+m2个方程
  3. 加上限制条件 μ j ≥ 0 \mu_j \ge 0 μj0 h j ≤ 0 h_j \le 0 hj0 , 1 ≤ j ≤ m 2 , 1 \le j \le m_2 ,1jm2
  4. 在限制条件下解 n + m 1 + m 2 n+m_1+m_2 n+m1+m2元方程即可得到极值点与鞍点集合
  5. 从所有解中筛选出极值点

KKT条件

  • 上述 n + m 1 + m 2 n+m_1+m_2 n+m1+m2元方程与限制条件即为KKT条件
  • KKT条件是拉格朗日函数取极值时的必要条件

{ ∇ f + ∑ i m 1 λ i ∇ g i + ∑ j m 2 μ j ∇ h j = 0 g i = 0 , h j ≤ 0 , μ j ≥ 0 , μ j h j = 0 \left\{\begin{array}{l} \nabla f+\sum_{i}^{m_1} \lambda_{i} \nabla g_{i}+\sum_{j}^{m_2} \mu_{j} \nabla h_{j}=0 \\ g_{i}=0, \\ h_{j} \leq 0, \\ \mu_{j} \geq 0, \\ \mu_{j} h_{j}=0\\ \end{array}\right. f+im1λigi+jm2μjhj=0gi=0,hj0,μj0,μjhj=0

其中 i ∈ { 1 , 2 , ⋯   , m 1 } i \in \{ 1,2, \cdots, m_1\} i{1,2,,m1} j ∈ { 1 , 2 , ⋯   , m 2 } j \in \{ 1,2, \cdots, m_2\} j{1,2,,m2}

  • 总结一下所有条件的含义:
内容含义
∇ f + ∑ i m 1 λ i ∇ g i + ∑ j m 2 μ j ∇ h j = 0 \nabla f+\sum_{i}^{m_1} \lambda_{i} \nabla g_{i}+\sum_{j}^{m_2} \mu_{j} \nabla h_{j}=0 f+im1λigi+jm2μjhj=0求解极值需要在各个自变量方向上导数为0
g i = 0 g_{i}=0 gi=0等式约束
h j ≤ 0 h_{j} \le 0 hj0不等式约束
μ j ≥ 0 \mu_{j} \geq 0 μj0不等式约束时的两种情况:
1. 不等式约束无效( μ j = 0 \mu_{j} = 0 μj=0)
2. 不等式分界面法向量与原函数法向量方向相反( μ j > 0 \mu_{j} > 0 μj>0)
μ j h j = 0 \mu_{j} h_{j}=0 μjhj=0不等式约束时的两种情况:
1. 不等式约束无效,极值点在 h j < 0 h_{j} < 0 hj<0范围内 ( μ j = 0 \mu_{j} = 0 μj=0)
2. 不等式约束有效,极值点在 h j = 0 h_{j} = 0 hj=0曲面上( h j = 0 h_{j} = 0 hj=0)

参考资料

  • https://baike.baidu.com/item/%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E4%B9%98%E6%95%B0%E6%B3%95/8550443?fr=aladdin

  • https://www.zhihu.com/question/38586401

  • https://www.zhihu.com/question/359162625

  • https://www.zhihu.com/question/23311674/answer/468804362

  • https://blog.csdn.net/johnnyconstantine/article/details/46335763

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值