文档介绍:2017/11/11
计算机算法设计与分析
1
第六章分支限界法
2017/11/11
计算机算法设计与分析
2
分支限界法的求解目标
分支限界法与回溯法的求解目标不同。
回溯法的求解目标是找出解空间树T中满足约束条件的所有解。
分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
2017/11/11
计算机算法设计与分析
3
分支限界法与回溯法的不同
由于求解目标不同,导致分支限界法与回溯法有两点不同:
①回溯法只通过约束条件剪去非可行解,而分支限界法不仅通过约束条件,而且通过目标函数的限界来减少无效搜索,也就是剪掉了某些不包含最优解的可行解。
②在解空间树上的搜索方式也不相同。回溯法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树。
2017/11/11
计算机算法设计与分析
4
分支限界法是最佳优先搜索法
分支限界法就是最佳优先(包括广度优先在内)的搜索法。
分支限界法将要搜索的结点按评价函数的优劣排序,让好的结点优先搜索,将坏的结点剪去。所以准确说,此方法应称为界限剪支法。
分支限界法中有两个要点:
(1)评价函数的构造;
(2)搜索路径的构造。
2017/11/11
计算机算法设计与分析
5
评价函数的构造
评价函数要能够提供一个评定候选扩展结点的方法,以便确定哪个结点最有可能在通往目标的最佳路径上。
一个评价函数f(d)通常可以由两个部分构成:⑴从开始结点到结点d的已有耗损值g(d),和⑵再从结点d到达目标的期望耗损值h(d)。即:
f(d) = g(d) + h(d)
通常g(d)的构造较易,h(d)的构造较难。
2017/11/11
计算机算法设计与分析
6
搜索路径的构造
在回溯法中,每次仅考察一条路径,因而只需要构造这一条路径即可:前进时记下相应结点,回溯时删去最末尾结点的记录。这比较容易实现。
在分支限界法中,是同时考察若干条路径,那么又该如何构造搜索的路径呢?
对每一个扩展的结点,建立三个信息:
(1)该结点的名称;
(2)它的评价函数值;
(3)指向其前驱的指针;
这样一旦找到目标,即可逆向构造其路径。
用一个表保存准备扩展的结点,称为Open表。
用一个表保存已搜索过的结点,称为Closed表。
2017/11/11
计算机算法设计与分析
7
分支限界法的一般算法
⑴计算初始结点s的f(s); [s, f(s), nil]放入Open;
⑵while (Open ≠Φ) {
⑶从Open中取出[p, f(p), x](f(p)为最小);
⑷将[p, f(p), x]放入Closed;
⑸若p是目标,则成功返回;否则
⑹{ 产生p的后继d并计算f(d) ;对每个后继d
有二种情况:
①dClosed || d Open;
②dOpen && dClosed。
⑺{若([d, f’(d), p]Closed || [d, f’(d), p]Open)
&& f(d)<f’(d),则删去旧结点并将[d, f(d), p]
重新插入到Open中; 否则
⑻将[d, f(d), p] 插入到Open中}}}。
2017/11/11
计算机算法设计与分析
8
分支限界法求单源最短路径
单源最短路径问题的评价函数的构造:
g(d)定义为从源s到结点d所走的路径长度:
g(d) = g(p) + C[p][d]
这里p为d的前驱结点,C[p][d]为p到d的距离。
h(d)定义为0。于是f(d) = g(d)。
源s的评价函数f(s) = 0。
评价函数的下界为0;上界初始时为∞,以后不断用取得的更短路径的长度来替代。
2017/11/11
计算机算法设计与分析
9
分支限界法求最短路径举例
1
2
5
4
3
10
20
50
100
30
10
60
赋权图G
初始时,将源[1, 0, 0]放入Open,Closed为空。
Open表
[1, 0, 0]
Closed表
取出[1, 0, 0]放入Closed;生成其后继[2, 10, 1]、[4, 30, 1]和[5, 100, 1],并依序放入Open。
[1, 0, 0]
[5, 100, 1]
[4, 30, 1]
[2, 10, 1]
取出[2, 10, 1]放入Closed;生成其后继[3, 60, 2],并依序插入Open。
[2, 10, 1]
[3, 60, 2]
[4, 30, 1]
取出[4, 30, 1]放入Closed;生成其