Benders Decomposition

Benders分解由Jacques F. Benders在1962年提出[1]. 它是一种把线性规划问题分解为小规模子问题的技巧. 通过迭代求解主问题和子问题, 从而逼近原问题的最优解. 适合应用在混合整数规划问题中,将原问题分解成两个只包含连续变量和整数变量的子问题. 本文介绍的内容基于 Georrion和Graves[2].
(注:本文内容参考另外一篇博客[3])

问题描述

给定如下的一个混合整数规划问题 P ( x , y ) P(x,y) P(x,y)
m i n : c T x + f ( y )             A x + F ( y ) = b x ≥ 0 y ∈ Z min: c^T x+f(y)\\ \ \ \ \ \ \ \ \ \ \ \ Ax+F(y)=b\\ x\geq 0\\ y\in Z min:cTx+f(y)           Ax+F(y)=bx0yZ
其中 A ∈ R m × n A\in R^{m\times n} ARm×n, c ∈ R n c\in R^n cRn, b ∈ R m b\in R^m bRm. f ( y ) f(y) f(y) F ( y ) F(y) F(y)可以是线性的,也可以是非线性的,另外 y y y也可以是连续的.
Benders Decomposition的基本思想是固定 y y y,那么这个混合整数优化问题就变成了一个连续的线性规划问题. 那么如何确定这个固定的 y y y的值,就是Benders Decomposition算法的细节了.

Benders分解

等价形式
先将原问题 P ( x , y ) P(x,y) P(x,y)写成如下形式:
m i n y { f ( y ) + m i n x { c T x ∣ A x = b − F ( y ) , x ≥ 0 } } \underset{y}{min}\{f(y)+\underset{x}{min}\{c^T x|Ax=b-F(y),x\geq 0\}\} ymin{f(y)+xmin{cTxAx=bF(y),x0}}
将其中的这个子优化问题设为 P ( x ∣ y ) P(x|y) P(xy):
P ( x ∣ y ) : m i n x { c T x ∣ A x = b − F ( y ) , x ≥ 0 } P(x|y): \underset{x}{min}\{c^T x|Ax=b-F(y),x\geq 0\} P(xy):xmin{cTxAx=bF(y),x0}
这个子问题就是一个标准的线性规划问题,根据对偶性原理,这个子问题的最优解和它的对偶问题的最优解相等,因此,将这个式子变形成它的对偶问题:
D ( u ∣ y ) : m a x u { [ b − F ( y ) ] T u ∣ A T u ≤ c } D(u|y): \underset{u}{max}\{[b-F(y)]^Tu|A^T u\leq c\} D(uy):umax{[bF(y)]TuATuc}
因此 P ( x , y ) P(x,y) P(x,y)进而可以写成:
m i n y { f ( y ) + m a x u { [ b − F ( y ) ] T u ∣ A T u ≤ c } } \underset{y}{min}\{f(y)+\underset{u}{max}\{[b-F(y)]^Tu|A^T u\leq c\}\} ymin{f(y)+umax{[bF(y)]TuATuc}}
写成上述形式的好处是 D ( u ∣ y ) D ( u ∣ y ) D(uy)中的约束与变量 y y y无关. 因此, 其最优解一定是多面体(Polytope) Q = { u ∣ A T u ≤ c } Q=\{u | A^T u\leq c\} Q={uATuc}中的一个顶点. 令 U U U代表多面体 Q Q Q顶点的集合. 因此原问题等价于
m i n y { f ( y ) + m a x u ∈ U { [ b − F ( y ) ] T u } } \underset{y}{min}\{f(y)+\underset{u\in U}{max}\{[b-F(y)]^Tu\}\} ymin{f(y)+uUmax{[bF(y)]Tu}}
继续转化为 P 1 ( x , y ) P_1 (x,y) P1(x,y)
m i n : f ( y ) + z s . t . [ b − F ( y ) ] T u ≤ z ,     u ∈ U min:f(y)+z\\ s.t. [b-F(y)]^Tu\leq z,\ \ \ u\in U min:f(y)+zs.t.[bF(y)]Tuz,   uU

问题分解

对原问题 P ( x , y ) P ( x , y ) P(x,y), 我们先固定 y y y得到 P ( x ∣ y ) P ( x ∣ y ) P(xy), 然后考虑其对偶问题 D ( u ∣ y ) D ( u ∣ y ) D(uy). 通过这种方式我们把原问题转化成等价问题 P 1 ( u , y ) P_1(u,y) P1(u,y) . 在新问题 P 1 ( u , y ) P_1(u,y) P1(u,y)中, 每个约束条件对应一个对偶问题 D ( u ∣ y ) D ( u ∣ y ) D(uy)的基本解, 且目标函数 f ( y ) + z f(y)+z f(y)+z u u u无关. 这样一来, 使得我们可以通过迭代的方式进行求解:
主问题 P 1 ( u , y ) P 1 ( u , y ) P1(u,y)一开始 U = ∅ U=\empty U=, 求解出原问题的下界,将最优解对应的 y y y赋值给对偶问题 D ( u ∣ y ) D ( u ∣ y ) D(uy),求解出对偶问题最优解对应的 u u u,从而添加新的约束到 P 1 ( u , y ) P_1(u,y) P1(u,y) ,继续求解。。。如此迭代,直到逼近最优解.

主问题 M ( y , z ∣ u ) M(y,z|u) M(y,zu)
m i n : f ( y ) + z s . t . [ b − F ( y ) ] T u ≤ z ,     u ∈ U min:f(y)+z\\ s.t. [b-F(y)]^Tu\leq z,\ \ \ u\in U min:f(y)+zs.t.[bF(y)]Tuz,   uU
子问题 S ( u ∣ y ) S(u|y) S(uy)
m i n : [ b − F ( y ) ] T u s . t . A T u ≤ c min:[b-F(y)]^T u\\ s.t. A^T u\leq c min:[bF(y)]Tus.t.ATuc

算法流程

在这里插入图片描述
伪代码:

Init: B = empty; UB = inf; e = -1e-4;
solve master problem M(y, z) by fixing z := 0 and get y;
let LB := f(y) + z;
While UB - LB > e: 
    solve sub problem S(u|y) and get u;
    update UB := min {UB, f(y) + OPT(sub)};
    add constraint [b-F(y)]^T u <= z to the master problem;
    solve master problem M(y, z) and get y;
    update LB := OPT(master);
EndWhile

参考文献

  1. J.F. Benders. Partitioning Procedures for Solving Mixed-Variables Programming Problems. Numerische Mathematik, Vol. 4, 1962.
  2. A.M. Geoffrion and G.W. Graves. Multicommodity distribution system design by benders decomposition. Management Science 20, no. 5, 822–844, 22, 1974.
  3. https://blog.csdn.net/qx3501332/article/details/104978928?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160756995419721942281622%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160756995419721942281622&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-6-104978928.nonecase&utm_term=benders&spm=1018.2118.3001.4449
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值