benders分解算法 逻辑思路整理(加星)

Benders分解:理论与应用
Benders分解是一种解决混合整数线性规划问题的方法,通过将问题拆分为松弛主问题和子问题,逐步添加可行割和最优割来逼近最优解。经典Benders分解中,主问题包含整数变量的松弛形式,子问题是线性规划。这一过程涉及行生成和部分枚举策略,降低了问题的维度,简化了解决复杂优化问题的难度。

Benders decomposition

目录

1.benders的分类

2. 经典的benders分解

2.1 经典的benders分解注意点

2.2 benders分解的核心——子问题和对偶子问题的分析


benders分解本质是:
(1)将问题分解为松弛主问题和子问题
(2)子问题不断返回可行割和最优割,然后把这些割添加到松弛主问题中去。

直到子问题提供的上界UB和主问题提供的LB相等,此时得到最优解。(其实此时松弛主问题基本等同于原问题了。)

1.benders的分类

benders目前有三种:
(1)经典的benders分解 Classical Benders 
1960年由benders提出;
主问题是只保留整数变量的松弛主问题,子问题是线性规划问题。


(2)基于整数的benders  Integer-based Benders
1993年由研究VRP的加拿大大佬提出;
子问题不再是线性规划了,因此不能再用对偶线性规划的性质了。
但是仍然可以根据套路(固定公式)添加可行割和最优割。


(3)基于逻辑的benders Logic-based Benders
是最新的,2019年提出的(我不是很确定)?
需要根据问题而定制,不再有固定的公式套用了。

总结一下,前两种是只要符合形式,就可以套用,是通用性框架;而第三种的基于逻辑的benders是定制化方案,不再是通用性框架了。

一般我们经常可以看到的是经典的benders,此处我也结合经典的benders梳理下思路。

2. 经典的benders分解

2.1 经典的benders分解注意点

假设是min问题,y是整数变量,x是实数变量。

再来回顾下benders的主要思路:
(1)将问题分解为master problem松弛主问题(只包含y)和sub problem子问题(只包含x)
(2)主问题给子问题一个的整数解y(此时子问题拿到y以后就变成了一个仅仅包含x的函数),然后子问题返回可行割或最优割,然后把这些割添加到松弛主问题中去。不断循环,直到上下界相等,问题求解结束。

注:

可行割是切除不可行的解;最优割是让解变得更好。

从主要思路里可以看到:

(1)benders是不断添加割的,割就是割平面,也就是不断加约束,也被叫做行生成。利用的原理是,最优解可能不需要全部的约束,可能只需要一部分就可以了。因此我们寻找这些起作用的即可,一个个添加,直到问题求解。

(2)主问题不断给子问题传输整数解y,给了若干次(部分的整数解)就可以求解结束,不必再用枚举的方式枚举所有

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值