Benders Decomposition初认识

最近在阅读文献时,注意到一种求解混合整数规划问题(MIP)的方法——Benders Decomposition,先写下一点初步的学习理解。

为什么要Benders Decomposition?

顾名思义,Benders Decomposition方法将原来的规划问题进行分解,将其分解为主问题(Master Problem)和子问题(Sub Problem,也有文章称之为Primal Problem)。

为什么要分解?因为MIP问题往往包含两种类型的变量:整数变量和连续变量。(看到一种说法,其实Benders Decomposition的框架不止可以解决MIP,其主要解决的问题只需有两种特征:1)两个变量分离;2)一个变量很容易处理,另一个变量比较烦)

在分解的过程中,原问题中的两种变量互相分离开,这样就可以方便处理,从而将原来复杂的、难以求解的MIP问题按照变量类型分解成两个形式上相互独立(因为变量分开了)、可以方便求解的问题。

Jacques F. Benders设计了一个巧妙的途径,来求解具有复杂变量的数学规划问题。所谓的复杂变量是指,当将这些变量固定后,剩下的优化问题(通常称为子问题)变得相对容易。在Benders考虑的一类特殊问题中,先把复杂变量的值固定,从而将问题规约为一个一般的线性规划问题,当然,这个线性规划问题是以复杂变量为参数的。在Benders设计的算法里,利用割平面的方式将主问题(以子问题的解为参变量)的极值和使子问题(线性规划问题)有可行解的参变量值的集合很恰当地表达了出来。过程中,对偶理论用来推导刻画这些表达式特征的自然割平面族,而带有参变量的线性规划问题被用来生成割平面。(运筹学教学|Benders decomposition(一)技术介绍篇 - 云+社区 - 腾讯云

Benders Decomposition的具体实现过程

分解嘛,首先第一步就是要把原问题拆开,考虑一个混合整数线性规划问题(1):

min \textup{ } c^{T}x + d^{T}y

s.t. \textup{ } Ax+By \geqslant b

       \textup{ } \textup{ } \textup{ } x\geqslant 0, \textup{ } y\in Y

其中,x是连续性变量,y是整数变量(所有可能的取值组成了Y集合)

对于MIP来说,整数变量y往往被认为是复杂变量。对于这样一个问题(在约束中x和y是线性的、分离的),有一个简单而直观的思路:如果我们能够把复杂变量y固定下来,那么剩余的问题就变成了一个只和x相关的线性规划问题,可以求出对应y值下最优的x取值。因此我们可以将原问题(1)分解为两个部分:主问题(2)和子问题(3):

主问题(2):

min \textup{ } \textup{ } \textup{ } d^{T} y+ z(y)

s.t. \textup{ } \textup{ } \textup{ } \textup{ } \textup{ } y\in Y

子问题(3):

min \textup{ } \textup{ } \textup{ } \textup{ } c^{T}x

s.t. \textup{ } Ax\geqslant b-By

       x\geqslant 0

其中z(y)表示表示当y固定时,子问题(3)的目标函数最优解取值。

接下来考虑子问题(3)的对偶形式(4):

max \textup{ } \textup{ } u^{T}(b-By)

s.t. \textup{ }\textup{ } A^{T}u\leqslant c

u\geqslant 0

其中u是对偶问题的新变量。

这个对偶的形式是令人兴奋的,因为我们发现无论y的取值为何,(4)的约束条件都是不变的,也即问题(4)的可行域不依赖于y的取值,y只影响目标函数u^{T}(b-By)的取值。这个时候,如果我们给定了y,那么就可以通过求解(4)得到最优的x以及目标函数值,而这个目标函数值就是前面问题(2)中的z(y)

假设问题(4)可行域不为空(如果是空集,那么问题(4)不可行,也意味着对偶问题(3)以及原问题(1)也是不可行的,因此该情况也就没有意义),那么可行域中所有的极点可以表示为(u_{p}^{1},....,u_{p}^{I}),所有的极射线可以表示为(u_{r}^{1},....,u_{r}^{J})。其中IJ分别表示极点和极射线的个数。(关于极点和极射线具体的定义见:最优化及算法笔记1_百冰千岚的博客-CSDN博客

接下来引入一个定理1[1]:

  • 对于最小化问题min \textup{ } c^{T}x,约束条件为Ax\geqslant b,假设可行域中存在至少一个极点(可行域不为空),那么最优解为-\infty(无界)的条件为:当且仅当存在某个极射线d使得c^{T}d< 0

那么,为了让问题(4)存在有界的最优解,对于给定的y\bar{},首先要保证对于所有极射线:

(u_{r}^{j}) ^{T}(b-B\bar{y})\leqslant 0 \textup{ }\textup{ } j=1,...,J

注意,定理给出的是min问题,而对偶问题(4)是max问题,所以符号要反过来。

接下来,假设问题(4)的目标函数最优解为z,那么对于所有极点应满足:

(u_{p}^{i}) ^{T}(b-B\bar{y})\leqslant z \textup{ }\textup{ } i=1,...,I

因此,问题(4)便可以重新写成问题(5):

min \textup{ } z

s.t. \textup{ }(u_{r}^{j}) ^{T}(b-B\bar{y})\leqslant 0 \textup{ }\textup{ } j=1,...,J

 (u_{p}^{i}) ^{T}(b-B\bar{y})\leqslant z \textup{ }\textup{ } i=1,...,I

注意,这里重新写成的问题(5)在目标函数上的最优值和(4)是一样的,但是其变量发生了变化(原先变量是u,现在变成了z)。但这样并不影响原问题的分解形式,因为在分解后的主问题(2)中只关心子问题(3)的目标函数值z(y),因此问题(5)得到的结果仍然可以用于问题(2)。

 将问题(2)和问题(5)写成同一个问题(6):

min\textup{ } d^{T}y+z

s.t. \textup{ }(u_{r}^{j}) ^{T}(b-B\bar{y})\leqslant 0 \textup{ }\textup{ } j=1,...,J \textup{ } \textup{ } \textup{ } (6a)

(u_{p}^{i}) ^{T}(b-B\bar{y})\leqslant z \textup{ }\textup{ } i=1,...,I \textup{ }\textup{ }\textup{ } (6b)

y\in Y

这样,问题(6)和原问题(1)是等价的。

这样看来,我们好像是把原问题分解后,又把他重新组装回原问题等价形式。但以上内容只是方便理解Benders Decomposition而进行的推演过程,实际上在求解时确实是按照分解后的形式来进行的。接下来就是Benders设计的精妙的求解过程了。

我们知道,对于一个现实的问题来说,可行域往往是非常大的,即使我们只关注极点和极射线,但其个数IJ也可能时非常庞大的,简单的穷举法是不能满足现实求解需求的。

注意到,转化后的原问题(1)等价形式问题(6)主要约束是(6a)和(6b),也就是说可行域是由(6a)和(6b)所组成的一个个平面(cut)所共同组成的。其中,形式为(6a)的被称为Benders Feasibility Cuts,因为它根据前面的定理1保证了问题是可行的;形式为(6b)的被称为Benders Optimality Cuts,因为它保证了分解后子问题的目标函数最最优值z

显而易见,如果利用类似于割平面法的思想(Cutting Plane Method),我们在一开始求解的时候松弛原问题的可行域,随后根据一定的方法逐渐加入有效的平面,不断逼近最优解所在可行域范围,最终就能较为快速的得到最优解。

因此,Benders Decomposition的具体算法如下:

1、关注原问题(1)的等价形式问题(6),我们一开始不加入约束(6a)和(6b),该问题形式称作松弛主问题(Relaxed Master Problem)。

2、给定一个初始的y\bar{},初始上界(UB)为\infty,初始下界(LB)为-\infty

3、求解问题(4):如果问题(4)无界,说明如果不对极射线{u_{r}}\bar{}( 该y\bar{}取值下对应的问题(4)的极射线)进行如6(a)的约束,那么原问题无法求得最优解,因此需要加入约束(u_{r}\bar{}) ^{T}(b-B\bar{y})\leqslant 0进入松弛主问题;如果问题(4)求得最优解z=z(y\bar{}),得到对应的极点u_{p}\bar{},为了保证最优性应加入(6b)约束(u_{p}\bar{}) ^{T}(b-B\bar{y})\leqslant z。由于问题(4)是在指定的y\bar{}条件下求解的,其值可能不是最优的,因此更新上界UB = min(UB,d^{T}y\bar{}+(u_{p}\bar{}) ^{T}(b-B\bar{y}))

4、求解加入了约束后的松弛主问题,并得到最优解(y^{*},z^{*})。由于松弛主问题是松弛了约束条件后的结果,所以其最优值可能是非常小的(小于本来的最优值),因此更新下界LB = z^{*},并将y\bar{}的值更新为y\bar{}=y^{*}

5、将更新后的y\bar{}作为下一次迭代的值,重复步骤2、3,直到满足判断条件UB-LB\leqslant \xi,其中\xi为设定的允许误差。

具体伪代码如下图:

 

 一些学习感想

Benders Decomposition的主要思想,是通过将原始问题中不同类型的变量分开,在固定其中的复杂变量(上述问题中的整数变量y)后,求解得到此时的最优目标函数值,由于此时固定了y,所以目标函数可能不是最优的,是一个上界;随后加入某些约束后求解松弛主问题的最优值,由于此时问题是松弛的,其结果应当是可能小于最优值的,所以是一个下界。当上界和下界相等时,得到了最终的最优解。

一个具体的问题和实现可以看:线性规划技巧: Benders Decomposition_胡拉哥-CSDN博客(值得注意的是,这篇文章里的例子是基于“子问题都是可以求解的”这一假设,所以只考虑加入Benders Optimality Cuts)

值得注意的是,尽管sub problem容易求解的线性规划,但松弛主问题依旧是很难求解的整数规划问题,在现实应用中Benders Decomposition的迭次数会很多,导致效率很低。因此,很多文章和研究都在寻求如何加速Benders Decomposition过程。

交通场景中的一些优化问题利用Benders Decomposition还是很常见的,后面希望实现一个demo案例。另外立个flag,希望最近学习一些数理的基础知识,打牢一下基础。

[1] Florian M, Bushell G, Ferland J, et al. The Engine Scheduling Problem In A Railway Network[J]. Infor Information Systems & Operational Research, 1972, 14(2):39-43.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值