第章分支界限法.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第章分支界限法

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

文档评论(0)

docman126 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档