目录

  • 背景
  • 拉格朗日松弛——理论
  • 拉格朗日松弛——算法
    • 次梯度优化算法
    • 拉格朗日松弛启发式算法
  • 参考资料

背景

Marshall L.Fisher在1981年发表在《Management Science》上的《The Lagrangian Relaxation Method for Solving Integer Programming Problems》1在2004年被评为“《Management Science》首个50年中十大最具影响力的主题之一”。

在中国知网中,以“拉格朗日松弛”作为关键词在“篇关摘”选项下检索,并对结果进行计量可视化分析可得到如下的图表。

从发文量这一指标可以看到,近10年涉及这一方法的论文显著增多。



从主要主题分布、次要主题分布中可以看到,在理论层面,该方法与动态规划、整数规划、凸优化和启发式算法等知识都有较为紧密的联系。在应用层面,该方法在机组组合、资源分配、调度、供应链和设施选址等领域都有应用。

拉格朗日松弛——理论

理论和算法部分内容参考资料2进行介绍,主要介绍拉格朗日松弛的思想、重要结论和拉格朗日松弛算法,结论的证明和更多内容可参考该书。除此之外,本文也吸纳了网上其他相关资料,帮助读者理解。

松弛的意思即为放松约束,对于一个标准化为求最小值的优化问题,放松约束会使得有可能得到目标函数值更小的解,换言之,松弛可以求得原问题的一个下界,这为评价其他算法的有效性提供了一种途径,也为原问题的求解提供了更多信息。

该方法常用在整数规划和混合整数规划中。

松弛方法主要有以下四种:线性规划松弛(将整数约束松弛至实数约束)、对偶规划松弛(求解对偶规划,根据弱对偶定理,求 max \text{max} max 的对偶问题提供了求 min \text{min} min 的原问题的一个下界)、代理松弛(通过组合多个约束减少约束的数量,如相加)和拉格朗日松弛。本篇博文介绍拉格朗日松弛。

拉格朗日松弛方法的基本原理:将造成问题难的约束吸收到目标函数中,并使得目标函数仍保持线性,使得变换后的问题可以在多项式时间求解或者尽管不能在多项式时间求解但由于规模较小而可以快速求解3,从而为原问题的求解提供帮助。

如上图4所示(细线红框中应为 “ ≥ \ge ≥” 和 “ ≤ \le ≤” ,粗线红框中应为“lower”,“lower bound”表示下界),假设一个问题的约束可以分为两部分,即图中的 A A A 和 D D D( D 1 D_1 D1​、 D 2 D_2 D2​、 D 3 D_3 D3​),它们的区别是 D D D 只和某一部分变量有关,而 A A A 和所有变量都有关,则 A A A 就是上面所说的“造成问题难的约束”(也称复杂约束)。拉格朗日松弛就是将这个复杂约束放到了目标函数中。关于 λ \lambda λ 为什么要求非负,可参见5。下图6可以帮助理解。


进一步地,已知拉格朗日松弛后的目标函数值 z L R z_{LR} zLR​ 是原问题目标函数值 z z z 的一个下界,由于需要尽可能地接近原问题的目标函数值,故可以对松弛后的问题 z L R z_{LR} zLR​ 关于 λ λ λ 求最大值(构成对偶问题,Dual Problem),得到的是所有下界中的最佳值 z L D z_{LD} zLD​(下图4红框中应为 z L D z_{LD} zLD​ )。

拉格朗日松弛的用途如下6

以上是拉格朗日松弛的基础理论,下面介绍一些常见的变形。

首先是等式约束的松弛。这里和“线性规划对偶问题中等式约束对应的对偶变量没有符号限制”以及“库恩-塔克条件(KKT条件)中等式约束对应的系数没有符号限制”的原理完全相同,等式约束松弛对应的系数也没有符号限制(两个非负的系数相减得到一个没有符号限制的系数)。

其次是拉格朗日分解。回顾上述问题4,不妨设 n = 3 n=3 n=3 ,与下面的示意图保持一致。

