第8章 分支与限界1. 由部分解估计整体解的界2. 分支与限界法的基本思想3. 分支与限界法示例4. 分支与限界法总结5. 分支与限界法界估算预处理示例6.分支与限界法的双限界示例1. 由部分解估计整体解的界1.1 0/1背包问题解的上界估计1.2 多段图最短路径问题解的下界估计1.3 任务分配问题解的下界估计1.1 0/1背包问题解的上界估计v假设0/1背包问题背包承重为M,有n个物品,其中的物品已按照价/重比由大到小的顺序排列序号集合是{0,1,…,n-1},第i个物品的价/重比是pi/wi目前背包中已经有物品的集合是S1,被抛弃不用的物品集合是S2,待选物品集合是S3 (其中物品的价/重比是所有物品中最小的假定S3中的物品全部加入背包后超重)v此时,如果背包超重,上界估计为0;如果背包刚好放满,上界即为S1中价值总和;如果背包中尚有空间N, S3中的序号为m, m+1, …, n-1则必定存在一个序号k满足m<=k<=n-1,使得v此时,令v则Pe是对整体解的一个上界估计v例如,5个物品要装入载重为37的背包,物品重量和价值分别为(已按价/重比由大到小排列)8,16,21,17,12(重)8,14,16,11,7(价)v现在背包中只有一个元素0,估算解的上界。
vS1={0}, S2={}, S3={1,2,3,4}背包的剩余空间为37-8=29它能装下S3中的物品1和物品2的一部分因此,解的估计为:1.2 多段图最短路径问题解的下界估计0123456789423988874756866573如果当前路径为(0)(2),则这个部分解估计整体解不会小于如下估计值,哪个好?1.3 任务分配问题解的下界估计任务1任务2任务3任务4人员a人员b人员c人员d9278643758187694vn个任务、n个人构成的任务分配问题在没有任何选择的情况下,解的下界是:v当确定了某个任务分配给哪个人后,剩余的问题与原问题等价,下界估计是已选费用加子问题下界任务1任务2任务3任务4人员a人员b人员c人员d9278643758187694这个问题的下界估计是:5+2+1+4 = 12第一个任务分配给第一个人后,得到子问题任务2任务3任务4人员b人员c人员d437818694这个子问题的下界估计是:4+1+4=9部分解对应的原问题下界估计是:9+9=182. 分支与限界法的基本思想v分支与限界法从一个空的解向量开始,逐渐扩展这个解向量,直至扩展至完整的解向量(这与回溯法相同)v分支与限界法在解向量的扩展过程中,遇到不满足约束的情况,把当前解和它的分支全部删除(这也与回溯法相同)v分支与限界法在选择当前解时,并不是按照解向量的固有先后顺序进行,而是对那些最有可能成为最优解的解向量或部分向量扩展v分支与限界法通常以一个最大或最小堆作为数据结构支持3. 分支与限界法示例3.1 分支限界法解决0/1背包问题3.2 分支限界法解决多段图最短路径问题3.3 分支限界法解决任务分配问题3.1 分支限界法解决0/1背包问题v对M容量的背包和n个物品,如果物品i的价/重比是pi/wi,则把物品按照价/重比排序。
排序后各个物品的序号是0, 1, 2, …, n-1v一个完整的解要进行n次扩展才能完成第i次扩展有两个分支:要物品i和不要物品iv当前解如果不满足背包重量约束,则删除它;否则,估计该解的上界,按照估计值插入最大堆如果是对当前部分解扩展,则要把它的所有子女估值插入最大堆,同时删除当前部分解v直至某个解扩展完成,并且它处于最大堆堆顶,则问题结束8,16,21,17,12(重)背包载重378,14,16,11,17(价)包中{}包外{0,1,2,3,4}上界31.9包中{}包外{1,2,3,4}上界30包中{0}包外{1,2,3,4}上界31.93.2 分支限界法解决多段图最短路径问题v假设多段图共有n段,每段上的路径条数的最大值是mv一个完整的解要进行n次扩展才能完成第i次扩展的分支数是当前节点到下一阶段的节点中连线的条数,最多有m个分支v用一个最小堆存放待处理的解,最小堆的关键字是对部分解下界的估计(下确界大于或等于这个关键字)每次取堆顶、删除,并估算它的所有子女,并把它们插入到最小堆中,以便继续对解进行扩展v如果处于最小堆堆顶的解已经扩展完成,则它就是问题的解0123456789423988874756866573路径0下界2+4+5+3=14路径0->1下界4+8+5+3=20路径0->2下界2+7+5+3=17路径0->3下界3+4+5+3=153.3 分支限界法解决任务分配问题v假设n个任务分配给n个人,每个人完成不同任务的耗费由一个矩阵给出v初始时,任何任务都没分配给任何人,一个完整的解要进行n次扩展才能完成。
第i次扩展的分支数是剩余的任务数(等于剩余的人数)v用一个最小堆存放待处理的解,最小堆的关键字是对部分解下界的估计每次取堆顶、删除,并估算它的所有子女,并把它们插入到最小堆中,以便继续对解进行扩展v直至某个解扩展完成,并且它处于最小堆堆顶,则问题结束9278643758187694解的下界:5+2+1+4=12437818694解的下界:9+4+1+4=18278818694解的下界:6+2+1+4=18278437694解的下界:5+2+3+4=14278437818解的下界:7+2+1+7=174. 分支与限界法总结(待续)v分支与限界法与回溯法的求解方式是一致的,都是对部分解进行扩展直至得到最佳的整体解v分支与限界法与回溯法都可以在求解过程中删除不可能的解v但分支限界法能够改变回溯法处理部分解的顺序,使得最可能发展成为最优解的部分解优先处理可以认为回溯法是“世袭制”,分支限界法是“竞争制”v当问题只有约束条件而没有最优目标时,分支限界法退化为回溯法4. 分支与限界法总结(续)v回溯法的空间一般由问题的深度决定,问题同一深度上的空间可以重复利用;而分支限界法需要大量的空间可以用一些因问题而异的方法简化每一个节点的空间大小v分支限界法的时间消耗一般比回溯法少得多,但估计上/下界时,需要花费额外的时间。
可以用预处理的办法减少上/下界估算的时间复杂度v最小问题在估算下界的同时,可以同时估算上界,以便有一个参考,使得高于上界的那些部分解的节点提前删除,减小堆的规模,提高运算效率5. 分支与限界法界估算预处理示例0123456789423988874756866573v下界序列:14,12,8,3v当部分解是0->3时,下界估计是3+4+8=156.分支与限界法的双限界示例0123456789423988874756866573v部分解0->2的上界是0->2->5->8->9对应的值18v而部分解0->1的下界是4+8+5+3=20,它小于部分解0->2的上界,可以通过估算不插入堆中。