分支限界法Word格式文档下载.docx
- 文档编号:17814390
- 上传时间:2022-12-10
- 格式:DOCX
- 页数:20
- 大小:359.89KB
分支限界法Word格式文档下载.docx
《分支限界法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《分支限界法Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
12
9.3.3
批处理作业调度问题
14
习题9
17
分支限界法
教学重点
分支限界法的设计思想;
各种经典问题的限界函数
教学难点
各种经典问题的限界函数以及限界算法
教学内容
和
教学目标
知识点
教学要求
了解
理解
掌握
熟练掌握
分支限界法的设计思想
√
分支限界法的时空性能
TSP问题
多段图的最短路径问题
0/1背包问题
任务分配问题
批处理作业调度问题
述
分支限界法(branchandboundmethod)按广度优先策略搜索问题的解空间树,在搜索过程中,对待处理的结点根据限界函数估算目标函数的可能取值,从中选取使目标函数取得极值(极大或极小)的结点优先进行广度优先搜索,从而不断调整搜索方向,尽快找到问题的解。
因为限界函数常常基于问题的目标函数而确定,所以,分支限界法适用于求解最优化问题。
9.1.1分支限界法的设计思想
回溯法求解最优化问题是从根结点出发,按照深度优先策略搜索问题的解空间树,在搜索过程中,如果某结点所代表的部分解不满足约束条件,则对以该结点为根的子树实行剪枝;
否则,继续按深度优先策略搜索以该结点为根的子树,当搜索到一个满足约束条件的叶子结点时,就找到了一个可行解,对整个解空间树的搜索结束后,所有可行解中的最优解就是问题的最优解。
回溯法虽然实行剪枝减少了搜索空间,但是,整个搜索过程是按深度优先策略机械地进行,所以,这种搜索仍然是盲目的。
分支限界法首先确定一个合理的限界函数(boundingfunction),并根据限界函数确定目标函数的界[down,up]。
然后,按照广度优先策略搜索问题的解空间树,在分支结点上,依次扩展该结点的所有孩子结点,分别估算这些孩子结点的目标函数的可能取值,如果某孩子结点的目标函数的可能取值超出目标函数的界,则将其丢弃,因为从这个结点生成的解不会比目前已经得到的解更好;
否则,将其加入待处理结点表(以下简称表PT)中。
依次从表PT中选取使目标函数取得极值的结点成为当前扩展结点,重复上述过程,直至找到最优解。
分支限界法的一般过程如下:
分支限界法的一般过程
1.根据限界函数确定目标函数的界[down,up];
2.估算根结点的目标函数值并加入待处理结点表PT;
3.循环直到某个叶子结点的目标函数值在表PT中取得极值
3.1i=表PT中具有极值的结点;
3.2对结点i的每个孩子结点x执行下列操作:
3.2.1估算结点x的目标函数值value;
3.2.2若value在[down,up]中,则将结点x加入表PT中;
否则丢弃该结点;
4.将叶子结点对应的最优值输出,回溯求得最优解的各个分量;
显然,应用分支限界法的关键问题是:
(1)如何确定合适的限界函数。
分支限界法在遍历过程中根据限界函数估算某结点的目标函数的可能取值。
好的限界函数不仅计算简单,还要保证最优解在搜索空间中,更重要的是能在搜索的早期对超出目标函数界的结点进行丢弃,减少搜索空间,从而尽快找到问题的最优解。
对于具体的问题实例,有时需要进行大量实验,才能确定一个合理的限界函数。
(2)如何组织待处理结点表。
为了能在待处理结点表PT中选取使目标函数取得极值的结点时提高查找效率,表PT可以采用堆的形式,也可以采用优先队列的形式存储。
(3)如何确定最优解的各个分量。
分支限界法跳跃式处理解空间树中的结点,因此,当搜索到某个叶子结点且该叶子结点的目标函数值在表PT中取得极值时,求得了问题的最优值,但是,却无法求得该叶子结点对应的最优解的各个分量。
因此,必须保存搜索过程中经过的路径信息。
分支限界法的时间性能
一般情况下,在问题的解向量X=(x1,x2,…,xn)中,分量xi(1≤i≤n)的取值范围为某个有限集合Si={ai,1,ai,2,…,ai,ri},因此,问题的解空间由笛卡儿积A=S1×
S2×
…×
Sn构成,并且第1层的根结点有|S1|棵子树,则第2层共有|S1|个结点,第2层的每个结点有|S2|棵子树,则第3层共有|S1|×
|S2|个结点,依此类推,第n+1层共有|S1|×
|S2|×
|Sn|个结点,他们都是叶子结点,代表问题的所有可能解。
分支限界法和回溯法实际上都属于蛮力穷举法,当然不能指望它有很好的最坏时间复杂性,遍历具有指数阶个结点的解空间树,在最坏情况下,时间复杂性肯定为指数阶。
与回溯法不同的是,分支限界法首先扩展解空间树中的上层结点,并采用限界函数,有利于实行大范围剪枝,同时,根据限界函数不断调整搜索方向,选择最有可能取得最优解的子树优先进行搜索。
所以,如果设计了一个好的限界函数并选择了结点的合理扩展顺序,分支界限法可以快速得到问题的解。
分支限界法可以对许多组合问题的较大规模的输入实例在合理的时间内求解,然而,对于具体的问题实例,很难预测分支限界法的搜索行为,无法预先判定哪些实例可以在合理的时间内求解,哪些实例不能在合理的时间内求解。
分支限界法的较高效率是以付出一定代价为基础的,其工作方式也造成了算法设计的复杂性。
首先,一个更好的限界函数通常需要花费更多的时间计算相应的目标函数值,而且对于具体的问题实例,通常需要进行大量实验,才能确定一个好的限界函数;
其次,由于分支限界法对解空间树中结点的处理是跳跃式的,因此,在搜索到某个叶子结点得到最优值时,为了从该叶子结点求出对应的最优解中的各个分量,需要对每个扩展结点保存该结点到根结点的路径,或者在搜索过程中构建搜索经过的树结构,这使得算法的设计较为复杂;
再次,算法要维护一个待处理结点表PT,并且需要在表PT中快速查找取得极值的结点,等等。
这都需要较大的存储空间,在最坏情况下,分支限界法的空间复杂性是指数阶。
一个简单的例子——圆排列问题
【问题】给定n个圆的半径序列,将这些圆放到一个矩形框中,各圆与矩形框的底边相切,则圆的不同排列会得到不同的排列长度,如图9.1所示。
要求找出具有最小长度的圆排列。
【想法】设各圆的编号为{1,2,…,n},半径分别为{r1,r2,…,rn},可行解为向量(i1,i2,…,in),且i1,i2,…,in为1,2,…,n的全排列,表示第i个位置放置编号为ii的圆。
显然,解空间树为排列树,如果采用蛮力法,需要依次考察1,2,…,n的所有全排列。
采用分支限界法求解圆排列问题,关键是设计限界函数,以便在搜索过程中选择使目标函数取得极值的结点优先进行扩充。
假设已排列了圆(i1,i2,…,ik-1),则在排列圆ik时,目标函数可能取得的极小值Lk的计算请参见图9.2,其中各记号定义如下:
xk:
第k个位置所放圆的圆心坐标,规定第1个圆的圆心为坐标原点,即x1=0。
dk:
第k个位置所放圆的圆心坐标与第k-1个位置所放圆的圆心坐标的差。
Lk:
第1~k个位置放置圆后,可能得到的目标函数的极小值。
各参数之间满足如下关系:
其中,r=min{rk,rk+1,…,rn},r'
=min{rk+1,…,rn}。
图9.2圆排列问题限界函数的计算示意图
例如,给定圆的半径为{1,2,9},圆排列问题的最优解如图9.3所示,分支限界法求解圆排列问题的过程如图9.4所示,具体过程如下:
(1)将根结点1加入待处理结点表PT;
(2)依次处理根结点的每一个孩子结点。
在结点2,计算各参数的值:
i1=1,x1=0,L1=1+2×
(3-1)×
1+2=7,将结点2加入表PT;
在结点3,计算各参数的值:
i1=2,x1=0,L1=2+2×
1+1=7,将结点3加入表PT;
在结点4,计算各参数的值:
i1=9,x1=0,L1=9+2×
1+1=14,将结点4加入表PT;
(3)在表PT中选取目标函数值极小的结点2优先进行搜索;
(4)依次处理结点2的每一个孩子结点。
在结点5,计算各参数的值:
i2=2,x2=2.8,L2=1+2.8+2×
2+9=16.8,将结点5加入表PT;
在结点6,计算各参数的值:
i2=9,x2=6,L2=1+6+2×
2+2=13,将结点6加入表PT;
(5)在表PT中选取目标函数值极小的结点3优先进行搜索;
(6)依次处理结点3的每一个孩子结点。
在结点7,计算各参数的值:
i2=1,x2=2.8,L2=2+2.8+2×
1+9=15.8,将结点7加入表PT;
在结点8,计算各参数的值:
i2=9,x2=8.4,L2=2+8.4+2×
1+1=13.4,将结点8加入表PT;
(7)在表PT中选取目标函数值极小的结点6优先进行搜索。
在结点9,计算各参数的值:
i3=2,x3=14.4,L3=1+14.4+2=17.4,将结点9加入表PT,结点9是叶子结点,找到了一个可行解;
(8)在表PT中选取目标函数值极小的结点8优先进行搜索。
在结点10,计算各参数的值:
i3=1,x3=14.4,L3=2+14.4+1=17.4,将结点10加入表PT,结点10是叶子结点,找到了一个可行解;
(9)在表PT中选取目标函数值极小的结点4优先进行搜索;
(10)依次处理结点4的每一个孩子结点。
在结点11,计算各参数的值:
i2=1,x2=6,L2=9+6+2×
1+2=19,超出目前得到的解(结点9和10对应的解),将结点11丢弃;
在结点12,计算各参数的值:
i2=2,x2=8.4,L2=9+8.4+2×
1+1=20.4,超出目前得到的解(结点9和10对应的解),将结点12丢弃;
(11)在表PT中选取目标函数值极小的结点7优先进行搜索。
在结点13,计算各参数的值:
i3=9,x3=8.8,L3=2+8.8+9=19.8,结点13是叶子结点,得到了一个可行解,但超出结点9和10对应的解,将结点13丢弃;
(12)在表PT中选取目标函数值极小的结点5优先进行搜索。
在结点14,计算各参数的值:
i3=9,x3=11.2,L3=1+11.2+9=21.2,结点14是叶子结点,得到了一个可行解,但超出结点9和10对应的解,将结点14丢弃;
由于结点9和10对应的目标函数值在表PT中最小,因此,结点9和10对应的解即是问题的最优解,搜索过程结束,得到具体的圆排列如图9.3所示。
图问题中的分支限界法
TSP问题
【问题】TSP问题(travelingsalesmanproblem)是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短。
【想法】首先确定目标函数的界[down,up],可以采用贪心法确定TSP问题的一个上界。
如何求得TSP问题的一个合理的下界呢?
对于无向图的代价矩阵,把矩阵中每一行最小的元素相加,可以得到一个简单的下界。
但是还有一个信息量更大的下界:
考虑一个TSP问题的完整解,在每条路径上,每个城市都有两条邻接边,一条是进入这个城市的,另一条是离开这个城市的,那么,如果把矩阵中每一行最小的两个元素相加再除以2,假设图中所有的代价都是整数,再对这个结果向上取整,就得到了一个合理的下界。
需要强调的是,这个解可能不是一个可行解(可能没有构成哈密顿回路),但给出了一个参考下界。
例如,对于图9.4(a)所示带权无向图,(b)是该图的代价矩阵,采用贪心法求得近似解为为1→3→5→4→2→1,其路径长度为1+2+3+7+3=16,这可以作为TSP问题的上界。
把矩阵中每一行最小的两个元素相加再除以2,得到TSP问题的下界:
[(1+3)+(3+6)+(1+2)+(3+4)+(2+3)]/2=14。
于是,得到了目标函数的界[14,16]。
一般情况下,假设当前已确定的路径为U=(r1,r2,…,rk),即路径上已确定了k个顶点,此时,该部分解的目标函数值的计算方法(即界限函数)如下:
例如,对于图9.4所示无向图,如果部分解包含的路径是135,则该部分解的下界是lb=[2×
(1+2)+3+3+(3+6)+(3+4)]/2=14。
应用分支限界法求解图9.4所示无向图的TSP问题,其搜索空间如图9.5所示,具体的搜索过程如下(其中加黑部分表示已经确定的路径):
(1)在根结点1,计算目标函数值为lb=[(1+3)+(3+6)+(1+2)+(3+4)+(2+3)]/2=14,将根结点加入待处理结点表PT;
在结点2,已确定的路径是12,路径长度为3,则目标函数值为[2×
3+1+6+(1+2)+(3+4)+(2+3)]/2=14,将结点2加入表PT;
在结点3,已确定的路径是13,路径长度为1,则目标函数的值为[2×
1+3+1+(3+6)+(3+4)+(2+3)]/2=14,将结点3加入表PT中;
在结点4,已确定的路径是14,路径长度为5,则目标函数的值为[2×
5+1+3+(3+6)+(1+2)+(2+3)]/2=16,将结点4加入表PT中;
在结点5,已确定的路径是15,路径长度为8,则目标函数的值为[2×
8+1+2+(3+6)+(1+2)+(3+4)]/2=19,超出目标函数的界,将结点5丢弃;
在结点6,已确定路径123,路径长度为3+6=9,则目标函数值为[2×
9+1+1+(3+4)+(2+3)]/2=16,将结点6加入表PT;
在结点7,已确定路径124,路径长度为3+7=10,则目标函数值为[2×
10+1+3+(1+2)+(2+3)]/2=16,将结点7加入表PT;
在结点8,已确定路径125,路径长度为3+9=12,则目标函数值为[2×
12+1+2+(1+2)+(3+4)]/2=19,超出目标函数的界,将结点8丢弃;
在结点9,已确定路径132,路径长度为1+6=7,则目标函数值为[2×
7+3+3+(3+4)+(2+3)]/2=16,将结点9加入表PT中;
在结点10,已确定路径134,路径长度为1+4=5,则目标函数值为[2×
5+3+3+(3+6)+(2+3)]/2=15,将结点10加入表PT;
在结点11,已确定路径135,路径长度为1+2=3,则目标函数值为[2×
3+3+3+(3+6)+(3+4)]/2=14,将结点11加入表PT;
(7)在表PT中选取目标函数值极小的结点11优先进行搜索;
(8)依次处理结点11的每一个孩子结点。
在结点12,已确定路径1352,路径长度为1+2+9=12,则目标函数值为[2×
12+3+3+(3+4)]/2=19,超出目标函数的界,将结点12丢弃;
在结点13,已确定路径1354,路径长度为1+2+3=6,则目标函数值为[2×
6+3+4+(3+6)]/2=14,将结点13加入表PT中;
(9)在表PT中选取目标函数值极小的结点13优先进行搜索;
(10)依次处理结点13的每一个孩子结点。
在结点14,已确定路径13542,路径长度为1+2+3+7=13,则目标函数值为(2×
13+3+3)/2=16,最后从城市2回到城市1,路径长度为1+2+3+7+3=16,由于结点14为叶子结点,得到一个可行解,其路径长度为16;
(11)在表PT中选取目标函数值极小的结点10优先进行搜索;
(12)依次处理结点10的每一个孩子结点。
在结点15,已确定路径1342,路径长度为1+4+7=12,则目标函数值为[2×
12+3+3+(2+3)]/2=18,超出目标函数的界,将结点15丢弃;
在结点16,已确定路径1345,路径长度为1+4+3=8,则目标函数值为[2×
8+3+2+(3+6)]/2=15,将结点16加入表PT中;
(13)在表PT中选取目标函数值极小的结点16优先进行搜索;
(14)依次处理结点16的每一个孩子结点。
在结点17,已确定路径13452,路径长度为1+4+3+9=17,则目标函数的值为(2×
17+3+3)/2=20,超出目标函数的界,将结点17丢弃;
(15)表PT中目标函数值均为16,且有一个是叶子结点14,所以,结点14对应的解即是TSP问题的最优解,搜索过程结束。
为了求得最优解的各个分量,从结点14开始向父结点进行回溯,得到最优解为1→3→5→4→2→1。
【算法】设数组x[n]存储路径上的顶点,分支限界法求解TSP问题的算法用伪代码描述如下:
算法9.1:
分支限界法求解TSP问题
输入:
图G=(V,E)
输出:
最短哈密顿回路
1.根据限界函数计算目标函数的下界down;
采用贪心法得到上界up;
2.计算根结点的目标函数值并加入待处理结点表PT;
3.循环直到某个叶子结点的目标函数值在表PT中取得极小值
3.1i=表PT中具有最小值的结点;
3.2.1估算结点x的目标函数值lb;
3.2.2若(lb<
=up),则将结点x加入表PT中;
多段图的最短路径问题
【问题】设G=(V,E)是一个带权有向连通图,如果把顶点集合V划分成k个互不相交的子集Vi(2≤k≤n,1≤i≤k),使得E中的任何一条边(u,v),必有u∈Vi,v∈Vi+m(1≤i<k,1<i+m≤k),则称图G为多段图,称s∈V1为源点,t∈Vk为终点。
多段图的最短路径问题(multi-segmentgraphshortestpathproblem)是求从源点到终点的最小代价路径。
【想法】首先确定目标函数的界[down,up],可以采用贪心法确定多段图的一个上界,把每一段最小的代价相加,可以得到一个非常简单的下界,这个解可能不是一个可行解(可能无法构成一条路径),但给出了一个参考下界。
例如,对于图9.6所示多段图,应用贪心法求得近似解为0→2→5→8→9,其路径代价为2+7+6+3=18,这可以作为多段图问题的上界。
把每一段最小的代价相加,其路径长度为2+4+5+3=14。
于是,得到了目标函数的界[14,18]。
一般情况下,假设当前已经确定了前i段(1≤i≤k),其路径为(r1,r2,…,ri,ri+1),此时,该部分解的目标函数值的计算方法(即限界函数)如下:
例如,对图9.6所示多段图,如果部分解包含路径01,则第1段的代价已经确定,并且在下一段只能从顶点1出发,最好的情况是选择从顶点1出发的最短边,则该部分解的下界是lb=4+8+5+3=20。
应用分支限界法求解图9.6所示多段图的最短路径问题,其搜索空间如图9.7所示,具体的搜索过程如下(加黑表示该路径上已经确定的边):
(1)在根结点1,计算目标函数的值为18,将根结点加入表待处理结点PT;
在结点2,已经确定路径是01,路径长度为4,则目标函数值为lb=4+8+5+3=20,超出目标函数的界,将结点2丢弃;
在结点3,已经确定路径是02,路径长度为2,则目标函数值为lb=2+6+5+3=16,将结点3加入待处理结点表PT中;
在结点4,已经确定路径是03,路径长度为3,则目标函数值为lb=3+4+5+3=15,将结点4加入表PT中;
(3)在表PT中选取目标函数值极小的结点4优先进行搜索;
(4)依次处理结点4每一个孩子结点。
在结点5,已经确定路径是035,路径长度为3+4=7,则目标函数值为lb=7+6+3=16,将结点5加入表PT中;
在结点6,已经确定路径是036,路径长度为3+7=10,则目标函数值为lb=10+5+3=18,将结点6加入表PT中;
(5)在表PT中选取目标函数值极小的结点5优先进行搜索;
(6)依次处理结点5的每一个孩子结点。
在结点7,已经确定路径是0357,可直接确定第4段的边<
7,9>
,目标函数值为lb=3+4+8+7=22,为一个可行解但超出目标函数的界,将其丢弃;
在结点8,已经确定路径是0358,可直接确定第4段的边<
8,9>
,目标函数值为lb=3+4+6+3=16,为一个可行解。
由于结点11是叶子结点,并且其目标函数值是表PT中最小的,所以,结点11代表的解即是问题的最优解,搜索过程结束。
为了求得最优解的各个分量,从结点8向父结点进行回溯,得到最优解为0358。
组合问题中的分支限界法
0/1背包问题
【问题】给定n种物品和一个容量为W的背包,物品i的重量是wi,其价值为vi,对每种物品i只有两种选择:
装入背包或不装入背包,0/1背包问题(0/1knapsackproblem)是如何选择装入背包的物品,使得装入背包中物品的总价值最大?
【想法】假设n种物品已按单位价值由大到小排序,这样,第1个物品给出了单位重量的最大价值,最后一个物品给出了单位重量的最小价值。
可以采用贪心法0/1背包问题的一个下界,如何求得0/1背包问题的一个合理的上界呢?
考虑最好情况,背包中装入的全部是第1个物品且可以将背包装满,则可以得到一个非常简单的上界的计算方法:
ub=W×
(v1/w1)。
例如,有4个物品,其重量分别为(4,7,5,3),价值分别为(40,42,25,12),背包容量W=10。
首先,将给定物品按单位重量价值从大到小排序,结果如表9.1所示。
应用贪心法求得近似解为(1,0,1,0),获得的价值为65,这可以作为0/1背包问题的下界。
考虑最好情况,背包中装入的全部是第1个物品且可以将背包装满,则ub=W×
(v1/w1)=10×
10=100。
于是,得到了目标函数的界[65,100]。
表9.10/1背包问题的价值/重量排序结果
物品
重量(w)
价值(v)
价值/重量(v/w)
1
4
40
10
2
7
42
6
3
5
25
12
一般情况下,假设当前已对前i个物品进行了某种特定的选择,且背包中已装入物品的重量是w,获得的价值是v,计算该结点的目标函数上界的一个简单方法是,将背包中剩余容量全部装入第i+1个物品,并可以将背包装满,于是,得到限界函数:
例如,对于表9.1所示0/1背包问题,假设当前的部分解(1,0),即物品1装入背包,物品2没有装入背包,背包取得价值40,此时,背包可以获得的最大价值是剩余容量全部装入第3个物品,即目标函数值为40+(10-4)×
5=70。
分支限界法求解表9.1所示的0/1背包问题,其搜索空间如图9.8所示,具体的搜索过程如下:
(1)在根结点1,没有将任何物品装入背包,因此,背包的重量和获得的价值均为0,计算根结点的目标函数值为10×
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分支 限界
![提示](https://static.bdocx.com/images/bang_tan.gif)