分支定界法上下界_分支定界(Branch-and-Cut)方法的逻辑
对于一个含有m个变量的模型,如果每个变量是连续变量,每个变量的范围无论是[-5,100]、[5,500]、[0,1]......,都可以作为LP问题在多项式时间内求解。
现在增加一个条件,模型中有n个变量是{0,1}变量。如果将变量松弛为[0,1]之间的连续变量,作为LP问题求解,这n个变量的取值可能是介于[0,1]区间的任何数,而无法保证是{0,1}。
分支定界是在这个背景下运用的。
我们以0-1整数规划举例:
首先,我们将0-1整数规划模型松弛为LP模型求最优解,对于最小化问题,该LRP的最优解是原问题最优解的下界,i.e. 原问题的最优解一定不小于LRP的最优解。
其次,我们令这n个变量在满足{0,1}约束的前提下求出一个可行解,该解可能不是最优解,一定是最优解的上界,i.e. 原问题的最优解一定不大于该可行解。
建树:
如果模型中有n个{0,1}变量,我们就画一个有
n=4:
我们把LRP解得的x1的值(假如x1=0.7)作为根节点:
分支:
因为x1的取值是0或1,因此分支:
定界:
计算x1=0,其他变量松弛情况下,模型的最优解y1。
计算x1=1,其他变量松弛情况下,模型的最优解y2。
情形1:如果y1或y2大于当前的上界,则该支及其以下的分支没必要search下去,称为cut。
情形2:如果y1或y2小于当前的上界,则该支的下界被更新为y1或y2,称为定界。
情形3:如果求得y1或y2时,这n个变量正好满足{0,1}约束,则终止运算,因为满足约束的松弛模型最优解一定是原模型的最优解。
对于情形1和2,我们还需要把运算进行下去。
分支:
因为x2的值也是在[0,1]区间上,我们将x2分支:
Note:x1=0或x1=1那个分支可能在上述情形1中被cut了。
定界:
分别计算x2=0、x2=1情况下,除x1、x2之外的其他变量松弛的最优解。
情形1:当前松弛最优解大于当前的上界(当前最优可行解),则该支及其以下的分支没必要search下去,称为cut。
情形2:当前松弛最优解小于当前的上界(当前最优可行解),则下界被更新为当前松弛最优解,称为定界。
情形3:对于当前松弛最优解,这n个变量正好满足{0,1}约束,则终止运算,因为满足约束的松弛模型最优解一定是原模型的最优解。
对于情形1和2,我们还需要把运算进行下去。
分支:
因为x3的值也是在[0,1]区间上,我们将x3分支:
Note:x2=0或x2=1的分支可能在上述情形1中被cut了。
定界:
与上同理。
分支:
因为x4的值也是在[0,1]区间上,我们将x4分支:
Note:x3=0或x3=1的某些分支可能在上述情形1中被cut了。
定界:
与上同理。
算法复杂度:
完整二叉树的节点是指数增长的,to be exact,每增加1个{0,1}变量,最小分支(叶子节点)的个数需要乘以2。例如n=10,最小分支的个数为1024;n=15,最小分支的个数为32768;n=20,最小分支的个数为1048576。这就是指数爆炸!
如此复杂度的运算,那什么时候中止呢:
(1)获得最优解,如上情形3。
(2)上下界之间的gap小于预设的MIPGap参数值。
(3)完成了预设的运算时间。
(4)强制中止(Ctrl+C,输入m.optimize()会从中止处继续运行)
Note:“建树”是根据定界逐步完成的,不是事先将完整的二叉树建好,只会建满足定界要求的“支”,显然,最终建好的树不是一个完整的二叉树。
分支定界法上下界_分支定界(Branch-and-Cut)方法的逻辑相关推荐
- 分支定界---branch and bound
分支定界-branch and bound 定义 分支定界算法始终围绕着一颗搜索树进行的,我们将原问题看作搜索树的根节点,从这里出发,分支的含义就是将大的问题分割成小的问题.大问题可以看成是搜索树的父 ...
- 分支定界方法(branch and cut,branch and price的基础)
目录 1.基础版的分支定界算法(假设是min问题) 2.分支定界算法的步骤及其注意事项 2.1 具体的分支定界方法的步骤: 2.2 迭代过程,也就是分支定界方法的核心操作: 2.3 分支策略: 2.4 ...
- branch and bound(分支定界)算法
最近在看cartographer算法,其中的闭环优化使用到了branch and bound(分支定界)算法,这里简单记录一下: 分支定界算法是一种求解离散最优化问题的计算分析方法.它是由R.J.达金 ...
- tsp 分支界限 java_干货 | 10分钟教你用branch and bound(分支定界)算法求解TSP旅行商问题...
在此之前,先给大家讲讲最重要的一个点,搜索树的节点定义,节点定义了原问题的solution和子问题的solution.Node节点定义如下: public class Node {private Ar ...
- matlab分支定界法linprog_序列比对(二十二)——中间字符串分支定界方法中更紧的界...
原创: hxj7 前文介绍了中间字符串的算法和代码,但是使用分支定界策略时所使用的界限是很宽松的.本文给出了一个更紧的界限. 对分支定界法的简单回顾 前文<序列比对(21)中间字符串问题的算法及 ...
- branch and bound(分支定界)算法-基础概念
网址1:干货 | 10分钟带你全面掌握branch and bound(分支定界)算法-概念篇 网址2:运筹优化学习10:分支定界算法求解整数规划问题及其Matlab实现
- branch and bound(分支定界)算法求解TSP旅行商问题
转载自:分枝定界算法求解TSP 整个程序如下所示: 其中各个模块说明如下: - Timer:计时用. - TSPInstanceReader:TSPLIB标准算例读取用. - PriorityQueu ...
- 分支定界法 python_分支定界(Branchbound)算法
背包问题,一般可以用动态规划解决.当涉及到的物体数目比较多,填表法所需要的存储空间很大$O(nW)$,每次都以内存不足告终. 参考: https://www.geeksforgeeks.org/imp ...
- 分支定界算法理解(摘抄)
解释一 分支定界算法(Branch and bound,简称为 BB.B&B, or BnB)始终围绕着一颗搜索树进行的. 我们将原问题看作搜索树的根节点.从这里出发,分支的含义就是将大的问题 ...
最新文章
- 把女友升级为老婆的时候发生的BUG
- 逻辑回归的向量化实现样例
- 格式化输出,运算符,编码,字符串(索引,切片,大小写转换等等)
- android 视频监控相关(打包下载)
- STL set和multiset
- Docker安装Mysql(docker-compose.yml)
- 该错误是如何发生的? Git一分为二进行营救!
- CmemDC类 的使用方法
- 服务器显示阵列卡升级,dell r730服务器更换阵列卡后报错,弹出黑框
- mini_sniffer抓包 音乐免费下载 网盘提速下载
- 10款最佳项目管理工具推荐
- 华为手机安装debug的apk时出现无效安装和与操作系统不兼容问题解决
- 解释什么是啸叫,为什么会发生啸叫,啸叫的为何和如何防止啸叫
- 未来已来:数字化时代的商业模式创新-读书笔记
- 人工智能产品经理知识体系和学习计划
- 【微信小程序】一文带你吃透开发中的常用组件
- xmind打开文件报错
- python用角度计算余弦值_Python 使用sklearn计算余弦相似度
- VS Code 引入pthread.h头文件
- emule不能连接服务器解决办法
热门文章
- Python命令行解析:IDE内点击Run运行代码直接得出结果、基于TF flags(或argparse、sys.argv)在Dos内命令行(一条命令)调用代码文件得出结果
- 快速认识网络爬虫与Scrapy网络爬虫框架
- JVM——虚拟机的简介【摘录】
- Codeforces Round #433(Div. 2) D. Jury Meeting(贪心)
- CDOJ 1070 秋实大哥打游戏 带权并查集
- hive中,向map类型插入数据时,需要str_to_map一下
- 细学PHP 08 数组-2
- 微软一站式示例代码库 7月新代码示例发布
- Windows Mobile 6.5.3 Developer Tool Kit
- V4L2框架分析学习