则将松弛后的问题目标函数中的 x x x 按照 x 1 x_1 x1​、 x 2 x_2 x2​ 和 x 3 x_3 x3​ 分解可以等价变换为如下的问题。
z L R ( λ ) = minimize c 1 T x 1 + c 2 T x 2 + c 3 T x 3 + λ T ( A 1 x 1 + A 2 x 2 + A 3 x 3 − b ) subject to D 1 T x 1 ≤ e 1 D 2 T x 2 ≤ e 2 D 3 T x 3 ≤ e 3 x 1 , x 2 , x 3 ∈ Z + n \begin{array}{ll} z_{LR}(\lambda)=\text{minimize} & c_1^T x_1 +c_2^T x_2+c_3^T x_3+\lambda^T(A_1x_1+A_2x_2+A_3x_3-b) \\ \text{subject to} & D_1^T x_1 \le e_1 \\ & D_2^T x_2 \le e_2 \\ & D_3^T x_3 \le e_3 \\ & x_1, x_2, x_3 \in \Bbb{Z^n_+} \end{array} zLR​(λ)=minimizesubject to​c1T​x1​+c2T​x2​+c3T​x3​+λT(A1​x1​+A2​x2​+A3​x3​−b)D1T​x1​≤e1​D2T​x2​≤e2​D3T​x3​≤e3​x1​,x2​,x3​∈Z+n​​进一步可将上述问题按照按照 x 1 x_1 x1​、 x 2 x_2 x2​ 和 x 3 x_3 x3​ 分解为三个子问题,由于目标函数和约束都是关于 x 1 x_1 x1​、 x 2 x_2 x2​ 和 x 3 x_3 x3​ 可分的,故这一步是等价变换。

子问题一:
z L R 1 ( λ ) = minimize c 1 T x 1 + λ T ( A 1 x 1 − b ) subject to D 1 T x 1 ≤ e 1 x 1 ∈ Z + n \begin{array}{ll} z_{LR1}(\lambda)=\text{minimize} & c_1^T x_1+\lambda^T(A_1x_1-b) \\ \text{subject to} & D_1^T x_1 \le e_1 \\ & x _1\in \Bbb{Z^n_+} \end{array} zLR1​(λ)=minimizesubject to​c1T​x1​+λT(A1​x1​−b)D1T​x1​≤e1​x1​∈Z+n​​子问题二:
z L R 2 ( λ ) = minimize c 2 T x 2 + λ T A 2 x 2 subject to D 2 T x 2 ≤ e 2 x 2 ∈ Z + n \begin{array}{ll} z_{LR2}(\lambda)=\text{minimize} & c_2^T x_2+\lambda^TA_2x_2 \\ \text{subject to} & D_2^T x_2 \le e_2 \\ & x _2\in \Bbb{Z^n_+} \end{array} zLR2​(λ)=minimizesubject to​c2T​x2​+λTA2​x2​D2T​x2​≤e2​x2​∈Z+n​​子问题三:
z L R 3 ( λ ) = minimize c 3 T x 3 + λ T A 3 x 3 subject to D 3 T x 3 ≤ e 3 x 3 ∈ Z + n \begin{array}{ll} z_{LR3}(\lambda)=\text{minimize} & c_3^T x_3+\lambda^TA_3x_3 \\ \text{subject to} & D_3^T x_3 \le e_3 \\ & x _3\in \Bbb{Z^n_+} \end{array} zLR3​(λ)=minimizesubject to​c3T​x3​+λTA3​x3​D3T​x3​≤e3​x3​∈Z+n​​分解后的子问题的目标函数值和原问题目标函数值有如下的关系。
z L R 1 ( λ ) + z L R 2 ( λ ) + z L R 3 ( λ ) = z L R ( λ ) ≤ z z_{LR1}(\lambda)+z_{LR2}(\lambda)+z_{LR3}(\lambda)=z_{LR}(\lambda) \le z zLR1​(λ)+zLR2​(λ)+zLR3​(λ)=zLR​(λ)≤z对偶问题如下。
z L D = max  z L R 1 ( λ ) + z L R 2 ( λ ) + z L R 3 ( λ ) z_{LD}= \text{max}\space z_{LR1}(\lambda)+z_{LR2}(\lambda)+z_{LR3}(\lambda) zLD​=max zLR1​(λ)+zLR2​(λ)+zLR3​(λ)可以看到,在拉格朗日松弛的基础上,拉格朗日分解将原问题拆分为了不含复杂约束的子问题,从而可以通过求解较易的子问题来对原问题进行近似。

