最近在阅读文献时,注意到一种求解混合整数规划问题(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):

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

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

主问题(2):

子问题(3):

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

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

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

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

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

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

  • 对于最小化问题,约束条件为,假设可行域中存在至少一个极点(可行域不为空),那么最优解为(无界)的条件为:当且仅当存在某个极射线d使得

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

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

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

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

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

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

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

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

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

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

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

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

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

2、给定一个初始的,初始上界(UB)为,初始下界(LB)为

3、求解问题(4):如果问题(4)无界,说明如果不对极射线( 该取值下对应的问题(4)的极射线)进行如6(a)的约束,那么原问题无法求得最优解,因此需要加入约束进入松弛主问题;如果问题(4)求得最优解,得到对应的极点,为了保证最优性应加入(6b)约束。由于问题(4)是在指定的条件下求解的,其值可能不是最优的,因此更新上界

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

5、将更新后的作为下一次迭代的值,重复步骤2、3,直到满足判断条件,其中为设定的允许误差。

具体伪代码如下图:

一些学习感想

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.

Benders Decomposition初认识相关推荐

  1. 运筹学读书笔记---Benders Decomposition

    1.前言 最近在读这本厚厚的运筹学书籍,发现这本书写的真的好.大规模优化方法系列,有个叫benders分解的算法,之前只是听过名字,不懂具体原理.仔细啃了一下,还是很有意思的. 2.分解策略 如果y值 ...

  2. 混合整数规划问题:Benders 解耦法

    一. 算法背景 Benders分解算法是 J.F.Benders 在1962年首先提出的,旨在解决某些大规模优化问题,其核心思想是将问题划分为多个较小的子优化问题,以取代传统优化方法中同时考虑所有决策 ...

  3. 割平面法只能求解纯整数规划吗_离散规划 解法

    有限离散规划 可列离散规划 枚举法 Hahaha 图搜索枚举 2color 树搜索枚举 深度优先 广度优先 最大最小 蒙特卡洛 分支定界 剪枝 (混合)整数线性规划 MILP 三维整数规划 MILP ...

  4. ECCV 2018 完整论文集 -- List 下载链接

    下文列表为ECCV2018官网得到了今年接收论文列表,共779篇: 下文为ECCV2018的全部接收论文汇总 Oral: Convolutional Networks with Adaptive Co ...

  5. Uncertainty Modeling and Optimization-不确定性建模与优化-理论篇(高速更新中)

    Uncertainty Modeling and Optimization-不确定性建模与优化 目录 Uncertainty Modeling and Optimization-不确定性建模与优化 0 ...

  6. 如何成为一名合格的运筹优化算法工程师?

    作为算法工程师里的一小撮,相比机器学习.人工智能.视觉等算法工程师,运筹优化算法工程师在国内算是又小众又新鲜.作为近几年才慢慢进入大众视野的岗位,人们对其的认知和了解相对其他AI领域,还是较少的.比如 ...

  7. 拉格朗日松弛求解问题

    1.概述 直观上拉格朗日松弛方法就是将约束中难解的部分变为目标函数中的一部分,扩大搜索的范围. 拉格朗日松弛方法不仅能够求解非线性规划问题还能求解整数规划问题. 整数规划问题求解方法 benders ...

  8. INFORMS 及 EJOR 系列主编汇总

    INFORMS 及 EJOR 系列主编汇总 INFORMS Informs是The Institute for Operations Research and the Management Scien ...

  9. 拉格朗日松弛求解整数规划浅析(附Python代码实例)

    运筹优化博士,只做原创博文.更多关于运筹学,优化理论,数据科学领域的内容,欢迎关注我的知乎账号:https://www.zhihu.com/people/wen-yu-zhi-37 拉格朗日松弛是一种 ...

最新文章

  1. java制作画布_java – 使用自定义方法绘制到画布?
  2. DSP的GEL文件介绍
  3. threejs 纹理流动_Threejs多重纹理与过程纹理实现
  4. 微信小程序 下拉刷新页面时的加载状态
  5. WebRTC 2021 流行趋势大赏
  6. linux彻底卸载multipath,深度分析LINUX环境下如何配置multipath
  7. 想学C语言?这些你一定要知道
  8. log4j mysql_log4j写入mysql数据库 | 学步园
  9. SilverLight学习
  10. 【C++】常用排序算法
  11. springboot-admin对springboot项目监控
  12. 语音数据集下载地址汇总| 免费的汉语说话人识别语料库 | Common Voice 数据集 | 下载总结
  13. Android 圆形进度条
  14. wine装通达信_通过wine使用通达信、钱龙、同花顺、大智慧软件 | 学步园
  15. mysql 根据英文首字母来查询汉字
  16. 诗词人生220116
  17. Intel核显--OpenCL环境--Linux
  18. 什么是webshell 常见的webshell工具有哪些
  19. 当提示“当前帐户被锁定,可能无法登录”时,如何解锁帐户?
  20. kali nethunter 开启远程桌面

热门文章

  1. 患上散光后,应当如何治疗?
  2. 如何躲过网络尖兵的侦测
  3. 郑大招收计算机博士吗,河南拥有博士招生权力的高校,都招收哪些专业的博士...
  4. 索尼推新款Walkman 同iPod再爭高下
  5. 2018洛谷8月月赛第一题_U28036 Nagisa loves Tomoya
  6. python录制鼠标动作_python之模拟鼠标键盘动作具体实现
  7. WPS2013开发工具中的VBA为灰色不可用状态的解决方法
  8. 史蒂夫·乔布斯逝世 盘点生平经历
  9. java 使用Guava的RateLimiter做接口限流+redis的lua脚本做IP防刷
  10. 西门子plc怎么转到c语言,西门子PLC梯形图和指令表相互转换