- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机算法设计与分析 第六章分支限界法 树搜索的一般形式 SearchTree(Space T) {ok = 0; L = T.initial; while (!ok || L≠?) { a = L.first; if (a is goal) unfinish = false else Control-put-in(L, Sons(a)); } 分支限界法基本思想 分支限界法就是最佳优先(包括广度优先)的搜索法。其基本思想是:将要待考察的结点按其优劣排序,优先搜索好结点。 于是便有了两个问题: (1)如何知道结点的优劣? (2)在回溯法中,表L中结点的层次分明,因而路径也分明。但是这里排序会打乱表L中结点的层次,那又如何找回解的路径呢? 分支限界法基本思想 分支限界法就是最佳优先(包括广度优先)的搜索法。其基本思想是:将要待考察的结点按其优劣排序,优先搜索好结点。 于是便有了两个要点: (1)需要构造评价结点优劣的评价函数。 (2)需要能够重新构造解的路径,也就是搜索的路径。 评价函数的构造 评价函数要能够提供一个评定候选扩展结点的方法,以便确定哪个结点最有可能在通往目标的最佳路径上。 一个评价函数f(d)通常由两个部分构成: ⑴从开始结点到d的已有耗损值g(d),和 ⑵再从d到达目标的期望耗损值h(d)。即: f(d) = g(d) + h(d)。 通常g(d)的构造较易,h(d)的构造较难。 搜索路径的构造 在回溯法中,每次仅考察一条路径,因而只需要构造这一条路径即可:前进时记下相应结点,回溯时删去最末尾结点的记录。这比较容易实现。 在分支限界法中,是同时考察若干条路径,那么又该如何构造搜索的路径呢? 往前看,前程无数!往回看,来路一条。每个结点只要记住其前驱结点就行了! 搜索路径的构造 为此,只需要对每一个扩展的结点d,建立三个信息: (1)该结点的名称d; (2)它的评价函数值f(d); (3)指向其前驱的指针p; 即表示为[d, f(d), p]。 这样一旦找到目标,即可以很方便地逆向构造出该路径。 Open表与Closed表 搜索中,表L用来保存准备扩展的结点,即下一步的结点。把表L称为Open表。 此外,为了构造解的路径,还需要一个表来保存已经搜索过的结点,即已经走过的结点。此表被称为Closed表。 故任意结点d必是: ① d?Open d?Closed; ② d?Closed || d ?Open。 分支限界法的一般算法 ⑴初始化:计算起点s的f(s); [s, f(s), nil]放入Open; ⑵while (Open ≠?) { ⑶ 从Open中取出[p, f(p), x](f(p)为最小); ⑷ if (f(p) U) {将[p, f(p), x]放入Closed; ⑸ if (p是目标) {成功返回} else ⑹ { 产生p的后继d并计算f(d) ;对每个后继d 分支限界法的一般算法 ⑴初始化:计算起点s的f(s); [s, f(s), nil]放入Open; ⑵while (Open ≠?) { ⑶ 从Open中取出[p, f(p), x](f(p)为最小); ⑷ if (f(p) U) {将[p, f(p), x]放入Closed; ⑸ if (p是目标) {成功返回} else ⑹ { 产生p的后继d并计算f(d) ;对每个后继d 分支限界法的一般算法 ⑴初始化:计算起点s的f(s); [s, f(s), nil]放入Open; ⑵while (Open ≠?) { ⑶ 从Open中取出[p, f(p), x](f(p)为最小); ⑷ if (f(p) U) {将[p, f(p), x]放入Closed; ⑸ if (p是目标) {成功返回} else ⑹ { 产生p的后继d并计算f(d) ;对每个后继d 分支限界法求单源最短路径 单源最短路径问题的评价函数的构造: 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;上界初始时为∞,以后不断用取得的更短路径的长度来替代。 分支限界法求最短路径举例 界限(Bounding) 评价函数f(d)关系着算法的效率乃至成败。 因为在大多数问题中f(d)只是个估计值,所以单靠f(d)是不够的。通常还要设计它的上下界函数U(d)和L(d)。 L(d)≤f(d)≤U(d)。 所谓分支限界法就是通过评价函数及其上下界函数的计算,将状态空间中不可能产生最佳解的子树剪去,减少搜索的范围,提
文档评论(0)