拉格朗日松弛——算法

拉格朗日松弛算法包含两部分内容:一方面是提供原问题的下界(求解 z L D z_{LD} zLD​),另一方面则演变为拉格朗日松弛启发式算法。

次梯度优化算法

次梯度(subgradient)与梯度(gradient)十分相似,次梯度是函数在某些点处不可微时对梯度的一种扩展。引入次梯度是因为 z L R ( λ ) z_{LR}(\lambda) zLR​(λ) 是一个关于 λ \lambda λ 的分段线性函数,这一点将在后续说明。

按照2中的编号介绍相关定义和定理如下,详细证明可参看之。

定义 7.4.1 函数 g : R m → R g:\Bbb{R^m}\to\Bbb{R} g:Rm→R 满足 g ( α x 1 + ( 1 − α ) x 2 ) ≥ α g ( x 1 ) + ( 1 − α ) g ( x 2 ) , ∀ x 1 , x 2 ∈ R m , 0 ≤ α ≤ 1 \begin{array}{ll} g(\alpha x^1+(1-\alpha)x^2)\ge\alpha g(x^1)+(1-\alpha)g(x^2) , \forall x^1, x^2\in \Bbb{R^m}, 0 \le \alpha \le1 \end{array} g(αx1+(1−α)x2)≥αg(x1)+(1−α)g(x2),∀x1,x2∈Rm,0≤α≤1​则称 g ( x ) g(x) g(x) 为凹函数。

定理 7.4.1 若经拉格朗日松弛后的问题( z L R z_{LR} zLR​)的可行解集合 Q Q Q 是有限个整数点的集合,则目标函数 z L R ( λ ) = min  c T x + λ T ( A x − b ) \begin{array}{ll} z_{LR}(\lambda)=\text{min}\space c^T x+\lambda^T(Ax-b) \end{array} zLR​(λ)=min cTx+λT(Ax−b)​是凹函数。(通过定义证明)

定理 7.4.2 可微函数 g ( x ) g(x) g(x) 是凹函数的充分必要条件为 ∀ x ∗ ∈ R m \forall x^*\in\Bbb{R^m} ∀x∗∈Rm,存在 s = ( s 1 , s 2 , … , s m ) T ∈ R m s=(s_1,s_2,…,s_m)^T\in\Bbb{R^m} s=(s1​,s2​,…,sm​)T∈Rm使得 g ( x ∗ ) + s T ( x − x ∗ ) ≥ g ( x ) , ∀ x ∈ R m . \begin{array}{ll} g(x^*)+s^T(x-x^*)\ge g(x), \forall x\in\Bbb{R^m}. \end{array} g(x∗)+sT(x−x∗)≥g(x),∀x∈Rm.​(类比凸函数的一阶条件理解)

下图1定理 7.4.1结论的示意图(图中的 u u u 即为 λ \lambda λ ),随着 λ \lambda λ 的变化, z L R ( λ ) z_{LR}(\lambda) zLR​(λ) 在不同的点 x x x( x 1 x^1 x1、 x 2 x^2 x2、 x 3 x^3 x3、 x 4 x^4 x4)处达到最小值,而当 x x x 不变时, z L R ( λ ) z_{LR}(\lambda) zLR​(λ) 关于 λ \lambda λ 是一线性函数,故总结来看 z L R ( λ ) z_{LR}(\lambda) zLR​(λ) 关于 λ \lambda λ 是一分段线性函数,亦是凹函数。每段直线表示取最小值的 x x x 点保持不变。

