有约束优化问题-拉格朗日乘子法

经典拉格朗日乘子法(约束条件为等式)

m i n x f ( x ) s.t.    g ( x ) = 0 \mathop{min}\limits_{x}f_{(\mathbf{x})}\text{\quad s.t.}\;g_{(\mathbf{x})}=0 xminf(x)s.t.g(x)=0
此处 x \mathbf{x} x是一个向量。
如下图,以二元函数举例:
在这里插入图片描述由图可以看出,只需要使 f ( x , y ) = d f_{(x, y)}=d f(x,y)=d g ( x , y ) = 0 g_{(x, y)}=0 g(x,y)=0相切即可,也就是使这两条线的梯度方向(法线方向)共线。
即:
{ ▽ f ( x ) = λ ▽ g ( x ) g ( x ) = 0 \begin{cases} \bigtriangledown f_{(\mathbf{x})}=\lambda \bigtriangledown g_{(\mathbf{x})}\\ g_{(\mathbf{x})}=0 \end{cases} {f(x)=λg(x)g(x)=0
这时引入拉格朗日函数:
L ( x , λ ) = f ( x ) − λ g ( x ) L_{(\mathbf{x}, \lambda)}=f_{(\mathbf{x})}-\lambda g_{(\mathbf{x})} L(x,λ)=f(x)λg(x)
可以发现,对拉格朗日函数求偏导可以得到以上方程组。

约束条件不为等式

m i n x f ( x ) s.t.    g ( x ) ≤ 0 \mathop{min}\limits_{x}f_{(\mathbf{x})}\text{\quad s.t.}\;g_{(\mathbf{x})}\leq0 xminf(x)s.t.g(x)0
在这里插入图片描述
与经典拉格朗日乘子法相同,最优点仍需要满足
▽ f ( x ∗ , y ∗ ) = λ ▽ g ( x ∗ , y ∗ ) \bigtriangledown f_{(x^{*},y^{*})}=\lambda \bigtriangledown g_{(x^{*},y^{*})} f(x,y)=λg(x,y)
引入 K K T KKT KKT条件:
λ g ( x ∗ , y ∗ ) = 0 \lambda g_{(x^{*},y^{*})}=0 λg(x,y)=0
那么,如果 g ( x ∗ , y ∗ ) < 0 g_{(x^{*},y^{*})}<0 g(x,y)<0,则 λ = 0 \lambda=0 λ=0。这说明,若 g ( x ∗ , y ∗ ) g_{(x^{*},y^{*})} g(x,y)一定小于0,则这个约束条件并不起作用,故 λ = 0 \lambda=0 λ=0
x \mathbf{x} x代替 ( x , y ) (x,y) (x,y),并引入拉格朗日函数:
L ( x , λ ) = f ( x ) − λ g ( x ) L_{(\mathbf{x}, \lambda)}=f_{(\mathbf{x})}-\lambda g_{(\mathbf{x})} L(x,λ)=f(x)λg(x)
同样对 x \mathbf{x} x求偏导并令其为0得到 ▽ f ( x ) = λ ▽ g ( x ) \bigtriangledown f_{(\mathbf{x})}=\lambda \bigtriangledown g_{(\mathbf{x})} f(x)=λg(x),但不对 λ \lambda λ求偏导,而是直接带入 K K T KKT KKT条件。得到:
{ ▽ f ( x ) = λ ▽ g ( x ) λ g ( x ) = 0 \begin{cases} \bigtriangledown f_{(\mathbf{x})}=\lambda \bigtriangledown g_{(\mathbf{x})}\\ \lambda g_{(\mathbf{x})}=0 \end{cases} {f(x)=λg(x)λg(x)=0
对于多约束条件的情况,即:

{ m i n x f ( x ) g i ( x ) ≥ 0 ( i = 1 , 2 … … , n ) \begin{cases} \mathop{min}\limits_{x}f_{(\mathbf{x})}\\ g_{i(\mathbf{x})}\geq0\quad (i=1,2……,n) \end{cases} {xminf(x)gi(x)0(i=1,2,n)
L ( x , λ 1 , λ 2 … … , λ n ) = f ( x ) − ∑ i = 1 n λ i g i ( x ) L_{(\mathbf{x},\lambda_{1},\lambda_{2}……,\lambda_{n})}=f_{\mathbf{(x)}}-\sum_{i=1}^{n}{\lambda_{i}g_{i(x)}} L(x,λ1,λ2,λn)=f(x)i=1nλigi(x)
则需满足:
{ ▽ f ( x ) = ∑ i = 1 n λ i ▽ g i ( x ) λ i g i ( x ) = 0 ( K K T 条 件 ) \begin{cases} \bigtriangledown f_{(\mathbf{x})}=\sum_{i=1}^{n}{\lambda_{i}\bigtriangledown g_{i(x)}}\\ \lambda_{i} g_{i(\mathbf{x})}=0\quad (KKT条件) \end{cases} {f(x)=i=1nλigi(x)λigi(x)=0(KKT)
为保证两条相切直线梯度是相反的方向,需要满足 λ i ≥ 0 \lambda_{i}\geq0 λi0
例题:

在这里插入图片描述
求得
{ x 1 = 1 x 2 = 2 γ 1 = 1 γ 2 = 0 \begin{cases} x_{1}=1\\ x_{2}=2\\ \gamma_{1}=1\\ \gamma_{2}=0 \end{cases} x1=1x2=2γ1=1γ2=0
这说明第二个约束条件在此问题中不起作用,将 ( 1 , 2 ) (1,2) (1,2)带入两个约束条件知第一个约束条件正好取等号,而第二个约束条件是一定满足的。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
拉格朗日乘子法是一种优化算法,应用于具有约束条件的优化问题。它的原理是基于拉格朗日乘子的概念,在求解有约束问题的时候,将约束条件转化为目标函数的一部分,通过求解该新的目标函数,得到问题的最优解。 在使用拉格朗日乘子法时,首先根据问题约束条件构造拉格朗日函数。拉格朗日函数是由目标函数和约束条件组成的,目标函数会被调整为加入拉格朗日乘子与约束条件的乘积,同时每个约束条件都会有一个对应的拉格朗日乘子。然后,通过求取拉格朗日函数的偏导数,将其等于0,可以得到一组方程,包括目标函数的梯度和约束条件的梯度。将这些方程联立求解,就可以得到问题的最优解。 对于拉格朗日函数的求解,可以采用数值方法,例如使用fmincon算法。fmincon是一种非线性约束最小化算法,可以求解具有非线性约束优化问题。它的实现基于拉格朗日乘子法,通过迭代的方式逼近最优解。在每一次迭代中,通过求解一组子问题,不断调整拉格朗日乘子的值,直到找到最优解为止。 总之,拉格朗日乘子法是一种基于拉格朗日函数的优化算法,通过将约束条件转化为目标函数的一部分,再利用数值方法求解最优解。而fmincon算法则是一种具体的数值方法实现,可以应用于求解具有非线性约束优化问题

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cofisher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值