逻辑benders分解

目录

1.可行割

(1)组合benders割(本质是cover cut 覆盖割)

(2)最小可行割(minimal infeasible set,MIS) 

2.最优割

(1)常规最优割

(2)analytical benders cut——需要严格的数学证明

注:

LBBD的两种实现方式:

branch and check步骤:


前文综述:

benders分解算法 逻辑思路整理(加星)-CSDN博客

以下默认为min问题。

benders分解是指把问题分解为主问题和子问题。主问题松弛后得到的信息输入到子问题中,求解子问题后生成一些割加入到主问题中去。加入的割可以提升主问题的下界(主问题提供的解),继续反馈给子问题后,降低了上界(子问题提供的解),直到上下界相等,求解完成。

经典的benders分解,指的是子问题是线性规划问题;

基于整数的benders分解,指的是子问题是整数规划;

而基于逻辑的benders分解,指的是子问题返给主问题的割是根据逻辑得到的割。

对于调度问题,通常有以下几种。

1.可行割

类似背包约束。假设问题的上界是13。子问题得到的解为15,此时返回可行割。

(1)组合benders割(本质是cover cut 覆盖割)

即当前的解不合理,需要从当前被分配的工件集中去除至少1个工件。下图中M2机器至少得去除一个工件,\sum_{j\in R_{k}}^{}v_{jk}\leqslant \left | R_{k} \right |-1=4-1=3

将该cut加入到主问题中,告诉主问题下次必须得从R_{k}=\left \{ 1,3,5,6\right \}中去除至少1个工件,使得新工件集合数量\sum_{j\in R_{k}}^{}v_{jk}最多为3个。即下次主问题中必须有一个v_{jk}取值会有变化,从1变为0,即从原本的分配中被移除。

但是该cut效果有限,原因是,只能保证删除1个。删除1个后就失效了。需要我们继续添加割,此时迭代步骤会变多。

因此我们想要得到更好的可行割,更强的割,希望割去更多的工件,减少了迭代反复的次数,加速算法的收敛,求解效率会提高。

(2)最小可行割(minimal infeasible set,MIS) 

最小可行割就是为了解决上述问题而产生的。它计算了每个批次最多保存的工件的个数。

首先介绍最小子集:

即当前的≥上界,但再继续删除就<上界了,寻找这样的一个边界集合S_{k}

需要从R_{k}中依次移除工件,只要解≥上界,就依次移除,即v_{jk}=1变为v_{jk}=0。继续移除,直到移除后子问题的解(上界)<上界了,就得到最终的最小可行割S_{k},如V2所示。

2.最优割

主问题因为松弛掉部分约束,得到的是下界,是基于部分信息得到的决策。我们希望子问题得到一些割进而能提升主问题的下界。

(1)常规最优割

普适性比较强:

若下一次主问题求解时:

a)分配给机器k的工件仍为相同的一组工件v_{jk}=1,即\sum_{j\in R_{k}}^{}v_{jk}=\left | R_{k} \right |,此时有C_{max}=C_{max}^{\ast }\left ( R_{k} \right )

告诉主问题,假如下次你仍然分配这些工件给机器k,则最大完工时间如(V5)所示。

b)分配的解有变化,假如某工件从机器k上被移除,则右边为0或负数,此时V5是无效的。

总之该式给与了一个下界。

由于上述割在被移除的时候,不等式右边直接缩减为0,因此需要考虑增强技术。常用的是分析bender割。

(2)analytical benders cut——需要严格的数学证明

以带有设置时间的UPM问题为例,通常\Delta _{j}=p_{kj}+max_{i\in R_{k}, i\neq j}\left \{ s_{kij} \right \}

分析如下:假如将工件j移除,则v_{jk}=0。则最多减少了加工时间p_{kj}以及可能的最大设置时间s_{kij}\left ( i\neq j \right )。这是最多可能减少的部分,因此为主问题提供了一个更紧的下界。

注:

LBBD的两种实现方式:

branch and check步骤:

(1)因为子问题需要多次求解,因此当主问题复杂,子问题简单时,适合用本方法。特别是branch and check法,主问题只需要求解一次。更加的适用。

(2)其它的一些加强技术包括,提升主问题的下界。因为初始主问题包含的信息很少,所以最好加入一些有效不等式,得到一些较好的下界。换句话说,有效不等式加入主问题中很有用。

(3)其它的一些加强的benders cut。

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Benders分解算法是一种常用的优化算法,适用于解决具有大规模决策变量和约束条件的复杂问题。该算法通过将问题分解为主问题和子问题来求解,主要用于解决线性和混合整数优化问题。 Benders分解算法的核心思想是将原问题分解为一个主问题和多个子问题。主问题通常是一个线性规划问题,其中包含决策变量的主要部分,而子问题则是一组约束问题,包含决策变量的次要部分。主问题和子问题通过一组双向约束进行交互,并通过迭代迭代的方式逐步优化解决方案。 在每一次迭代中,主问题首先被求解,得到当前的主问题解,然后将这个解传递给子问题。子问题则在主问题解的基础上进行求解,并计算出子问题对主问题解的改进量,即称为割平面。割平面是一种附加的线性约束条件,用于修正主问题解从而得到更优解。 Benders分解算法的优点是可以将原有的复杂问题分解为更小、更易处理的子问题,对于大规模问题的求解具有高效性和可行性。同时,该算法还可以通过增加割平面的方式提高求解结果的精确度。 Benders分解算法在实际应用中有广泛的应用。例如,在供应链中,可以使用Benders分解算法解决资源配置问题和需求满足问题;在网络规划中,可以使用该算法解决最优路径选择问题;在能源管理中,可以使用该算法解决能源调度和能源优化问题。 总之,Benders分解算法是一种高效、可行的优化算法,适用于解决具有大规模决策变量和约束条件的复杂问题。它通过将问题分解为主问题和子问题,并通过割平面的方式逐步优化解决方案,提供了一种有效的求解方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值