定义 7.4.2 若函数 g : R m → R g:\Bbb{R^m}\to\Bbb{R} g:Rm→R 为凹函数,且在点 x ∗ ∈ R m x^*\in\Bbb{R^m} x∗∈Rm 处,向量 s ∈ R m s\in\Bbb{R^m} s∈Rm 满足 g ( x ∗ ) + s T ( x − x ∗ ) ≥ g ( x ) , ∀ x ∈ R m \begin{array}{ll} g(x^*)+s^T(x-x^*)\ge g(x) , \forall x\in \Bbb{R^m} \end{array} g(x∗)+sT(x−x∗)≥g(x),∀x∈Rm​则称 s ∈ R m s\in\Bbb{R^m} s∈Rm 为函数 g ( x ) g(x) g(x) 在 x ∗ x^* x∗处的一个次梯度。 g ( x ) g(x) g(x) 在 x ∗ x^* x∗ 处的所有次梯度组成的集合记为 ∂ g ( x ∗ ) \partial g(x^*) ∂g(x∗)。(直观理解,在一元函数的情况下,次梯度可以是函数在 x ∗ x^* x∗ 处左导数和右导数之间的任何一个值。)

定理 7.4.3 若 g ( x ) g(x) g(x) 为凹函数, x ∗ x^* x∗ 为 max  { g ( x ) ∣ x ∈ R m } \text{max}\space\{g(x)|x\in\ \Bbb{R^m}\} max {g(x)∣x∈ Rm} 最优解的充分必要条件为 0 ∈ ∂ g ( x ∗ ) 0\in\partial g(x^*) 0∈∂g(x∗)。

次梯度优化算法

  1. STEP1:任选一个初始拉格朗日乘子 λ 1 \lambda^1 λ1,并置 t = 1 t=1 t=1.
  2. STEP2:针对本次迭代的 λ t \lambda^t λt,求解对偶问题内层的最小化问题,并从 ∂ z L R ( λ t ) \partial z_{LR}(\lambda^t) ∂zLR​(λt) 中任选一个次梯度 s t s^t st;若 s t = 0 s^t=0 st=0,则 λ t \lambda^t λt 达到最优解而停止计算;否则 λ t + 1 = max  { λ t + θ t s t , 0 } \lambda^{t+1}=\text{max}\space\{\lambda^{t}+\theta_ts^t, 0 \} λt+1=max {λt+θt​st,0},置 t = t + 1 t=t+1 t=t+1, 重复STEP2。

实际应用中不可能迭代无穷多次,故必须给出 θ t \theta_t θt​ 的确定方法和算法停止的条件。

  • θ t \theta_t θt​ 的确定方法
    实际计算的目的是尽快得到一个可以接受的下界,故常采用启发式的方法进行确定。主要有以下两类方法。
    第一类方法是使 θ t \theta_t θt​ 以指数速度下降,迭代次数较少。更新公式如下。
    θ t = θ 0 ρ t , 0 < ρ < 1 \theta_t=\theta_0\rho^t, 0\lt\rho\lt1 θt​=θ0​ρt,0<ρ<1第二类方法的主要思想是用对偶问题的上下界的差修正 θ t \theta_t θt​ 变化的速度。更新公式如下。
    θ t = z U P ( t ) − z L B ( t ) ∣ ∣ s t ∣ ∣ 2 β t \theta_t=\frac{z_{UP}(t)-z_{LB}(t)}{||s^t||^2}\beta_t θt​=∣∣st∣∣2zUP​(t)−zLB​(t)​βt​式中 0 ≤ β t ≤ 2 0\le\beta_t\le2 0≤βt​≤2,一般取 β 0 = 2 \beta_0=2 β0​=2。当 z L R ( λ ) z_{LR}(\lambda) zLR​(λ) 上升时, β t \beta_t βt​ 不变,当 z L R ( λ ) z_{LR}(\lambda) zLR​(λ) 在给定的若干步没有变化时,则 β t \beta_t βt​ 减半。 z U P ( t ) z_{UP}(t) zUP​(t) 为原问题最优目标值的一个上界(从而也是对偶问题的上界),可以用一个可行解确定,或者估计得到。 z U P ( t ) z_{UP}(t) zUP​(t) 可随 t t t 的变化而逐步修正。 z L B ( t ) z_{LB}(t) zLB​(t) 是 z L R ( λ t ) z_{LR}(\lambda^t) zLR​(λt) 的一个下界,一般取 z L B ( t ) = z L R ( λ t ) z_{LB}(t)=z_{LR}(\lambda^t) zLB​(t)=zLR​(λt),有时为了计算简单只取一个固定值。
  • 算法停止的条件
    算法停止的条件主要有以下四种。
    第一种是迭代次数不超过 T T T。这是一种最为简单的原则,很容易控制计算的复杂性,但解的质量无法保证。
    第二种是 ∣ ∣ s t ∣ ∣ ≤ ϵ ||s^t||\le\epsilon ∣∣st∣∣≤ϵ( ϵ \epsilon ϵ为一较小的正数),这是对理想状态 s t = 0 s^t=0 st=0 的一种近似。
    第三种是 z U P ( t ) = z L B ( t ) z_{UP}(t)=z_{LB}(t) zUP​(t)=zLB​(t),此时表明已经找到原问题的最优解,有 z = z U P ( t ) = z L B ( t ) z=z_{UP}(t)=z_{LB}(t) z=zUP​(t)=zLB​(t)。
    第四种是 λ t \lambda^t λt 或 z L R ( λ t ) z_{LR}(\lambda^t) zLR​(λt) 在规定的步数内变化不超过一个给定的值,这时可认为目标值不会再变化,因此停止计算。
    具体应用中,可以采用以上停止条件之一,也可以综合运用。

