6-1剪枝-概述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
COMPUTER ALGORITHM
最大利益优先——分支限界算法
分支限界法就是最佳优先(包括广度优先在内)的搜索法。
分支限界法将要搜索的结点按评价函数的优劣排序,让
好的结点优先搜索,将坏的结点剪去。
所以准确说,此
方法应称为界限剪支法。
分支限界法中有两个要点:
分支限界法是最佳优先搜索法
12
评价函数的构造;
搜索路径的构造。
评价函数的构造
评价函数要能够提供一个评定候选扩展结点的方法,以便确定哪个结点最有可能在通往目标的最佳路径上。
一个评价函数f(d)通常可以由两个部分构成:⑴从开始结点到结点d的已有耗损值g(d),和⑵再从结点d到达目标的期望耗损值h(d)。
即:
f(d) = g(d) + h(d)
通常g(d)的构造较易,h(d)的构造较难。
在回溯法中,每次仅考察一条路径,因而只需要构造这
一条路径即可:前进时记下相应结点,回溯时删去最末
尾结点的记录。
这比较容易实现。
在分支限界法中,是同时考察若干条路径,那么又该如何构造搜索的路径呢?搜索路径的构造
对每一个扩展的结点,建立三个信息: 这样一旦找到目标,即可逆向构造其路径。
用一个表保存准备扩展的结点,称为Open表。
用一个表保存已搜索过的结点,称为Closed表。
该结点的名称; 它的评价函数值; 指向其前驱的指针;
分支限界法的一般算法
⑴计算初始结点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
有二种情况:①d ∈Closed || ∈Open ;②d Open && d Closed 。
⑺{ 若([d, f’(d), p]∈Closed || [d, f’(d), p]∈Open) && f(d)<f’(d),则删去旧结点并将[d, f(d), p] ⑻将[d, f(d), p] 插入到Open 中}}}。
分支限界法求单源最短路径
单源最短路径问题的评价函数的构造:
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;上界初始时为∞,以后不断用取得的更短路径的长度来替代。
分支限界法求最短路径举例
12
54
310
2050100301060赋权图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][3, 50, 4]和[5, 90, 4] ,修订Open 中已有的两个结点并依序排列。
[4, 30, 1]
[5, 90, 4][3, 50, 4][3, 50, 4]放入Closed ;生成其后继[2, 100, 3]和3],前者因劣于Closed 中的[2, 10, 1]而被抛弃,后者修订了Open 中的[5, 90, 4]。
[3, 50, 4][5, 60, 3][5, 60, 3],因其已经是目标结点,算法成功并终止。
依据逆向指针可得最短路径为1→4→3→5。
界限(Bounding)
评价函数f(d)关系着算法的效率乃至成败。
因为在大多数问题中f(d)只是个估计值,所以单靠f(d)是不够的。
通常还要设计它的上下界函数U(d)和L(d)。
L(d)≤f(d)≤U(d)。
所谓分支限界法就是通过评价函数及其上下界函数的计算,将状态空间中不可能产生最佳解的子树剪去,减少搜索的范围,提高效率。
因而更准确的称呼应是“界限剪支法”。