对于一个含有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)方法的逻辑相关推荐

  1. 分支定界---branch and bound

    分支定界-branch and bound 定义 分支定界算法始终围绕着一颗搜索树进行的,我们将原问题看作搜索树的根节点,从这里出发,分支的含义就是将大的问题分割成小的问题.大问题可以看成是搜索树的父 ...

  2. 分支定界方法(branch and cut,branch and price的基础)

    目录 1.基础版的分支定界算法(假设是min问题) 2.分支定界算法的步骤及其注意事项 2.1 具体的分支定界方法的步骤: 2.2 迭代过程,也就是分支定界方法的核心操作: 2.3 分支策略: 2.4 ...

  3. branch and bound(分支定界)算法

    最近在看cartographer算法,其中的闭环优化使用到了branch and bound(分支定界)算法,这里简单记录一下: 分支定界算法是一种求解离散最优化问题的计算分析方法.它是由R.J.达金 ...

  4. tsp 分支界限 java_干货 | 10分钟教你用branch and bound(分支定界)算法求解TSP旅行商问题...

    在此之前,先给大家讲讲最重要的一个点,搜索树的节点定义,节点定义了原问题的solution和子问题的solution.Node节点定义如下: public class Node {private Ar ...

  5. matlab分支定界法linprog_序列比对(二十二)——中间字符串分支定界方法中更紧的界...

    原创: hxj7 前文介绍了中间字符串的算法和代码,但是使用分支定界策略时所使用的界限是很宽松的.本文给出了一个更紧的界限. 对分支定界法的简单回顾 前文<序列比对(21)中间字符串问题的算法及 ...

  6. branch and bound(分支定界)算法-基础概念

    网址1:干货 | 10分钟带你全面掌握branch and bound(分支定界)算法-概念篇 网址2:运筹优化学习10:分支定界算法求解整数规划问题及其Matlab实现

  7. branch and bound(分支定界)算法求解TSP旅行商问题

    转载自:分枝定界算法求解TSP 整个程序如下所示: 其中各个模块说明如下: - Timer:计时用. - TSPInstanceReader:TSPLIB标准算例读取用. - PriorityQueu ...

  8. 分支定界法 python_分支定界(Branchbound)算法

    背包问题,一般可以用动态规划解决.当涉及到的物体数目比较多,填表法所需要的存储空间很大$O(nW)$,每次都以内存不足告终. 参考: https://www.geeksforgeeks.org/imp ...

  9. 分支定界算法理解(摘抄)

    解释一 分支定界算法(Branch and bound,简称为 BB.B&B, or BnB)始终围绕着一颗搜索树进行的. 我们将原问题看作搜索树的根节点.从这里出发,分支的含义就是将大的问题 ...

最新文章

  1. 把女友升级为老婆的时候发生的BUG
  2. 逻辑回归的向量化实现样例
  3. 格式化输出,运算符,编码,字符串(索引,切片,大小写转换等等)
  4. android 视频监控相关(打包下载)
  5. STL set和multiset
  6. Docker安装Mysql(docker-compose.yml)
  7. 该错误是如何发生的? Git一分为二进行营救!
  8. CmemDC类 的使用方法
  9. 服务器显示阵列卡升级,dell r730服务器更换阵列卡后报错,弹出黑框
  10. mini_sniffer抓包 音乐免费下载 网盘提速下载
  11. 10款最佳项目管理工具推荐
  12. 华为手机安装debug的apk时出现无效安装和与操作系统不兼容问题解决
  13. 解释什么是啸叫,为什么会发生啸叫,啸叫的为何和如何防止啸叫
  14. 未来已来:数字化时代的商业模式创新-读书笔记
  15. 人工智能产品经理知识体系和学习计划
  16. 【微信小程序】一文带你吃透开发中的常用组件
  17. xmind打开文件报错
  18. python用角度计算余弦值_Python 使用sklearn计算余弦相似度
  19. VS Code 引入pthread.h头文件
  20. emule不能连接服务器解决办法

热门文章

  1. Python命令行解析:IDE内点击Run运行代码直接得出结果、基于TF flags(或argparse、sys.argv)在Dos内命令行(一条命令)调用代码文件得出结果
  2. 快速认识网络爬虫与Scrapy网络爬虫框架
  3. JVM——虚拟机的简介【摘录】
  4. Codeforces Round #433(Div. 2) D. Jury Meeting(贪心)
  5. CDOJ 1070 秋实大哥打游戏 带权并查集
  6. hive中,向map类型插入数据时,需要str_to_map一下
  7. 细学PHP 08 数组-2
  8. 微软一站式示例代码库 7月新代码示例发布
  9. Windows Mobile 6.5.3 Developer Tool Kit
  10. V4L2框架分析学习