拉格朗日松弛启发式算法

上述提到的内容中有这样一个结论4(红框中应为 z L D z_{LD} zLD​):对比左边的原问题和右边的对偶问题可以发现,求解对偶问题时可行域有所扩大,因此我们在求解对偶问题时得到的较优的解(由次梯度优化算法给出)可能并不是原问题的可行解,此时通常根据问题的特点采用启发式的方法将该解修正为原问题的可行解,整个过程构成了拉格朗日松弛启发式算法。

参考资料


  1. Fisher, M.L. 1981. The Lagrangian Relaxation Method for Solving Integer Programming Problems. Management Science. 27(1) 1-18. ↩︎ ↩︎

  2. 邢文训, 谢金星. 现代优化计算方法(第2版)[M].清华大学出版社, 2005:210-242. ↩︎ ↩︎

  3. 王源. 拉格朗日松弛求解整数规划浅析(附Python代码实例) ↩︎

  4. TransNET. 拉格朗日松弛问题 ↩︎ ↩︎ ↩︎ ↩︎

  5. 想问个问题,为什么拉格朗日乘数法的乘子要大于0? ↩︎

  6. 拉格朗日松弛 PPT ↩︎ ↩︎

拉格朗日松弛(一)——理论及算法相关推荐

  1. 拉格朗日松弛(lagrangian relaxation) - An Overview

    拉格朗日松弛(lagrangian relaxation) - An Overview 文章目录 拉格朗日松弛(lagrangian relaxation) - An Overview 1. Appl ...

  2. 数据科学和机器学习中的优化理论与算法(下)

    数据科学和机器学习中的优化理论与算法(下) 数据科学和机器学习当前越来越热,其中涉及的优化知识颇多.很多人在做机器学习或者数据科学时,对其中和优化相关的数学基础,包括随机梯度下降.ADMM.KKT 条 ...

  3. 拉格朗日松弛求解整数规划浅析(附Python代码实例)

    运筹优化博士,只做原创博文.更多关于运筹学,优化理论,数据科学领域的内容,欢迎关注我的知乎账号:https://www.zhihu.com/people/wen-yu-zhi-37 拉格朗日松弛是一种 ...

  4. 拉格朗日松弛与拉格朗日分解 lagrangian relaxation

    首先介绍下拉格朗日松弛的出发点,以及该方法所属的门类:再介绍下拉格朗日松弛法需要处理的难点和注意事项. 目录 1.拉格朗日松弛出发点 2.拉格朗日松弛所属分类 3.拉格朗日松弛 3.1 拉格朗日松弛( ...

  5. 拉格朗日松弛求解问题

    1.概述 直观上拉格朗日松弛方法就是将约束中难解的部分变为目标函数中的一部分,扩大搜索的范围. 拉格朗日松弛方法不仅能够求解非线性规划问题还能求解整数规划问题. 整数规划问题求解方法 benders ...

  6. 数据科学和机器学习中的优化理论与算法(上)

    数据科学和机器学习中的优化理论与算法(上) 数据科学和机器学习当前越来越热,其中涉及的优化知识颇多.很多人在做机器学习或者数据科学时,对其中和优化相关的数学基础,包括随机梯度下降.ADMM.KKT 条 ...

  7. 【音频技术实践】声源分离理论与算法

    [音频技术实践]系列 语音信号去混响(dereverberation)最新研究总结 语音去混响算法之WPE( Weighted Prediction Error for speech dereverb ...

  8. 数据挖掘-理论与算法 公开课笔记

    数据挖掘-理论与算法 公开课笔记 制作:纪元 本提纲遵循CC-BY-NC-SA协议 (署名-非商业性-相同方式共享) 最近更新时间:2020年3月4日01:48:00 文章目录 10.2.1.1 Da ...

  9. 陈宝林《最优化理论与算法》超详细学习笔记 (四)————第四章 对偶理论

    陈宝林<最优化理论与算法>超详细学习笔记 (四)----第四章 对偶理论 1. 对偶问题的提出 2. 线性规划的对偶理论 2.1 原问题与对偶问题的关系 2.2 对偶问题的基本性质 3. ...

最新文章

  1. html文件显示不了box,Workbox.js registerNavigationRoute找不到/加载html文件
  2. Java天使之恋攻略,跑跑卡丁车手游天使之恋怎么得 天使之恋获取攻略[多图]
  3. VS2010与.NET4系列 20.VS2010的JavaScript智能感知增强
  4. cocos creator 获取当前时间_前端开发者入门 Creator 必读吧
  5. build FLTK 1.1.7 with gcc 2.95.3 on Fedora7
  6. [mmu/cache]-MMU的地址翻译(Address translation)指令介绍
  7. jasmine.spy对象的and.returnValue方法单步调试
  8. 1-1docker加速器
  9. MyBatis——13用mybatis实现银行转账
  10. 转载:camera - 滤镜格式 (原生RGGB、RCCB、RCCC、RGB-IR和Monochrome(单色传感器))
  11. OpenCV下载/OpenCV国内镜像/opencv_contrib下载
  12. OpenCV_tutorials 04 imgproc module - Affine Transformations
  13. 关于页眉的奇偶页不同设置和奇数页页眉展示每一章名称的设置方法
  14. SCI论文 Introduction 部分没有思路,快来看看这个写作模板
  15. 红帽子Linux7安装Oracle,RedHat Enterprise Linux7.0安装Oracle 12C
  16. 金昌搜索引擎优化网络推广_金昌网站推广,金昌网站推广平台,金昌企业网站推广-奇秀云AI智能推广系统-奇秀网...
  17. 再说《提督的决断4》
  18. Vue 引入高德地图 vue-amap
  19. STM32F407作主机读写U盘(stm32_f105-07_f2_f4_usb-host-device_lib_V2.2.1及FatFs的R0.13C移植)
  20. 变形金刚ol服务器维护,变形金刚ol玩不了怎么办 变形金刚ol进不去解决方法

热门文章

  1. CC2640R2F学习笔记(二.gpiointerrupt例程解析)
  2. 微信公众平台服务号如何申请
  3. GAMIT 分步进行基线解算流程
  4. 测试Rockey4Smart加密锁之模块字和三算法的用法C#代码
  5. 關於電腦鍵盤的基礎知識
  6. 绘声绘影X9 - 基础操作(2)
  7. 前端工程师都有用哪些比较靠谱的小工具?(转)
  8. 数据解析之xpath解析
  9. MongoDB知识点整理
  10. 微信公众号(一)每日推送详细教程(含实时定位,天气预报,每日英语,纪念日等,可快速自定义消息模板并指定订阅者类型发送)