资源描述:
《第9章 分支限界法.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第9章分支限界法9.1概述9.2图问题中的分支限界法9.3组合问题中的分支限界法9.4实验项目——电路布线问题9.1概述9.1.1解空间树的动态搜索(2)9.1.2分支限界法的设计思想9.1.3分支限界法的时间性能分支限界法首先确定一个合理的限界函数,并根据限界函数确定目标函数的界[down,up]。然后,按照广度优先策略遍历问题的解空间树,在分支结点上,依次搜索该结点的所有孩子结点,分别估算这些孩子结点的目标函数的可能取值,如果某孩子结点的目标函数可能取得的值超出目标函数的界,则将其丢弃,因为从这个结点生成的解不会比目前已经得到的解更好;否则,将其加入待
2、处理结点表(以下简称表PT)中。依次从表PT中选取使目标函数的值取得极值的结点成为当前扩展结点,重复上述过程,直到找到最优解。9.1.1解空间树的动态搜索(2)随着这个遍历过程的不断深入,表PT中所估算的目标函数的界越来越接近问题的最优解。当搜索到一个叶子结点时,如果该结点的目标函数值是表PT中的极值(对于最小化问题,是极小值;对于最大化问题,是极大值),则该叶子结点对应的解就是问题的最优解;否则,根据这个叶子结点调整目标函数的界(对于最小化问题,调整上界;对于最大化问题,调整下界),依次考察表PT中的结点,将超出目标函数界的结点丢弃,然后从表PT中选取使
3、目标函数取得极值的结点继续进行扩展。例:0/1背包问题。假设有4个物品,其重量分别为(4,7,5,3),价值分别为(40,42,25,12),背包容量W=10。首先,将给定物品按单位重量价值从大到小排序,结果如下:物品重量(w)价值(v)价值/重量(v/w)144010274263525543124应用贪心法求得近似解为(1,0,0,0),获得的价值为40,这可以作为0/1背包问题的下界。如何求得0/1背包问题的一个合理的上界呢?考虑最好情况,背包中装入的全部是第1个物品且可以将背包装满,则可以得到一个非常简单的上界的计算方法:ub=W×(v1/w1)=1
4、0×10=100。于是,得到了目标函数的界[40,100]。限界函数为:×w=0,v=0ub=100w=4,v=40ub=76w=0,v=0ub=60w=11无效解w=4,v=40ub=70w=9,v=65ub=69w=4,v=40ub=64w=12无效解w=9,v=65ub=6523456789×1分支限界法求解0/1背包问题分支限界法求解0/1背包问题,其搜索空间如图9.1所示,具体的搜索过程如下:(1)在根结点1,没有将任何物品装入背包,因此,背包的重量和获得的价值均为0,根据限界函数计算结点1的目标函数值为10×10=100;(2)在结点2,将物品
5、1装入背包,因此,背包的重量为4,获得的价值为40,目标函数值为40+(10-4)×6=76,将结点2加入待处理结点表PT中;在结点3,没有将物品1装入背包,因此,背包的重量和获得的价值仍为0,目标函数值为10×6=60,将结点3加入表PT中;(3)在表PT中选取目标函数值取得极大的结点2优先进行搜索;(4)在结点4,将物品2装入背包,因此,背包的重量为11,不满足约束条件,将结点4丢弃;在结点5,没有将物品2装入背包,因此,背包的重量和获得的价值与结点2相同,目标函数值为40+(10-4)×5=70,将结点5加入表PT中;(5)在表PT中选取目标函数值取
6、得极大的结点5优先进行搜索;(6)在结点6,将物品3装入背包,因此,背包的重量为9,获得的价值为65,目标函数值为65+(10-9)×4=69,将结点6加入表PT中;在结点7,没有将物品3装入背包,因此,背包的重量和获得的价值与结点5相同,目标函数值为40+(10-4)×4=64,将结点6加入表PT中;(7)在表PT中选取目标函数值取得极大的结点6优先进行搜索;(8)在结点8,将物品4装入背包,因此,背包的重量为12,不满足约束条件,将结点8丢弃;在结点9,没有将物品4装入背包,因此,背包的重量和获得的价值与结点6相同,目标函数值为65;(9)由于结点9是
7、叶子结点,同时结点9的目标函数值是表PT中的极大值,所以,结点9对应的解即是问题的最优解,搜索结束。9.1.2分支限界法的设计思想假设求解最大化问题,解向量为X=(x1,x2,…,xn),其中,xi的取值范围为某个有穷集合Si,
8、Si
9、=ri(1≤i≤n)。在使用分支限界法搜索问题的解空间树时,首先根据限界函数估算目标函数的界[down,up],然后从根结点出发,扩展根结点的r1个孩子结点,从而构成分量x1的r1种可能的取值方式。对这r1个孩子结点分别估算可能取得的目标函数值bound(x1),其含义是以该孩子结点为根的子树所可能取得的目标函数值不大于bo
10、und(x1),也就是部分解应满足:bound(x1)≥bound