- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验6 A最佳先搜索算法教程
实验6 A*最佳优先搜索算法
实验原理
最佳优先的一个重要原理就是根据评价函数的计算结果总是选择代价最小的那条路径向下搜索。在搜索过程中通过不断地放弃代价较大的路径,从而最终找到代价最小的问题求解答案。广度搜索
上一章介绍了深度搜索,现在我们来介绍广度搜索。为了使你对这两种搜索方式有一个较深刻的了解,再次它们做个比较。
用下面的树来说明这两种搜索方式。节点a是搜索的起点,而节点i是搜索的目标。先来看看深度搜索。深度搜索的搜索路径如下:
a-ba-b-e
a-c
a-c-f
a-c-g
a-d-i
最后找到了节点i。它先找出与a相连的某个节点b,发现b下面还有节点e,由于是深度搜索,所以它就会访问节点e,此时发现e下面没有其它的节点了,于是就返回到节点b,同样b下面也没有其它的节点,于是就返回到节点a,节点a还有子节点c,所以就开始访问节点c,如此下去,直到找到节点i。
而广度搜索的路径如下:
a-ba-c
a-d
a-b-e
a-c-f
a-c-g
a-d-i
这种搜索方式先考察a的所有子节点b、c和d,当它没有发现目标时就再考虑这些子节点的子节点,直到找到目标。这也是它取名为广度搜索的原因。
宽(广度搜索的Prolog程序与深度搜索一样简单:
源程序备注说明:
append/3谓词的作用是把两个表合成为一个表。上面的route/3使用广度搜索来找出答案。不难看出广度搜索与深度搜索的区别就是:广度搜索是递归在前,而深度搜索是递归在后。其实从逻辑上理解上面的route/3的编写方法是不难的,不过许多人都不会满足于这种逻辑上的理解,而希望能够了解程序的运行流程。
首先,我们调用的目标与第二个route子句匹配,而此子句的头一个子目标就是它本身,所以又与route的第一个子句匹配。于是我们的程序就变成了如下的样子。
route(Links,Current,Des):- route([],Current,Current),
sub(Current,Des),
append(PreLinks,[Next],Links).
很清楚这段程序判断从Current到Des有没有直接的通路。当找不到时,它就回溯到route目标,这次它与第二条route子句匹配,而第二条子句马上递归调用它本身,所以再次与第一条子句匹配。这是程序变成了如下的样子:
route(Links,Current,Des):- route([],Current,Current), (1)sub(Current,Next), (2)append, (3)sub(Next,Des),
append.
前面的1、2、3个子句是把第一个route目标展开的结果。很容易看出来,此程序考虑了深度为2的节点。如果还没有发现目标,它又会递归调用来寻找深度为3的节点。每次展开后的程序大致如下:
sub(Current,X1), sub(X1,X2),
...
sub(Xn-1,Xn),
sub(Xn,Des).
于是此程序能够完成广度搜索。当然这种搜索的工作量是巨大的,并且程序的运行流程也很复杂,幸好这些工作都由Prolog完成了,我们所要做的就是使用这些搜索方法来解决一些实际的问题。
最佳优先搜索
最佳优先搜索可以看成是对宽度优先搜索的一种改进。与宽度优先一样,最佳优先也总是保留一组继续向下搜索的可选择路径。除此以外,最佳优先的一个重要原理就是根据评价函数的计算结果总是选择代价最小的那条路径向下搜索。在搜索过程中通过不断地放弃代价较大的路径,从而最终找到代价最小的问题求解答案。
最佳优先搜索要求给出由一个状态前进到下一个状态所付出的代价。这在一般的问题求解中都是事先确定了的。例如,两个城市之间的距离就可以看成是求解此两个城市之间运输路线问题的代。 最佳优先搜索的核心问题是如何构估算路径成本的评价函数。这里,介绍一种简单的评价函数构造方法。
假如n是由起点s到目标状态t的最佳路径上的某一个节点。用f(n)来表示对这条最佳路径的成本计算。f(n)定义为:
f(n)=g(n)+h(n)
其中g(n)为由起点s到n的各部代价之和,h(n)为由n到终点t的代价估算。
在求解过程中当搜索到n时,g(n)是已知的——它是由s到n的各步代价的总和。然而如何确定h(n),却不是件容易的事,因为由n到g是一个未知的世界。这里,无法给出一个通用的求解方法。它只能根据所求解问题的性质,或是人们所积累的经验来决定。因此,只能针对特定的问题加以解决。为了不影响进一步的讨论,不妨假设已知这个函数。 对宽度先搜索进行如下的改进就成了最佳优先搜索。
全部的搜索过程由一组互相竞争的子过程构成,每一个子过程负责一种搜索选择,负责搜索属于自身的那棵子树。而且这些子过程又由它自己的子过程构成,如此等
您可能关注的文档
- 安徽省安庆一中安师大附中、马鞍山二中2014届高三上学期12月联考 数学理试题.doc
- 安徽省安庆一中安师大附中、马鞍山二中2014届高三上学期12月联考 理综.doc
- 安徽省安庆一中010届高三第三次模拟考试.doc
- 安徽省安庆一中安师大附中、马鞍山二中2014届高三上学期12月联考 英语试题 Word版含答案.doc
- 安徽省安庆市0-09学年高二上学期期末考试(地理).doc
- 安徽省第四届技大赛车工中级工实操试题.doc
- 安徽省碘缺乏病测方案(2012年修订).doc
- 安徽省社区卫生务中心绩效考核细则.doc
- 安徽省芜湖一中012届高三下学期第六次模拟考试(数学文).doc
- 安徽省计划生育术服务站(所).doc
文档评论(0)