分支定界—branch and bound

定义

分支定界算法始终围绕着一颗搜索树进行的,我们将原问题看作搜索树的根节点,从这里出发,分支的含义就是将大的问题分割成小的问题。大问题可以看成是搜索树的父节点,那么从大问题分割出来的小问题就是父节点的子节点了。分支的过程就是不断给树增加子节点的过程。而定界就是在分支的过程中检查子问题的上下界,如果子问题不能产生一比当前最优解还要优的解,那么砍掉这一支。直到所有子问题都不能产生一个更优的解时,算法结束。

由此可见,其实分支定界有一股很大的枚举意味在里面,只不过加上了定界的过程以后,变成了一种非常有规律的枚举。

原理解析



通过线性松弛求得两个子问题的upper bound为Z_LP1 = 12.75,Z_LP2 = 12.2。由于Z_LP1 和Z_LP2都大于BestV=-INF,说明这两支有搞头。继续往下。
通过线性松弛求得两个子问题的upper bound为Z_LP1 = 12.75,Z_LP2 = 12.2。由于Z_LP1 和Z_LP2都大于BestV=-INF,说明这两支有搞头。继续往下。

子问题3已经不可行,无需再理。子问题4通过线性松弛得到最优解为10,刚好也符合原问题0的所有约束,在该支找到一个可行解,更新BestV = 10。

子问题5通过线性松弛得到upper bound为11.87>当前的BestV = 10,因此子问题5还有戏,待下一次分支。而子问题6得到upper bound为9<当前的BestV = 10,那么从该支下去找到的解也不会变得更好,所以剪掉!

子问题7不可行,无需再理。子问题8得到一个满足原问题0所有约束的解,但是目标值为4<当前的BestV=10,所以不更新BestV,同时该支下去也不能得到更好的解了。
分支定界法(branch and bound)是一种求解整数规划问题的最常用算法。这种方法不但可以求解纯整数规划,还可以求解混合整数规划问题。上面用了求解整数规划的例子,这虽然有助于我们更好理解这个算法,但是针对整数规划这一特定问题的过程描述,有可能会对我们的思维带来局限性。而不能更好的理解该算法的精髓。下面是一个更通用的算法框架,以便大家能更好的了解分支定界算法的真正精髓所在。

1. Using a heuristic, find a solution xh to the optimization problem. Store its value, B = f(x_h). (If no heuristic is available, set B to infinity.) B will denote the best solution found so far, and will be used as an upper bound on candidate solutions.2. Initialize a queue to hold a partial solution with none of the variables of the problem assigned.3. Loop until the queue is empty:3.1. Take a node N off the queue.3.2. If N represents a single candidate solution x and f(x) < B, then x is the best solution so far. Record it and set B ← f(x).3.3. Else, branch on N to produce new nodes Ni. For each of these:3.3.1. If bound(N_i) > B, do nothing; since the lower bound on this node is greater than the upper bound of the problem, it will never lead to the optimal solution, and can be discarded.3.3.2. Else, store Ni on the queue.

Breadth-first search (BFS):广度优先搜索,就是横向搜索,先搜索同层的节点。再一层一层往下。这种搜索可以用FIFO queue实现。

Depth-first search (DFS):深度优先搜索,就是纵向搜索,先一个分支走到底,再跳到另一个分支走到底。这种搜索可以用LIFO queue也就是栈实现。

Best-First Search:最佳优先搜索,最佳优先搜索算法是一种启发式搜索算法(Heuristic Algorithm),其基于广度优先搜索算法,不同点是其依赖于估价函数对将要遍历的节点进行估价,选择代价小的节点进行遍历,直到找到目标点为止。这种搜索可以用优先队列priority queue来实现。

转载自:https://www.cnblogs.com/dengfaheng/p/11225612.html

分支定界---branch and bound相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 分支定界算法在中学排课问题中的应用

    分支定界算法在中学排课问题中的应用 摘要:在本文中我们主要研究了带约束有教案的中学排课程表问题.首先我们得到了有关该问题的中学课程表必须满足的几个条件,因为该排课程表问题是一个NP难解的问题,因此该问 ...

  9. 基于Cplex的分支定界

    前言 分支定界算法是求解整数规划的最常用方法之一,它不仅适用于纯整数规划问题,也适用于混合整数规划问题.分支定界的基本思想是将可行区域分解为越来越小的区域,这一过程为分支过程,对于结果劣于当前界的分支 ...

最新文章

  1. Python 是一门动态的、强类型语言
  2. 四种软件架构演进史,会一种就很牛逼了!
  3. python3统一为什么类型_Python3 基本数据类型
  4. 皮一皮:中国好男友?
  5. [LeetCode]202. Happy Number(平衡二叉树 哈希表)
  6. Convolutional Neural Networks for Sentence Classification
  7. 怎么让图片从左往右移动php,javascript - 想让图片上那个块,在增加块的宽度的时候向右边移动,而不是向左边移动。需要怎么解决?...
  8. 推荐 | Transformer最新成果!Learn to Dance with AIST++: Music Conditioned 3D Dance Generation!
  9. (96)FPGA PLL与MMCM区别?
  10. python搭配什么数据库_教你如何优雅地用Python连接MySQL数据库
  11. Python Flask Web 第七课 —— 使用 flask-moment 本地化日期和时间
  12. Nacos 学习笔记:安装运行初体验
  13. Markdown文件中图片自动转云图片和自动生成标题序号
  14. IPCam网络摄像头
  15. python解决百钱百鸡问题
  16. Linux创建文件的几种方式
  17. app小程序手机端Python爬虫实战07UiSelector通过resourceId、层级定位方式
  18. 黑马训练营-毕业设计项目(超全)
  19. linux0.11-文件系统
  20. No.42-VulnHub-Moria: 1.1-Walkthrough渗透学习

热门文章

  1. ssm校内超市管理系统 本系统分为管理员与普通用户两种角色
  2. 高防服务器的防御措施有哪些?
  3. opencv里关于开启摄像头的一点心得
  4. Python pandas 中loc函数的意思及用法,及跟iloc的区别
  5. 「三代组装」Pacbio组装后如何用自身数据进行polish(更新版)
  6. Compose Desktop 初体验之打包
  7. java jmap_java性能监控工具:jmap命令详解
  8. 使用163邮箱的smtp ssl端口发送邮件
  9. Android一键生成包含.dex的Jar及动态加载方案
  10. 与计算机上的SSIS服务连接失败,SSIS在执行过程中服务 SQL Server (MSSQLSERVER) 意外停止...