精华内容
下载资源
问答
  • 拉格朗日函数例题
    千次阅读
    2020-12-19 20:15:24

    对于优化问题
    arg ⁡ min ⁡ z   E ( z ) ( 1 a ) s . t . C z − b = 0 ( 1 b ) \mathop{\arg\min}_{z} \ E(z)\qquad(1a)\\ s.t. \quad Cz-b=0 \qquad(1b) argminz E(z)(1a)s.t.Czb=0(1b)
    其增广拉格朗日函数被定义为:
    L ( z , α , μ ) = E ( z ) + α T ( C z − b ) + μ ∣ ∣ C z − b ∣ ∣ 2 2 L(z,\alpha,\mu)=E(z)+\alpha^T(Cz-b)+\mu||Cz-b||_{2}^2 L(z,α,μ)=E(z)+αT(Czb)+μCzb22

    其中, α \alpha α为拉格朗日乘数。 μ \mu μ为步长参数,它的取值会影响算法的收敛速度。但它并不影响它收敛的解。

    约束问题的解法如下:
    在这里插入图片描述

    更多相关内容
  • 广义拉格朗日函数的理解

    万次阅读 多人点赞 2017-08-20 12:32:12
    1、拉格朗日函数: 求极值 求函数f(x,y,z)在条件φ(x,y,z)=0下的极值 方法(步骤)是: 1.做拉格朗日函数L=f(x,y,z)+λφ(x,y,z),λ称拉格朗日乘数 2.求L分别对x,y,z,λ求偏导,得方程组,求出驻点P(x,y,z) 如果...

    1、拉格朗日函数:

    求极值

    求函数f(x,y,z)在条件φ(x,y,z)=0下的极值

    方法(步骤)是:

    1.做拉格朗日函数L=f(x,y,z)+λφ(x,y,z),λ称拉格朗日乘数

    2.求L分别对x,y,z,λ求偏导,得方程组,求出驻点P(x,y,z)

    如果这个实际问题的最大或最小值存在,一般说来驻点唯一,于是最值 可求.

    条件极值问题也可以化为无条件极值求解,但有些条件关系比较复杂,代换和运算很繁,而相对来说,“拉格朗日乘数法”不需代换,运算简单一点.这就是优势.

    条件φ(x,y,z)一定是个等式,不妨设为φ(x,y,z)=m

    则再建一个函数g(x,y,z)=φ(x,y,z)-m

    g(x,y,z)=0,以g(x,y,z)代替φ(x,y,z)

    在许多极值问题中,函数的自变量往往要受到一些条件的限制,比如,要设计一个容积为 V的长方体形开口水箱,确定长、宽和高, 使水箱的表面积最小. 设水箱的长、宽、高分别为 x,y,z, 则水箱容积V=xyz

    焊制水箱用去的钢板面积为 S=2xz+2yz+xy

    这实际上是求函数 S 在 V 限制下的最小值问题。

    这类附有条件限制的极值问题称为条件极值问题,其一般形式是在条件


    2、为了求如下约束最优问题:

    引入广义拉格朗日函数:


    先需要证明:


    网上有的博文对(4)式的证明不容易看懂,我证明如下:

    首先将  记作函数

    1)如果,由于可以取任意大,因此这时函数不可能取得最小值。因此函数只有在时才可能取得最小值。

    2)如果, =,因此(4)式两边等价。

    第二步来证明:   (1)

    由于原始问题和对偶问题均有最优值,所以可分别假设

     


    那么,对于任意下式成立,

     (2)

    对于任意下式成立,

      (3)

    所以,

      (4)

    因此,(1)式成立。

    展开全文
  • 支持向量机(Support Vector Machine, SVM)的简单推导及例题

    支持向量机(Support Vector Machine, SVM)于1995年被首次提出,在解决小样本、非线性及高维度模式识别模式中具有许多特有的优势。

    1、SVM的相关概念

    在介绍SVM之前需要了解一些相关概念。

    最优分类超平面:分类超平面方程中的参数有无穷多解,但最优分类超平面仅有一个,且应同时具备以下两个条件:(1)最近距离最远,距离超平面最近的样本到该超平面的间隔应尽可能得远;(2)等距:距离超平面最近的两类样本到超平面的距离应是相等的。

    如下图二维空间中的样本,共有蓝色和橙色两种类别。很明显,该数据集是线性可分的,即存在分类超平面(直线)将两类样本分来,但最优分类超平面只有一个,下图中红色实现对应的为最优分类(二维)超平面。

    支持向量:'支持'代表的是边界支持,离最优分类超平面最近且平行于最优分类超平面的向量就叫做支持向量,可以看作“支持向量撑起了分类超平面”,故而求解支持向量和最优分类超平面的算法叫做支持向量机。

    2、拉格朗日乘子法

    求解支持向量的时候需要用到拉格朗日乘子法,此处先简单介绍一下拉格朗日乘子法的概念及作用。

    拉格朗日乘子法的基本原理是通过引入拉格朗日乘子(λ)将原来的约束优化问题转化为无约束的方程组问题。

    拉格朗日乘子法的求解过程大致分为以下步骤:

    1、原问题描述:求解函数z=f(x, y)在条件φ(x, y)=0条件下的极值。

    2、构造函数:F(x, y, λ) = f(x, y) + λ · φ(x, y), 其中λ为拉格朗日乘子。

    3、构造函数求偏导,列出方程组。

    4、求出x, y, λ的值, 代入即可得到目标函数的极值。

    【例】求已知目标函数f(x, y) = x² + y², 在约束条件 xy=3 条件下的极小值。

    构造函数为f(x, y, λ) =  x² + y² + λ · (xy - 3),

    求偏导可得方程组:

    所以目标函数f(x, y)的极小值为6。

    2、线性可分SVM的原理

    2.1 分类决策函数

    接下来会用原理和例题分别推导线性可分SVM,圆形图案⚪后面的为原理部分,三角形图案▲后面的为实例部分,

    当训练样本线性可分时,对应的SVM为线性可分SVM。SVM通过求支持向量到分类超平面的最大距离来确定最优分类超平面,这是一个优化问题。我们以二维空间的线性可分二分类问题为例,推导最优超平面H。

    ⚪原始问题如下

    ▲例题中,如下图共有三个点,正例有(3,3),(4,3)两点,负例有(1,1)点。我们的目标为找到一条最优分割直线将正负例正确分类。

    ⚪在二维空间中,最优分类超平面H是一条直线,其对应的公式为wx+b=0。

    2.2 分类间隔决策函数

    ▲在我们的例题中。如下图,红色直线代表的即为超平面H,蓝色和黄色虚线分别满足wx+b=1和wx+b=-1。最优超平面到两支持向量的距离最短且相等,y(wx+b)≥1的两侧全部为正/负例样本。

    ⚪将平行于H且最近的两个不同类的点即支持向量设为xi和xj,分别满足:

    d及θ的关系如下图所示:

    ▲在我们的例题中,d以及θ的关系和上图完全相同,即我们要求解的分类间隔d=2 / ||w||。

    2.3 SVM的目标函数

    SVM的目标是求出最优分类超平面H,找到支持向量对分类间隔最大化。

    ⚪目标函数为求解分类间隔d的最大值,所以目标函数及约束条件为:

    求解满足上式的w和b是我们的目标,因为目标函数有二次项,所以以上问题可看作一个凸二次规划问题,可以通过拉格朗日乘子法求解,转换后函数如下:

    拉格朗日乘子法部分的推导可参照拉格朗日函数为什么要先最大化? - 知乎 (zhihu.com)

    ▲在我们的例题中,w为所求最优分割超平面即红色直线的法向量。

    例题中共有三个点分别为正例(3,3),正例(4,3)和负例(1,1),设w1和w2分别为向量w的两个分量,最初的目标函数及约束函数为:

    将极大化问题变为极小化问题后,原问题转换为:

    添加拉格朗日乘子α,构造无约束的拉格朗日函数为

    转化为“极大极小”问题,如下:

    2.4 对偶问题求解

    2.4.1求minL

    ⚪接下来对对偶问题进行求解,先求解min L(x, y, α):

    经过该步骤,所得的L(x,y,α)函数已经没有了变量w和b,只剩拉格朗日乘子α。

    ▲在我们的例题中,x1=(4,3), y1=1;x2=(3,3), y2=1,; x3=(1,1),y3=-1。

    直接将值代入化简完成的公式中如下

    经过该步骤,所得的L(x,y,α)函数已经没有了变量w和b,只剩拉格朗日乘子α。

    2.4.2求maxL对应的拉格朗日乘子α

    ⚪接下来对对偶问题进行求解对α的极大,即“最大最小”问题的外侧:

    第一条约束是因为α作为拉格朗日乘子必须满足非负性,第二条约束则是之前推导的,L函数对b的偏导=0​。此时αi与训练样本(xi, yi)对应,可以利用启发式方法——序列最小优化(SMO)算法来求解拉格朗日乘子α,详细的SMO方法会在之后的文章中讲解。

    上述过程满足KKT条件,即要求:

    此处的f(x)即为我们最后要求的分类决策函数,当为正类时f(x)>0,为负类时f(x)<0,正类的支持向量和负类的支持向量对应的f(x)=±1,如下图所示。

    ​求出所有的拉格朗日乘子αi后,就可以计算最优分类超平面H的参数w和b。

    ▲在我们的例题中,我们直接用SMO方法求出了α1=0, α2=α3=1。

    2.4.3 求参数w和b

    ⚪依据前面部分的推导,可以直接根据下面的公式求出w​:

    依据以下公式求出b

    此时根据w和b的公式可知,w和b的值依赖于ai>0即支持向量点,非支持向量点ai=0,对w和b取值无影响。

    将w和b代入最优分类超平面H的公式wx+b=0中,可求出最优分类超平面​。

    ▲在我们的例题中,w=0 + 1*1*(3,3) + 1*(-1)*(1,1)=(2,2)归一化后=(0.5, 0.5)

    选择x3,b =yi - xi w = -1-(1,1)·(0.5,0.5)=-2

    分割超平面wx+b=0即为0.5x+0.5y-2=0,即直线y=x-4​。与我们目测的最优超平面完全相同。

    根据最后的分割超平面对应的公式可知,所有拉格朗日乘子αi=0的向量xi均对最后的f(x)没有影响。因此当训练完后,对于f(x)可以仅仅保留支持向量​。

    展开全文
  • 一物体廓线数据如下 x 0 3 5 7 9 11 12 13 14 15 y 0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6 用拉格朗日插值法计算x每改变0.5时y的值即x 取 0.5, 1, 1.5, , 14.5 时对应的y值 程序如下 程序运行结果 > x=[0 3 5 7 9 ...
  • 增广拉格朗日函数

    千次阅读 2022-02-10 14:47:33
    增广拉格朗日函数法 在二次罚函数法中,为了保证可行性,罚因子必须趋于正无穷。此时,子问题因条件数爆炸而难以求解。那么,是否可以通过对二次罚函数进行某种修正,使得对有限的罚因子,得到的毕竟最优解也是可行...

    增广拉格朗日函数法

    在二次罚函数法中,为了保证可行性,罚因子必须趋于正无穷。此时,子问题因条件数爆炸而难以求解。那么,是否可以通过对二次罚函数进行某种修正,使得对有限的罚因子,得到的毕竟最优解也是可行的?增广拉格朗日函数法就是这样的一个方法。

    一、等式约束优化问题的增广拉格朗日函数法

    1. 增广拉格朗日函数法的构造
      增广拉格朗日函数法的每一步构造一个增广拉格朗日函数,而该函数的构造依赖于拉格朗日函数和约束的二次罚函数。具体地,对于等式约束优化问题,
      min ⁡ x f ( x ) s . t . c i ( x ) = 0 , i ∈ E (1) \begin{aligned} &\min_{x}f(x) \\ &s.t.\quad c_i(x)=0, i\in\mathcal{E} \end{aligned}\tag{1} xminf(x)s.t.ci(x)=0,iE(1)
      其增广拉格朗日函数定义为
      L σ ( x , λ ) = f ( x ) + ∑ i ∈ E λ i c i ( x ) + 1 2 ∑ i ∈ E c i 2 ( x ) , (2) L_{\sigma}(x,\lambda)=f(x)+\sum_{i\in\mathcal{E}}\lambda_ic_i(x)+\frac{1}{2}\sum_{i\in\mathcal{E}}c_i^2(x),\tag{2} Lσ(x,λ)=f(x)+iEλici(x)+21iEci2(x),(2)
      即在拉格朗日函数的基础上,添加约束的二次罚函数。在第k步迭代,给定罚因子 σ k \sigma_k σk和橙子 λ k \lambda^k λk,增广拉格朗日函数 L σ k ( x , λ k ) L_{\sigma_k}(x,\lambda^k) Lσk(x,λk)的最小值点 x k + 1 x^{k+1} xk+1满足
      ∇ x L σ k ( x k 1 , λ k ) = ∇ f ( x k + 1 ) + ∑ i ∈ E ( λ i k + σ k c i ( x k + 1 ) ) ∇ c i ( x k + 1 ) = 0 (3) \nabla_xL_{\sigma_k}(x^{k_1},\lambda^k)=\nabla f(x^{k+1})+\sum_{i\in\mathcal{E}}(\lambda_i^k+\sigma_kc_i(x^{k+1}))\nabla c_i(x^{k+1})=0\tag{3} xLσk(xk1,λk)=f(xk+1)+iE(λik+σkci(xk+1))ci(xk+1)=0(3)
      对于优化问题(1),其最优解 x ∗ x^* x以及相应的乘子 λ ∗ \lambda^* λ需要满足
      ∇ f ( x ∗ ) + ∑ i ∈ E λ i ∗ ∇ c i ( x ∗ ) = 0 (4) \nabla f(x^*)+\sum_{i\in\mathcal{E}}\lambda_i^*\nabla c_i(x^*)=0\tag{4} f(x)+iEλici(x)=0(4)
      为使增广拉格朗日函数法产生的迭代点列收敛到 x ∗ x^* x,需要保证等式(3)(4)在最优解处的一致性。因此,对于充分大的 k k k
      λ i ∗ ≈ λ i k + σ k c i ( x k + 1 ) , ∀ i ∈ E \lambda_i^*\approx\lambda_i^k+\sigma_kc_i(x^{k+1}),\forall i\in\mathcal{E} λiλik+σkci(xk+1),iE
      上式等价于
      c i ( x k + 1 ) ≈ 1 σ k ( λ i ∗ − λ i k ) (5) c_i(x^{k+1})\approx\frac{1}{\sigma_k}(\lambda_i^*-\lambda_i^k)\tag{5} ci(xk+1)σk1(λiλik)(5)
      所以,当 λ i k \lambda_i^k λik足够接近 λ i ∗ \lambda_i^* λi时,点 x k + 1 x^{k+1} xk+1处的约束违反度将会远小于 1 σ k \frac{1}{\sigma_k} σk1。注意,在(1)式中约束违反度式正比于 1 σ k \frac{1}{\sigma_k} σk1的。即增广拉格朗日函数法可以通过有效地更新乘子来降低约束违反度,(5)式表明,橙子的一个有效的更新格式为
      λ i k + 1 = λ i k + σ k c i ( x k + 1 ) , ∀ i ∈ E \lambda_i^{k+1}=\lambda_i^k+\sigma_kc_i(x^{k+1}),\forall i\in\mathcal{E} λik+1=λik+σkci(xk+1),iE
      那么,我们得到问题(1)的增广拉格朗日函数法,见算法1,其中 c ( x ) = [ c i ( x ) ] i ∈ E c(x)=[c_i(x)]_{i\in\mathcal{E}} c(x)=[ci(x)]iE,并且 ∇ c ( x ) = [ ∇ c i ( x ) ] i ∈ E \nabla c(x)=[\nabla c_i(x)]_{i\in\mathcal{E}} c(x)=[ci(x)]iE

    算法1:增广拉格朗日函数法

    1. 选取初始点 x 0 x^0 x0,乘子 λ 0 \lambda^0 λ0,罚因子更新常数 ρ > 0 \rho>0 ρ>0,约束违反度常数 ϵ > 0 \epsilon>0 ϵ>0和精度要求 η k > 0 \eta_k>0 ηk>0。并令 k = 0 k=0 k=0.
    2. for k=0,1,2, ⋯ \cdots do
    3. \quad x k x^k xk为初始点,求解 min ⁡ x L σ k ( x , λ k ) \min_x\quad L_{\sigma_k}(x,\lambda_k) minxLσk(x,λk),得到满足精度条件 ∣ ∣ ∇ x L σ k ( x , λ k ) ∣ ∣ ≤ η k ||\nabla_xL_{\sigma_k}(x,\lambda^k)||\le\eta_k xLσk(x,λk)ηk的解 x k + 1 x^{k+1} xk+1
    4. \quad if ∣ ∣ c ( x k + 1 ) ∣ ∣ ≤ ϵ ||c(x^{k+1})||\le\epsilon c(xk+1)ϵ then
    5. \qquad 返回近似解 x k + 1 , λ k x^{k+1},\lambda^k xk+1,λk,终止迭代
    6. \quad end if
    7. \quad 更新乘子: λ k + 1 = λ k + σ k c ( x k + 1 ) \lambda^{k+1}=\lambda^k+\sigma_kc(x^{k+1}) λk+1=λk+σkc(xk+1)
    8. \quad 更新罚因子: σ k + 1 = ρ σ k \sigma_{k+1}=\rho\sigma_k σk+1=ρσk
    9. end for

    二、一般约束优化问题的增广拉格朗日函数法
    对于一般约束优化问题
    min ⁡ f ( x ) s . t c i ( x ) = 0 , i ∈ E c i ( x ) ≤ 0 , i ∈ I (6) \begin{aligned} \min\quad&f(x)\\ s.t\quad &c_i(x)=0,i\in\mathcal{E}\\ &c_i(x)\le 0, i\in\mathcal{I} \end{aligned}\tag{6} mins.tf(x)ci(x)=0,iEci(x)0,iI(6)
    也可以定义其增广拉个蓝i函数以及涉及相应的增广拉格朗日函数法。在拉格朗日函数的定义中,往往倾向于将简单的约束保留,对复杂的约束引入乘子。这里,对于带不等式约束的优化问题,我们先通过引入松弛变量将不等式约束转化为等式约束和简单的非负约束,再对保留非负约束形式的拉格朗日函数添加等式约束的二次罚函数来构造拉格朗日函数。

    1. 增广拉格朗日函数
      对于问题(6),引入松弛变量可以得到如下等价形式
      min ⁡ x , s f ( x ) , s . t c i ( x ) = 0 , i ∈ E , c i ( x ) + s i = 0 , i ∈ I , s i ≥ 0 , i ∈ I (7) \begin{aligned} \min_{x,s}\quad &f(x),\\ s.t\quad & c_i(x)=0,i\in\mathcal{E},\\ &c_i(x)+s_i=0,i\in\mathcal{I},\\ &s_i\ge 0,i\in\mathcal{I} \end{aligned}\tag{7} x,smins.tf(x),ci(x)=0,iE,ci(x)+si=0,iI,si0,iI(7)
      保留非负约束,可以构造拉格朗日函数
      L ( x , s , λ , μ ) = f ( x ) + ∑ i ∈ E λ i c i ( x ) + ∑ i ∈ I μ i ( c i ( x ) + s i ) , s i ≥ 0 , i ∈ I L(x,s,\lambda,\mu)=f(x)+\sum_{i\in\mathcal{E}}\lambda_ic_i(x)+\sum_{i\in\mathcal{I}}\mu_i(c_i(x)+s_i),s_i\ge0,i\in\mathcal{I} L(x,s,λ,μ)=f(x)+iEλici(x)+iIμi(ci(x)+si),si0,iI
      记问题(7)中等式约束的二次罚函数为 p ( x , s ) p(x,s) p(x,s),则
      p ( x , s ) = ∑ i ∈ E c i 2 ( x ) + ∑ i ∈ I ( c i ( x ) + s i ) 2 . p(x,s)=\sum_{i\in\mathcal{E}}c_i^2(x)+\sum_{i\in\mathcal{I}}(c_i(x)+s_i)^2. p(x,s)=iEci2(x)+iI(ci(x)+si)2.
      我们构造拉格朗日函数如下:
      L ( x , s , λ , μ ) = f ( x ) + ∑ i ∈ E λ i c i ( x ) + ∑ i ∈ I μ i ( c i ( x ) + s i ) + σ 2 p ( x , s ) , s i ≥ 0 , i ∈ I L(x,s,\lambda,\mu)=f(x)+\sum_{i\in\mathcal{E}}\lambda_ic_i(x)+\sum_{i\in\mathcal{I}}\mu_i(c_i(x)+s_i)+\frac{\sigma}{2}p(x,s),s_i\ge0,i\in\mathcal{I} L(x,s,λ,μ)=f(x)+iEλici(x)+iIμi(ci(x)+si)+2σp(x,s),si0,iI
      其中 σ \sigma σ为罚因子

    2. 增广拉格朗日函数法
      在第 k k k步迭代中,给定乘子 λ k , μ k \lambda_k,\mu_k λk,μk和罚因子 σ k \sigma_k σk,我们需要求解如下问题:
      min ⁡ x , s L σ k ( x , s , λ k , μ k ) , s . t s ≥ 0 (8) \min_{x,s} L_{\sigma_k}(x,s,\lambda_k,\mu_k),s.t s\ge 0\tag{8} x,sminLσk(x,s,λk,μk),s.ts0(8)
      以得到 x k + 1 , s k + 1 x^{k+1},s^{k+1} xk+1,sk+1。求解问题(8)的一个有效的方法是投影梯度法。另外一种方法是消去 s s s,求解只关于 x x x的优化问题。具体地,固定 x x x,关于 s s s的子问题可以表示为
      min ⁡ s ≥ 0 ∑ i ∈ I μ i ( c i ( x ) + s i ) + σ k 2 ∑ i ∈ I ( c i ( x ) + s i ) 2 \min_{s\ge 0}\sum_{i\in\mathcal{I}}\mu_i(c_i(x)+s_i)+\frac{\sigma_k}{2}\sum_{i\in\mathcal{I}}(c_i(x)+s_i)^2 s0miniIμi(ci(x)+si)+2σkiI(ci(x)+si)2
      根据凸优化问题的最优性理论, s s s为以上为题的一个全局最优解,当且仅当
      s i = max ⁡ { − μ i σ k − c i ( x ) , 0 } , i ∈ I (9) s_i=\max\{-\frac{\mu_i}{\sigma_k}-c_i(x),0\},\quad i\in\mathcal{I}\tag{9} si=max{σkμici(x),0},iI(9)
      s i s_i si的表达式代入 L σ k L_{\sigma_k} Lσk我们有
      L σ k ( x , λ k , s i m g a k ) = f ( x ) + ∑ i ∈ I λ i c i ( x ) + σ k 2 ∑ i ∈ E c i 2 + σ k 2 ∑ i ∈ I ( max ⁡ { μ i σ k + c i ( x ) , 0 } 2 − m u i 2 σ k 2 ) (10) L_{\sigma_k}(x,\lambda_k,simga_k)=f(x)+\sum_{i\in\mathcal{I}}\lambda_ic_i(x)+\frac{\sigma_k}{2}\sum_{i\in\mathcal{E}}c_i^2+\frac{\sigma_k}{2}\sum_{i\in\mathcal{I}}(\max\{\frac{\mu_i}{\sigma_k}+c_i(x), 0\}^2-\frac{mu_i^2}{\sigma_k^2}) \tag{10} Lσk(x,λk,simgak)=f(x)+iIλici(x)+2σkiEci2+2σkiI(max{σkμi+ci(x),0}2σk2mui2)(10)
      其为关于 x x x的连续可微函数。因此问题(8)等价于
      min ⁡ x ∈ R n L σ k ( x , λ k , μ k ) , \min_{x\in\mathcal{R^n}}\quad L_{\sigma_k}(x,\lambda_k,\mu_k), xRnminLσk(x,λk,μk),
      并可以利用梯度法求解。这样做的一个好处是,我们小区了变量 s s s,从而在低维空间 R n R^n Rn中求解极小点。
      对于问题(7),其最优解 x ∗ , s ∗ x^*,s^* x,s和乘子 λ ∗ , μ ∗ \lambda^*,\mu^* λ,μ满足KKT条件:
      0 = ∇ f ( x ∗ ) + ∑ i ∈ E λ i ∗ ∇ c i ( x ∗ ) + ∑ i ∈ I m u i ∗ ∇ c i ( x ∗ ) , μ i ∗ ≥ 0 , i ∈ I , s i ∗ ≥ 0 , i ∈ I . \begin{aligned} 0&=\nabla f(x^*)+\sum_{i\in\mathcal{E}}\lambda_i^*\nabla c_i(x^*)+\sum_{i\in\mathcal{I}}mu_i^*\nabla c_i(x^*),\\ \mu_i^*&\ge 0,i\in\mathcal{I},\\ s_i^*&\ge 0,i\in\mathcal{I}. \end{aligned} 0μisi=f(x)+iEλici(x)+iImuici(x),0,iI,0,iI.
      问题(8)的最优解 x k + 1 , s k + 1 x^{k+1},s^{k+1} xk+1,sk+1满足
      0 = ∇ f ( x k + 1 ) + ∑ i ∈ E ( λ i k + σ k c i ( x k + 1 ) ) ∇ c i ( x k + 1 ) + ∑ i ∈ i ( μ i k + σ k ( c i ( x k + 1 ) + s i k + 1 ) ) ∇ c i ( x k + 1 ) , s i k + 1 = m a x { − m u i k σ k − c i ( x k + 1 ) , 0 } , i ∈ I . \begin{aligned} 0&=\nabla f(x^{k+1})+\sum_{i\in\mathcal{E}}(\lambda_i^k+\sigma_kc_i(x^{k+1}))\nabla c_i(x^{k+1})+\sum_{i\in\mathcal{i}}(\mu_i^k+\sigma_k(c_i(x^{k+1})+s_i^{k+1}))\nabla c_i(x^{k+1}),\\ s_i^{k+1}&=max\{-\frac{mu_i^k}{\sigma_k}-c_i(x^{k+1}), 0\},i\in\mathcal{I}. \end{aligned} 0sik+1=f(xk+1)+iE(λik+σkci(xk+1))ci(xk+1)+ii(μik+σk(ci(xk+1)+sik+1))ci(xk+1),=max{σkmuikci(xk+1),0},iI.
      对比问题(7)和问题(8)的KKT条件,易知乘子的更新格式为
      λ i k + 1 = λ i k + σ k c i ( x k + 1 ) , i ∈ E μ i k + 1 = m a x { m u i k + σ k c i ( x k + 1 ) , 0 } , i ∈ I \begin{aligned} \lambda_i^{k+1}&=\lambda_i^k+\sigma_kc_i(x^{k+1}),i\in\mathcal{E}\\ \mu_i^{k+1}&=max\{mu_i^k+\sigma_kc_i(x^{k+1}), 0\},i\in\mathcal{I} \end{aligned} λik+1μik+1=λik+σkci(xk+1),iE=max{muik+σkci(xk+1),0},iI
      对于等式约束,约束违反度定义为
      v k ( x k + 1 ) = ∑ i ∈ E c i 2 ( x k + 1 ) + ∑ i ∈ I ( c i ( x k + 1 ) + s i k + 1 ) 2 v_k(x^{k+1})=\sqrt{\sum_{i\in\mathcal{E}}c_i^2(x^{k+1})+\sum_{i\in\mathcal{I}}(c_i(x^{k+1})+s_i^{k+1})^2} vk(xk+1)=iEci2(xk+1)+iI(ci(xk+1)+sik+1)2
      根据(9)式消去 s s s,约束违反度为
      v k ( x k + 1 ) = ∑ i ∈ E c i 2 ( x k + 1 ) + ∑ i ∈ I m a x { c i ( x k + 1 ) , − μ i k σ k } v_k(x^{k+1})=\sqrt{\sum_{i\in\mathcal{E}}c_i^2(x^{k+1})+\sum_{i\in\mathcal{I}}max\{c_i(x^{k+1}),-\frac{\mu_i^k}{\sigma_k}\}} vk(xk+1)=iEci2(xk+1)+iImax{ci(xk+1),σkμik}
      综上,我们给出优化问题(8)的增广拉格朗日函数法,见算法2,该算法与算法1结构相似,但它给出了算法参数的一种具体更新方式。每次计算出子问题的近似解 x k + 1 x^{k+1} xk+1后,算法需要判断约束违反度 v k k + 1 v_k^{k+1} vkk+1是否满足精度。若满足,则进行乘子更新,并提高子问题求解精度,此时罚因子不变;若不满足,则不进行乘子的更新,并适当增大罚因子以便得到约束违反度更小的解。


    算法2:一般约束优化问题的增广拉格朗日函数法

    1. 选取初始点 x 0 x^0 x0,乘子 λ 0 , μ 0 \lambda^0,\mu^0 λ0,μ0,罚因子 σ 0 > 0 \sigma_0>0 σ0>0,约束违反度常数 ϵ > 0 \epsilon>0 ϵ>0,精度常数 η > 0 \eta>0 η>0,以及常数 0 < α ≤ β ≤ 1 0\lt\alpha\le\beta\le 1 0<αβ1 ρ > 1 \rho>1 ρ>1。令 η 0 = 1 σ 0 , ϵ 0 = 1 σ 0 α \eta_0=\frac{1}{\sigma_0},\epsilon_0=\frac{1}{\sigma_0^\alpha} η0=σ01,ϵ0=σ0α1以及 k = 0 k=0 k=0.
    2. for k=0,1,2, ⋯ \cdots do
    3. \quad x k x^k xk为初始点,求解 min ⁡ x L σ k ( x , λ k , m u k ) \min_x L_{\sigma_k}(x,\lambda_k,mu_k) minxLσk(x,λk,muk)得到满足精度条件 ∣ ∣ min ⁡ x L σ k ( x , λ k , m u k ) ∣ ∣ 2 ≤ η k ||\min_x L_{\sigma_k}(x,\lambda_k,mu_k)||_2\le\eta_k minxLσk(x,λk,muk)2ηk的解 x k + 1 x^{k+1} xk+1
    4. \quad if v k ( x k + 1 ) ≤ ϵ k v_k(x^{k+1})\le\epsilon_k vk(xk+1)ϵk then
    5. \qquad if v k ( x k + 1 ) ≤ ϵ v_k(x^{k+1})\le\epsilon vk(xk+1)ϵ ∣ ∣ min ⁡ x L σ k ( x , λ k , m u k ) ∣ ∣ 2 ≤ η ||\min_x L_{\sigma_k}(x,\lambda_k,mu_k)||_2\le\eta minxLσk(x,λk,muk)2η then
    6. \qquad \quad 得到逼近解 x k + 1 , λ k , μ k x^{k+1},\lambda^k,\mu^k xk+1,λk,μk,终止迭代。
    7. \qquad end if
    8. \qquad 更新乘子:
      λ i k + 1 = λ i k + σ k c i ( x k + 1 ) , i ∈ E , μ i k + 1 = m a x { m u i k + σ k c i ( x k + 1 ) , 0 } , i ∈ I \begin{aligned} \lambda_i^{k+1} &= \lambda_i^k+\sigma_kc_i(x^{k+1}),i\in\mathcal{E},\\ \mu_i^{k+1} &= max\{mu_i^k+\sigma_kc_i(x^{k+1}), 0\}, i\in\mathcal{I} \end{aligned} λik+1μik+1=λik+σkci(xk+1),iE,=max{muik+σkci(xk+1),0},iI
    9. \qquad 罚因子不变: σ k + 1 = σ k \sigma_{k+1}=\sigma_k σk+1=σk
    10. \qquad 减小子问题求解误差和约束违反度: η k + 1 = η k σ k + 1 , ϵ k + 1 = ϵ k σ k + 1 β \eta_{k+1}=\frac{\eta_k}{\sigma_{k+1}},\epsilon_{k+1}=\frac{\epsilon_k}{\sigma_{k+1}^\beta} ηk+1=σk+1ηk,ϵk+1=σk+1βϵk
    11. \quad else
    12. \qquad 乘子不变: λ k + 1 = λ k \lambda_{k+1}=\lambda_k λk+1=λk.
    13. \qquad 更新罚因子: σ k + 1 = ρ σ k \sigma_{k+1}=\rho\sigma_k σk+1=ρσk.
    14. \qquad 调整子问题求解误差和约束违反度: η k + 1 = 1 σ k + 1 , ϵ k + 1 = 1 σ k + 1 β \eta_{k+1}=\frac{1}{\sigma_{k+1}},\epsilon_{k+1}=\frac{1}{\sigma_{k+1}^\beta} ηk+1=σk+11,ϵk+1=σk+1β1
    15. \quad end if
    16. end for

    三、凸优化问题的增广拉格朗日函数法
    考虑凸优化问题:
    min ⁡ x ∈ R n f ( x ) , s . t c i ( x ) ≤ 0 , i = 1 , 2 , ⋯   , m , (11) \begin{aligned} \min_{x\in R^n}\quad &f(x),\\ s.t\quad &c_i(x)\le 0, i=1,2,\cdots,m, \end{aligned}\tag{11} xRnmins.tf(x),ci(x)0,i=1,2,,m,(11)
    其中 f : R n → R , c i : R n → R , i = 1 , 2 , ⋯   , m f:R^n\rightarrow R,c_i:R^n\rightarrow R,i=1,2,\cdots,m f:RnR,ci:RnR,i=1,2,,m为闭凸函数。为了叙述的方便,这里考虑不等式形式的凸优化问题。定义可行域为 χ = { x ∣ c i ( x ) ≤ 0 , i = 1 , 2 , ⋯   , m } \chi=\{x|c_i(x)\le 0, i=1,2,\cdots,m\} χ={xci(x)0,i=1,2,,m}.
    对于问题(11),根据上街介绍的不等式约束的增广拉格朗日函数表达式,其增广拉格朗日函数为:
    L σ ( x , λ ) = f ( x ) + σ 2 ∑ i = 1 m ( m a x { λ i σ + c i ( x ) , 0 } − λ i 2 σ 2 ) L_{\sigma}(x,\lambda)=f(x)+\frac{\sigma}{2}\sum_{i=1}^{m}(max\{\frac{\lambda_i}{\sigma}+c_i(x), 0\}-\frac{\lambda_i^2}{\sigma^2}) Lσ(x,λ)=f(x)+2σi=1m(max{σλi+ci(x),0}σ2λi2)
    其中 λ \lambda λ σ \sigma σ分别为乘子以及罚因子。
    给定一系列单调递增的乘子 σ k ↑ σ ∞ \sigma_k\uparrow\sigma_{\infty} σkσ以及初始乘子 λ 0 \lambda_0 λ0,问题(11)的增广拉格朗日函数法为
    x k + 1 ≈ a r g min ⁡ x ∈ R n L σ k ( x , λ k ) , λ k + 1 = λ k + σ k ∇ λ L σ k ( x k + 1 , λ k ) = max ⁡ { 0 , λ k + σ k c ( x k + 1 ) } (12) \begin{aligned} &x^{k+1}\approx arg\min_{x\in R^n}L_{\sigma_k}(x,\lambda_k),\\ &\lambda^{k+1}=\lambda^k+\sigma_k\nabla_{\lambda}L_{\sigma_k}(x^{k+1},\lambda_k)=\max\{0,\lambda_k+\sigma_kc(x^{k+1})\} \end{aligned}\tag{12} xk+1argxRnminLσk(x,λk),λk+1=λk+σkλLσk(xk+1,λk)=max{0,λk+σkc(xk+1)}(12)
    为了方便叙述,一下定义 ϕ k ( x ) = L σ k ( x , λ k ) \phi_k(x)=L_{\sigma_k}(x,\lambda_k) ϕk(x)=Lσk(x,λk).由于 ϕ k ( x ) \phi_k(x) ϕk(x)的最小值点的显示表达式通常式未知的,我们往往调用迭代算法求其一个近似解。为了保证收敛性,我们要求该近似解至少满足如下非精确条件之一:
    ϕ k ( x k + 1 ) − i n f ϕ k ≤ ϵ k 2 2 σ k , ϵ k ≥ 0 , ∑ k = 1 ∞ ϵ k < + ∞ (13) \phi_k(x^{k+1})-inf\phi_k\le\frac{\epsilon_k^2}{2\sigma_k},\epsilon_k\ge 0,\sum_{k=1}^{\infty}\epsilon_k\lt+\infty \tag{13} ϕk(xk+1)infϕk2σkϵk2,ϵk0,k=1ϵk<+(13)
    ϕ k ( x k + 1 ) − i n f ϕ k ≤ δ k 2 2 σ k ∣ ∣ λ k + 1 − λ k ∣ ∣ 2 2 , δ k > 0 , ∑ k = 1 ∞ δ k < + ∞ (14) \phi_k(x^{k+1})-inf\phi_k\le\frac{\delta_k^2}{2\sigma_k}||\lambda_{k+1}-\lambda_k||_2^2,\delta_k\gt 0,\sum_{k=1}^{\infty}\delta_k\lt+\infty \tag{14} ϕk(xk+1)infϕk2σkδk2λk+1λk22,δk>0,k=1δk<+(14)
    d i s t ( 0 , ∂ ϕ k ( x k + 1 ) ) ≤ δ k ′ δ k ∣ ∣ λ k + 1 − λ k ∣ ∣ 2 , 0 ≤ δ k ′ → 0 , (15) dist(0,\partial\phi_k(x^{k+1}))\le\frac{\delta_k^{'}}{\delta_k}||\lambda_{k+1}-\lambda_k||_2,0\le\delta_k^{'}\rightarrow 0,\tag{15} dist(0,ϕk(xk+1))δkδkλk+1λk2,0δk0,(15)
    其中 ϵ k , δ k , δ k ′ \epsilon_k,\delta_k,\delta_k^{'} ϵk,δk,δk是认为设定的参数, d i s t ( 0 , ∂ ϕ k ( x k + 1 ) ) dist(0,\partial\phi_k(x^{k+1})) dist(0,ϕk(xk+1))表示0到集合 ∂ ϕ k ( x k + 1 ) \partial\phi_k(x^{k+1}) ϕk(xk+1)的欧几里得距离,根据 λ k + 1 \lambda_{k+1} λk+1的更新格式(12)容易得知
    ∣ ∣ λ k + 1 − λ k ∣ ∣ 2 = ∣ ∣ m a x { 0 , λ k + σ k c ( x k + 1 ) } − λ k ∣ ∣ 2 = ∣ ∣ m a x { − λ k , σ k c ( x k + 1 ) } ∣ ∣ 2 \begin{aligned} ||\lambda_{k+1}-\lambda_k||_2 &=||max\{0,\lambda_k+\sigma_kc(x^{k+1})\}-\lambda_k||_2 \\ &=||max\{-\lambda_k,\sigma_kc(x^{k+1})\}||_2 \end{aligned} λk+1λk2=max{0,λk+σkc(xk+1)}λk2=max{λk,σkc(xk+1)}2
    由于 inf ⁡ ϕ k \inf\phi_k infϕk是位置的,直接验证上述不精确条件是数值上不可行的。但是,如果 ϕ k \phi_k ϕk α − \alpha- α强凸函数,那么
    ϕ k ( x ) − inf ⁡ ϕ k ≤ 1 2 α d i s t 2 ( 0 , ∂ ϕ k ( x ) ) (16) \phi_k(x)-\inf\phi_k\le\frac{1}{2\alpha}dist^2(0,\partial\phi_k(x))\tag{16} ϕk(x)infϕk2α1dist2(0,ϕk(x))(16)
    根据(16)式,可以进一步构造如下数值可验证的不精确条件:
    d i s t ( 0 , ∂ ϕ k ( x k + 1 ) ) ≤ α σ k ϵ k , ϵ k ≥ 0 , ∑ k = 1 ∞ ϵ k < + ∞ d i s t ( 0 , ∂ ϕ k ( x k + 1 ) ) ≤ α σ k δ k ∣ ∣ λ k + 1 − λ k ∣ ∣ 2 , δ k ≥ 0 , ∑ k = 1 ∞ δ k < + ∞ d i s t ( 0 , ∂ ϕ k ( x k + 1 ) ) ≤ δ k ′ σ k ∣ ∣ λ k + 1 − λ k ∣ ∣ 2 , 0 ≤ δ k ′ → 0. \begin{aligned} &dist(0,\partial\phi_k(x^{k+1}))\le\sqrt{\frac{\alpha}{\sigma_k}}\epsilon_k,\epsilon_k\ge 0,\sum_{k=1}^{\infty}\epsilon_k\lt+\infty \\ &dist(0,\partial\phi_k(x^{k+1}))\le\sqrt{\frac{\alpha}{\sigma_k}}\delta_k||\lambda_{k+1}-\lambda_k||_2,\delta_k\ge 0,\sum_{k=1}^{\infty}\delta_k\lt+\infty \\ &dist(0,\partial\phi_k(x^{k+1}))\le\frac{\delta_k^{'}}{\sigma_k}||\lambda_{k+1}-\lambda_k||_2,0\le\delta_k^{'}\rightarrow 0. \end{aligned} dist(0,ϕk(xk+1))σkα ϵk,ϵk0,k=1ϵk<+dist(0,ϕk(xk+1))σkα δkλk+1λk2,δk0,k=1δk<+dist(0,ϕk(xk+1))σkδkλk+1λk2,0δk0.

    不精确条件下的增广拉格朗日函数法的收敛性证明这里省略。

    四、基追踪问题的增广拉格朗日函数法
    本小节以基追踪(BP)问题为例讨论增广拉格朗日函数法。我们见看到针对一些凸问题,增广拉格朗日函数法会有比较特殊的性质,比如固定罚因子也能保证算法的收敛性甚至有限终止性等。
    A ∈ R m × n , b ∈ R m , x ∈ R n A\in R^{m\times n},b\in R^m,x\in R^n ARm×n,bRm,xRn,BP问题为
    min ⁡ x ∈ R n ∣ ∣ x ∣ ∣ 1 , s . t . A x = b . (17) \min_{x\in R^n}\quad ||x||_1,\quad s.t.\quad Ax=b.\tag{17} xRnminx1,s.t.Ax=b.(17)
    引入拉格朗日乘子 y ∈ R m y\in R^m yRm,BP问题的拉格朗日函数为
    L ( x , y ) = ∣ ∣ x ∣ ∣ 1 + y T ( A x − b ) L(x,y)=||x||_1+y^T(Ax-b) L(x,y)=x1+yT(Axb)
    那么对偶函数
    KaTeX parse error: Unknown column alignment: - at position 43: … \begin{array} -̲b^Ty, &||A^Ty||…
    因此我们得到如下对偶问题:
    min ⁡ y ∈ R m b T y , s . t . ∣ ∣ A T y ∣ ∣ ∞ ≤ 1 (18) \min_{y\in R^m} b^Ty,\quad s.t. ||A^Ty||_{\infty}\le 1\tag{18} yRmminbTy,s.t.ATy1(18)
    通过引入变量 s s s,上述问题可以等价地携程
    min ⁡ y ∈ R m , s ∈ R n b T y , s . t . A T y − s = 0 , ∣ ∣ s ∣ ∣ ∞ ≤ 1 (19) \min_{y\in R^m, s\in R^n} b^Ty,\quad s.t.\quad A^Ty-s=0,||s||_{\infty}\le 1 \tag{19} yRm,sRnminbTy,s.t.ATys=0,s1(19)
    下面讨论如何对原始问题和对偶问题应用拉格朗日函数法。

    1. 原始问题的增广拉格朗日函数法
      引入罚因子 σ \sigma σ和乘子 λ \lambda λ,问题(17)的增广拉格朗日函数为
      L σ ( x , λ ) = ∣ ∣ x ∣ ∣ 1 + λ T ( A x − b ) + σ 2 ∣ ∣ A x − b ∣ ∣ 2 2 (20) L_{\sigma}(x,\lambda)=||x||_1+\lambda^T(Ax-b)+\frac{\sigma}{2}||Ax-b||_2^2 \tag{20} Lσ(x,λ)=x1+λT(Axb)+2σAxb22(20)
      在增广拉格朗日函数法的一般理论中,需要罚因子 σ \sigma σ足够大来保证迭代收敛。对于BP问题,可以证明,对于固定的非负罚因子也能够保证收敛性(尽管在实际中动态调整罚因子可能会使算法更快收敛)。现在考虑固定罚因子 σ \sigma σ情形的增广拉格朗日函数法。在第 k k k步迭代,更新格式为
      { x k + 1 = a r g min ⁡ x ∈ R n L σ ( x , λ k ) = a r g min ⁡ x ∈ R n { ∣ ∣ x ∣ ∣ 1 + σ 2 ∣ ∣ A x − b + λ k σ ∣ ∣ 2 2 } λ k + 1 = λ k + σ ( A x k + 1 − b ) . (21) \left\{ \begin{array}{rcl} &x^{k+1}&=arg\min_{x\in R^n}L_{\sigma}(x,\lambda_k)=arg\min_{x\in R^n}\{||x||_1+\frac{\sigma}{2}||Ax-b+\frac{\lambda_k}{\sigma}||_2^2\} \\ &\lambda_{k+1}&=\lambda_k+\sigma(Ax^{k+1}-b). \end{array} \right.\tag{21} {xk+1λk+1=argminxRnLσ(x,λk)=argminxRn{x1+2σAxb+σλk22}=λk+σ(Axk+1b).(21)
      设迭代的初始点为 x 0 = λ 0 = 0 x^0=\lambda^0=0 x0=λ0=0。考虑迭代格式(21)中的第一步,假设 x k + 1 x^{k+1} xk+1 L σ ( x , λ k ) L_{\sigma}(x,\lambda^k) Lσ(x,λk)的一个全局极小解,那么
      0 ∈ ∂ ∣ ∣ x k + 1 ∣ ∣ 1 + σ A T ( A x k + 1 − b + λ k σ ) 0\in\partial||x^{k+1}||_1+\sigma A^T(Ax^{k+1}-b+\frac{\lambda_k}{\sigma}) 0xk+11+σAT(Axk+1b+σλk)
      因此
      − A T λ k + 1 ∈ ∂ ∣ ∣ x k + 1 ∣ ∣ 1 (22) -A^T\lambda_{k+1}\in\partial||x^{k+1}||_1\tag{22} ATλk+1xk+11(22)
      满足上式的 x k + 1 x^{k+1} xk+1往往是不能显式得到的,因此需要采用迭代算法来进行求解,比如次梯度法或者近似点梯度法等等。
      这里我们沿用之前的A和b的生成方式,选取不同的稀疏度 r = 0.1 r=0.1 r=0.1 r = 0.2 r=0.2 r=0.2。我们固定罚因子 σ \sigma σ,并采用近似点梯度法作为求解器,不精确地求解关于 x x x的子问题得到 x k + 1 x^{k+1} xk+1。具体地,设置求解精度 η k = 1 0 − k \eta_k=10^{-k} ηk=10k,并且使用BB步长作为线搜索的初始步长,下图展示了算法产生的迭代点与最优点的举例变化以及约束违反度的走势。从图中可以看出:对于BP问题,固定的 σ \sigma σ也可以保证增广拉格朗日函数法的收敛性
    %% 基追踪问题的增广拉格朗日函数法
    
    %% 初始化和迭代准备
    % 输入信息: 初始迭代点 $x^0$ 和数据 $A$, $b$,以及停机准则参数结构体 |opts|%
    % 输出信息: 迭代得到的解 $x$ 和包含算法求解中的相关迭代信息结构体 |out|%
    % * |out.feavec| :每一步外层迭代的约束违反度 $\|Ax-b\|_2$
    % * |out.inn_itr| :总的内层迭代的步数(即近似点梯度法的迭代步数)
    % * |out.tt| :程序运行时间
    % * |out.fval| :迭代结束时的目标函数值
    % * |out.itr| :外层迭代步数
    % * |out.itervec| :迭代点列 $x$
    
    function [x, out] = BP_ALM(x0, A, b, opts)
    %%%
    % 从输入的结构体 |opts| 中读取参数或采取默认参数。
    %
    % * |opts.itr| :外层迭代的最大迭代步数
    % * |opts.itr_inn| :内层迭代的最大迭代步数
    % * |opts.sigma| :罚因子
    % * |opts.tol0| :初始的收敛精度
    % * |opts.gamma| :线搜索参数
    % * |opts.verbose| :表示输出的详细程度, |>1| 时每一步输出, |=1| 时每一次外层循环输出, |=0| 时不输出
    if ~isfield(opts, 'itr'); opts.itr = 20; end
    if ~isfield(opts, 'itr_inn'); opts.itr_inn = 2500; end
    if ~isfield(opts, 'sigma'); opts.sigma = 1; end
    if ~isfield(opts, 'tol0'); opts.tol0 = 1e-1; end
    if ~isfield(opts, 'gamma'); opts.gamma = 1; end
    if ~isfield(opts, 'verbose'); opts.verbose = 2; end
    sigma = opts.sigma;
    gamma = opts.gamma;
    
    %%%
    % 迭代准备。
    k = 0;
    tt = tic;
    out = struct();
    
    %%%
    % 计算并记录初始时刻的约束违反度。
    out.feavec = norm(A*x0 - b);
    x = x0;
    lambda = zeros(size(b));
    out.itr_inn = 0;
    
    %%%
    % 记录迭代过程的优化变量 $x$ 的值。
    itervec = zeros(length(x0),opts.itr);
    
    %%%
    % $\sigma A^\top A$ 的最大特征值,用于估计步长。
    L = sigma*eigs(A'*A,1);
    
    %% 迭代主循环
    %|opts.itr| 为最大迭代次数。
    while k < opts.itr  
    
        Axb = A*x - b;
        c = Axb + lambda/sigma;
        g = sigma*(A'*c);
        tmp = .5*sigma*norm(c,2)^2;
        f = norm(x,1) + tmp;
        
        nrmG = norm(x - prox(x - g,1),2);
        tol_t = opts.tol0*10^(-k);
        t = 1/L;
        
        Cval = tmp; Q = 1;
        k1 = 0;
        
        %%%
        % 内层循环,当最优性条件违反度小于阈值,或者超过最大内层迭代次数限制时,退出内层循环。
        while k1 < opts.itr_inn && nrmG > tol_t
            
            %%%
            % 记录上一步的结果。
            gp = g;
            xp = x;
            
            x = prox(xp - t*gp, t);
            nls = 1;
            
            while 1
                tmp = 0.5 *sigma*norm(A*x - b + lambda/sigma, 2)^2;
                if tmp <= Cval + g'*(x-xp) + .5*sigma/t*norm(x-xp,2)^2 || nls == 5
                    break;
                end
                %%%
                % 如果没有达到线搜索标准,衰减步长,重新试探。
                t = 0.2*t;
                nls = nls + 1;
                x = prox(xp - t * g, t);
            end
            
            %%%
            % 退出线搜索后,更新各量的值。
            f = tmp + norm(x,1);
            nrmG = norm(x - xp,2)/t;
            Axb = A*x - b;
            c = Axb + lambda/sigma;
            g = sigma*(A' * c);
            
            dx = x - xp;
            dg = g - gp;
            dxg = abs(dx'*dg);
            if dxg > 0
                if mod(k,2) == 0
                    t = norm(dx,2)^2/dxg;
                else
                    t = dxg/norm(dg,2)^2;
                end
            end
            
            %%%
            % 取步长为上述 BB 步长和 $1/L$中的较大者,并限制在 $10^{12}$ 范围内。
            t = min(max(t,1/L),1e12);
            
            %%%
            % 计算 (Zhang & Hager) 线搜索准则中的递推常数,其满足 $C_0=f(x^0),\ C_{k+1}=(\gamma
            % Q_kC_k+f(x^{k+1}))/Q_{k+1}$,序列 $Q_k$ 满足 $Q_0=1,\ Q_{k+1}=\gamma
            % Q_{k}+1$。
            Qp = Q; Q = gamma*Qp + 1; Cval = (gamma*Qp*Cval + tmp)/Q;
            
            %%%
            % 当需要详细输出时,输出每一步的结果,利用 |k1| 记录内层迭代的迭代步数。
            k1 = k1 + 1;
            if opts.verbose > 1
                fprintf('itr_inn: %d\tfval: %e\t nrmG: %e\n', k1, f,nrmG);
            end
        end
        
        %%%
        % 每一次内层迭代结束输出当前的结果。
        if opts.verbose
            fprintf('itr_inn: %d\tfval: %e\t nrmG: %e\n', k1, f,nrmG);
        end
        
        %% 更新拉格朗日乘子
        % 在通过近似点梯度法对 $x$ 进行更新之后,对拉格朗日乘子 $\lambda$ 进行更新,迭代格式为
        % $\lambda^{k+1}=\lambda^k+\sigma(Ax^{k+1}-b)$。
        lambda = lambda + sigma*Axb;
        
        %%%
        % 迭代步数加 1,依次记录外层迭代后的约束违反度、每一步迭代的 $x$ 的值,更新内层迭代的总次数。
        k = k + 1;
        out.feavec = [out.feavec; norm(Axb)];
        itervec(:,k) = x;
        out.itr_inn = out.itr_inn + k1;
    end
    
    %%%
    % 外层迭代结束,记录输出。
    out.tt = toc(tt);
    out.fval = f;
    out.itr = k;
    out.itervec = itervec;
    end
    
    %% 辅助函数
    function y = prox(x,mu)
    y = max(abs(x) - mu, 0);
    y = sign(x) .* y;
    end
    

    主函数

    %% 构造基追踪问题
    % 设定随机种子。
    clear;
    seed = 97006855;
    ss = RandStream('mt19937ar','Seed',seed);
    RandStream.setGlobalStream(ss);
    %%%
    % 构造基追踪问题, $u$ 为问题的真实解(其稀疏度为 $0.1$),使得 $b=Au$, $x^0$ 为随机的迭代初始点。
    m = 512;
    n = 1024;
    A = randn(m, n);
    u = sprandn(n, 1, 0.1);
    b = A * u;
    x0 = randn(n, 1);
    %%%
    % 参数设定。
    opts.verbose = 0;
    opts.gamma = 0.85;
    opts.itr = 7;
    %% 求解基追踪问题
    % 调用算法 |BP_ALM| 求解 BP 问题。
    [x, out] = bp_alm(x0, A, b, opts);
    
    figure
    stem(u)
    hold on
    stem(x, 'rx')
    axis tight
    legend('u', 'x')
    

    求解结果如下
    在这里插入图片描述

    展开全文
  • 拉格朗日函数最优化问题

    千次阅读 2021-07-15 13:33:06
    目的:将有约束条件的函数最优化问题通过拉格朗日函数转化为无条件的函数最优化问题。 条件极值最优化问题: 对于无条件的函数最优化问题,常用的有3种方式: 梯度下降:求解一阶导数,其实就是使用泰勒一阶展开...
  • 高数篇:04拉格朗日中值定理

    千次阅读 2021-01-28 14:21:28
    高数篇:04拉格朗日中值定理高数篇:04拉格朗日中值定理定理7:拉格朗日中值定理拉格朗日的应用拉格朗日与罗尔定理的区别转载需注明出处 高数篇:04拉格朗日中值定理 定理7:拉格朗日中值定理 下面提出拉格朗日中值...
  • 全部笔记的汇总贴(视频也有传送门):中科大-凸优化 一、线性等式约束的凸优化问题 αk=arg min⁡α≥0f(xk+αdk)xk+1=xk+...二、拉格朗日法 xk+1=xk−αk(∇f(xk)+ATvk)vk+1=vk+αk(Axk−b)x^{k+1}=x^k-\alpha^k(\n
  • 拉格朗日乘数法讲解及案例

    万次阅读 2020-06-13 14:55:41
    即对函数求极值,而自变量要满足约束条件。 使用方法 例如:求f(x,y,z)的极值,要求f的自变量满足约束条件φ(x,y,z)。 解: 第一步: 设L=f(x,y,z)+λφ(x,y,z); 第二步: 求L的驻点,即对各个自变量求L的偏导数...
  • 前面讲了凸优化问题的定义,以及一些常见的凸优化问题类型,这一章就要引入著名的拉格朗日函数和对偶问题了。通过对偶问题,我们可以将一些非凸问题转化为凸优化问题,还可以求出原问题的非平凡下界,这对复杂优化...
  • 拉格朗日法线性规划求解

    千次阅读 2020-04-20 09:21:57
    目录拉格朗日法线性规划求解1、拉格朗日乘子法2、拉格朗日乘子法例题求解<1>直接计算<2>python编程实现<3>python中scipy包实现 1、拉格朗日乘子法 拉格朗日乘数法(以数学家约瑟夫·路易斯·...
  • 大连理工大学2022年春季最优化方法上机作业——用Matlab实现最速下降法、阻尼牛顿法、BFGS方法、共轭梯度法、DFP方法、惩罚函数法、增广拉格朗日函数
  • #16 拉格朗日乘数法 所谓拉格朗日乘数法,是一种求条件极值的办法。所谓条件极值,就是在给定的约束条件下,求目标函数的极值。 符号解释:目标函数 u=f(x,y)u = f(x,y)u=f(x,y), 约束...构造拉格朗日函数F(x,y,λ)=
  • 《数值分析》-- 拉格朗日插值

    千次阅读 2021-11-27 21:34:57
    文章目录问题一、拉格朗日插值基函数二、拉格朗日插值多项式三、次Lagrange插值多项式余项习题 问题 一、拉格朗日插值基函数 n=1时一次基函数 两点线性插值问题 问题:即已知函数 f(x)在点x0x_0x0​和x1...
  • lagrange插值法:求拉格朗日插值多项式matlab实现(内附代码及例题) 关于拉格朗日插值法相关理论知识,在这里小编不在赘述...%%%% 求拉格朗日多项式及基函数 %%%% %%%% Liu Deping %%%% %%%% 2020.06.14 %%%% %输入的量:
  • 拉格朗日对偶问题

    2022-04-06 21:45:48
    拉格朗日乘数法、拉格朗日对偶问题的原理,拉格朗日对偶问题的充分条件和必要条件
  • 拉格朗日乘子法最优值求解,求解函数的最小值,极小值求解,求解速度快。效率高
  • 拉格朗日插值法使用MATLAB做的例题

    千次阅读 2021-04-21 01:23:15
    拉格朗日插值法使用MATLAB做的例题》由会员分享,可在线阅读,更多相关《拉格朗日插值法使用MATLAB做的例题(2页珍藏版)》请在人人文库网上搜索。1、一物体廓线数据如下:x035791112131415y01.21.72.02.12.01.81.21...
  • 看到多元函数条件极值的题目,常用拉格朗日乘数法对号入座。但有时候如坐针毡,因为这种看似万能的方法计算量太大了。解方程解的生无可恋是常态。所以我总结了一些解条件极值的小技巧,希望对大家有所帮助。 总的来...
  • 构造拉格朗日函数 F(x,λ)=f(x)+∑j=0nλjhj​(x){F(x,\lambda)=f(x)+\displaystyle\sum_{j=0}^n\lambda_jh_j​(x)}F(x,λ)=f(x)+j=0∑n​λj​hj​​(x) 其中,f ( x ) 为原来的目标函数,j表示第j个等式约束条件,...
  • 拉格朗日对偶的实例计算

    千次阅读 2020-12-05 11:00:57
    1.1 拉格朗日函数 1.2 拉格朗日对偶函数 二、标准形式线性规划拉格朗日对偶 minCTxs.t.Ax=bx≥0 min C^Tx\\s.t. Ax=b\\x\ge0 minCTxs.t.Ax=bx≥0 构建拉格朗日表达式 在标准优化形式中,f(x)≤0f(x)\le0f(x)≤0...
  • 拉格朗日求条件极值问题

    千次阅读 2021-04-01 17:59:32
    目录题目描述最优化问题利用拉格朗日手工求解问题拉格朗日编程求解问题 题目描述 最优化问题 1.等式约束的优化 2.不等式约束的优化 利用拉格朗日手工求解问题 1.构造拉格朗日函数 ...#构造拉格朗日函数
  • 拉格朗日插值公式的完全展开。可以方便地编程实现
  • 拉格朗日函数求解最优化问题时也可以先找到其对偶问题再求解对于无等式约束的问题: minxf(x)\min\limits_{x} \quad f(x) s.t. gj(x)≤0s.t.\ \ g_j(x)\leq0 构造拉格朗日函数: L(x,μ)=f(x)+μjgj(x)L(x,\mu)...
  • Python算法实现拉格朗日插值法,原函数已知,对拟合结果进行分析—数值分析
  • 本文通过一系列的例子来说明拉格朗日乘子的运算以及原理,通俗易懂。 1、拉格朗日乘数(乘子)原理 定义: In mathematical optimization, the method of Lagrange multipliers is a strategy for finding the ...
  • 文章目录定义理解「拉格朗日乘数法」一些例题 定义 拉格朗日乘数法(Lagrange multiplier,以数学家约瑟夫·拉格朗日命名),在数学中的最优化问题中,是一种寻找多元函数在其变量受到一个或多个条件的约束时的极值...
  • 用牛顿-拉格朗日法求解约束优化问题,% min f(x) s.t. h_i(x)=0, i=1,..., l. %输入: x0是初始点, mu0是乘子向量的初始值 %输出: x, mu 分别是近似最优点及相应的乘子, % val是最优值, mh是约束函数的模, k是...
  • 对于只有等式约束的问题,如: ...用拉格朗日函数优化求解的方法是 构造拉格朗日函数 L(x,λi)=f(x)+∑ki=1λihi(x)L(x,\lambda_i)=f(x)+\sum_{i=1}^k \lambda_ih_i(x) 用条件 ∂L∂x=0\frac{\partial L}

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,047
精华内容 418
关键字:

拉格朗日函数例题