上一节我们了解了什么是分支限界法,按照惯例我们要根据例题来总结分支限界法的思想和模式。

简单来说我们学习到分支限界法实际上是对解空间树的广度优先遍历,而其核心可以拆解为分支和限界两个词语,分支代表按照广度展开的可能分支,而限界代表我们所规定的剪枝的上界和下界条件。将可行的结点加入活结点表,不可行的则剪枝,直至我们找到符合输出条件的分支。


让我们回顾一下装载问题,

这是一个子集树问题,还记得我们用回溯法来解决的时候,就是依次遍历全部的解空间并按照限定条件来剪枝。现在我们要用分支限界法来解决,那么对于这个题目来说我们要搞清楚分支,从根节点开始就是c1c2c3,如果选择了c1那么分支就是c2c3,选择c1c2分支就是c3。当然可以不选。限界就是规定总重量不超过c并且要求记录最大的bestw。

(注意MaxLoading不是只执行一次,而是需要遍历整个子集树)

改进了之后增加了一个剪枝条件,对于当前重量Ew+剩余重量r<=bestw的进行剪枝,因为全加上也无法超过bestw,没必要再遍历。


以上代码是队列式的分支限界法,还有一种优先队列式的分支限界法。

找了网上的一张图

简单来说,对于一个货物,我们的选择只有选中或者不选中。想要尽可能装重一点的货物,那么其上界就要尽可能大。在图中所给的例子中我们发现,up=所有选中的货物重量+可供选择的货物重量,它所代表的是最大重量的上界,那么如果我们要寻找最优解,肯定要从上界大的子树里寻找。这个up的值当且仅当我们明确某货物不会被选中,才会减去它的重量,比如第二层发现8+6=14>c1=12。在超重剪枝的情况下我们就会直接走到右子树。而在第三层,虽然左子树上界较大,但是我们发现最终up较大值是在右子树当up=11时,这也是为什么我们不再遍历A到C这条路径,因为A到C这里up也是11,不大于我们记录的bestw=11(bestw仅当为叶子节点才更新),所以剪枝了。


从这两题我们总结一下分支限界法的一般规律:

分支限界法的概念是分支和限界,分支即我们如何选取拓展节点,限界即我们需要限定的上界和下界。判断是否得到了解的条件较多:

比如如果我们的解达到了上界,说明已经是最优了,那么就是我们所求的解。

如果某条分支的上界已经低于总体下界,那么说明已经不在解范围内,我们就需要剪枝。

而优先队列实际上表达的是对界限的动态更新,每层的上界或者下界都是实时更新着的,我们每次所遍历的最优解都可以作为新的上界或下界,这样做的好处是将一部分的路径可以直接剪枝,使得计算量更少。

分支限界法——装载问题相关推荐

  1. 分支限界法 java_算法——分支限界法(装载问题)

    回溯法的求解目标是找出解空间中满足约束条件的所有解,想必之下,分支限界法的求解目标则是找出满足约束条件的一个解,或是满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解. ...

  2. 算法设计与分析——分支限界法——装载问题

    有一批共个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集装箱i的重量为Wi,且装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上这2艘轮船.如果有,找出一种装载方案. 容易证明:如果一个 ...

  3. 分支限界法 java_分支限界法装载问题java

    1.问题描述:已知有N个物品和一个可以容纳M重量的背包,每种物品I的重量为WEIGHT,一个只能全放入或者不放入,求解如何放入物品,可以使背包里的物品的总效益最大. 2.设计思想与分析:对物品的选取与 ...

  4. 算法设计与分析期末总结

    0000前言:基本是为了我自己看的一些我容易忘记的东西,为考试作准备把,主要使后半部分的知识,前半部分请看算法设计与分析阶段考总结 第五章 回溯算法是一种系统地搜索问题的解的方法.某个问题的所有可能解 ...

  5. 分支限界方法装载问题c语言,分支限界法——对解空间的一种策略搜索(广度优先搜索)...

    目录 1.分支限界法简介 1.1 分支限界法的本质--通过限界阻塞子树 1.2 分支限界法与回溯法的区别 1.3 下界或者上界估算--贪心 2.单源最短路径问题 2.1 问题描述 2.2 分支限界法解 ...

  6. 装载问题-分支限界法(队列式分支限界法,优先队列式分支限界法)

    问题描述  有n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且            ∑i=1nwi≤c1+c2\sum^n_{i=1}w_i≤c_1+c_2i=1∑n​ ...

  7. 分支限界法实现最优装载c++_分支限界法

    晓强Deep Learning的读书分享会,先从这里开始,从大学开始.大家好,我是晓强,计算机科学与技术专业研究生在读.我会不定时的更新我的文章,内容可能包括深度学习入门知识,具体包括CV,NLP方向 ...

  8. java分支限界实现装载问题_分支限界法之装载问题

    装载问题(分支限界)Dlg.cpp #include "Queue.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE ...

  9. 装载问题 | 分支限界法(限上界)

    装载问题:有n个集装箱要装上 2 艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且∑wi <= c1 + c2. 问是否有一个合理的装载方案,可将这n个集装箱装上这2艘轮船.如果有, ...

最新文章

  1. 【本站作品】机器学习数学基础专辑
  2. boost::hana::test::TestGroup用法的测试程序
  3. 从实例到数理来解析感知机学习算法(PLA)
  4. python opencv手册_教你用Python实现5毛钱特效(给你的视频来点料)
  5. 【Python自然语言处理】中文分词技术——统计分词
  6. html5 心,HTML5你必须知道的28个新特性
  7. MTK DRM常见问题介绍
  8. 引路蜂地图API:Gis.Raster 包定义
  9. Java:单例模式的七种写法 (转)
  10. javaparser
  11. 最大功率点跟踪MPPT
  12. King Arthur's Knights 【HDU - 4337】【哈密顿回路性质Dirac定理】
  13. 在配置DNS后服务器启动失败问题的排查
  14. Scala+HuffmanCoding实现无损压缩
  15. Win 10 开机出现no bootable device
  16. 加装ssd固态硬盘基本要求
  17. MySQL 8 的学习——4从表中检索信息
  18. 云和恩墨新晋ACED熊军微信大讲堂主题分享
  19. Android 系统下载 DownloadManager
  20. 教你用python做个街拍美图手册

热门文章

  1. 代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串
  2. 选择万德L2接口需要遵循什么原则?
  3. Excel如何快速将多列转为排成一列
  4. c语言追逐游戏,Unity一款快节奏的汽车追逐游戏模板(自动支持多种分辨率和纵横比)...
  5. 浙大MBA提面“良好”资格复试录取率:落榜起于信念的动摇
  6. AzureDevops基本用法
  7. Karaf教程之安装和应用开发
  8. 机器学习如何评估模型结果的好坏
  9. java中forward和redirect_java中转发forward和重定向redirect的区别
  10. YGC和FGC是什么