运筹学基础(七):拉格朗日松弛(Lagrangian relaxation)

基本概念

原问题

考虑如下的整数规划问题:
m i n c T x s . t . D x ≤ d x ∈ X X = { x ∈ Z n ∣ A x ≤ b } \begin{align} min \quad c^Tx \\ s.t. Dx \leq d \tag{1.1}\\ x \in X \tag{1.2}\\ X = \{x\in Z^n|Ax\leq b\} \tag{1.3} \end{align} mincTxs.t.DxdxXX={xZnAxb}(1.1)(1.2)(1.3)
假设约束(1.1)是难处理的约束,约束(1.3)是容易处理的约束。

松弛问题、拉格朗日乘子、对偶函数

为了减小问题求解的难度,我自然希望把难约束(1.1)转化到目标函数上去,因此我们定义乘子 u = ( u 1 , u 2 , . . . , u m ) ∈ R m + u=(u_1, u_2,...,u_m) \in R^+_m u=(u1,u2,...,um)Rm+,然后可得:
z ( u ) = m i n c T x + u T ( D x − d ) s . t . x ∈ X \begin{align} z(u) = min\quad c^Tx+u^T(Dx-d) \tag{1.4} \\ s.t. x\in X \tag{1.5} \end{align} z(u)=mincTx+uT(Dxd)s.t.xX(1.4)(1.5)

我们把上面这个问题称之为松弛问题 u u u称为拉格朗日乘子 z ( u ) z(u) z(u)称为对偶函数

3个注意的地方:

  1. u u u是一个向量,它与被松弛掉的约束的数量是一样的;
  2. 拉格朗日乘子的符号问题:
    • 如果约束是 ≤ \leq ,则拉格朗日乘子要 ≥ 0 \geq 0 0
    • 如果约束是 ≥ \geq ,则拉格朗日乘子要 ≤ 0 \leq 0 0
    • 如果约束是 = = =,则拉格朗日乘子不受约束限制。
  3. 对偶函数的输入是拉格朗日乘子,输出是松弛问题的最优值。

对偶问题

我们最大化对偶函数可以得到对偶问题
m a x u ∈ R + m z ( u ) (1.6) \underset{\text{$u \in R^m_+$}}{max} \quad z(u) \tag{1.6}\\ uR+mmaxz(u)(1.6)

其本质是在松弛问题的基础上,搜索能够使得 z ( u ) z(u) z(u)最大的那个 u u u

三个问题之间的关系

若对偶定义:在原问题( m i n min min)中,对偶问题最优解 ≤ \leq 原问题最优解。 即松弛问题是原问题的一个下界,对偶问题是原问题最大的下界。
在这里插入图片描述

为什么要用拉格朗日松弛法

  1. 拉格朗日松弛后得到的问题的下界要大于等于直接将01整数变量松弛为[0,1]连续变量的下界;

  2. 如果问题具有linked constraints,那么拉格朗日松弛后可以使问题能够被分解,进而可以降低问题的复杂度;linked constraints指的是将多类变量耦合在一起的约束
    在这里插入图片描述

  3. 采用拉格朗日松弛后我们会得到拉格朗日乘子,它反应了对偶的信息,可以做很多事情。还不理解

算法流程

  1. 初始化拉格朗日乘子;
  2. 求解松弛问题;
  3. 采用次梯度法更新拉格朗日乘子,并判断是否满足停止条件,若满足则跳到2求解结束,否则跳到2继续。

在这里插入图片描述

核心问题

松弛哪个约束

一般来说,尽量松弛掉linked constraints。

具体而言,松弛哪个约束需要考虑以下三点:

  1. 拉格朗日松弛后对偶问题的质量的好坏;
  2. 拉格朗日松弛的松弛问题后的子问题求解难易程度;
  3. 拉格朗日松弛对偶问题的求解难易程度。

松弛后分解的子问题的求解

松弛以后的问题分解大概如下图所示:
在这里插入图片描述
在这里插入图片描述

一般来说,我们希望松弛以后的问题最好不要是NP-hard。一般子问题规模较小,可以直接让求解器求解。

拉格朗日乘子怎么定

该问题等同于:怎么求解拉格朗日松弛问题的对偶问题,常用的方法是次梯度算法还没有搞清楚,后面再补)。

参考资料

  1. 拉格朗日松弛求解整数规划浅析
  2. 整数规划的拉格朗日松弛
  3. 《运筹优化常用模型、算法及案例实战——Python+Java实现》
  • 30
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值