我是靠谱客的博主 大意奇异果,最近开发中收集的这篇文章主要介绍A*启发式搜索,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

A*算法,作为启发式算法中很重要的一种,被广泛应用在最优路径求解和一些策略设计的问题中。而A*算法最为核心的部分,就在于它的一个估值函数的设计上:

f(n)=g(n)+h(n)

       其中f(n)是每个可能试探点的估值,它有两部分组成:一部分为g(n),它表示从起始搜索点到当前点的代价(通常用某结点在搜索树中的深度来表示)。另一部分,即h(n),它表示启发式搜索中最为重要的一部分,即当前结点到目标结点的估值。

一种具有f(n)=g(n)+h(n)策略的启发式算法能成为A*算法的充分条件是:

1)     搜索树上存在着从起始点到终了点的最优路径。

2)     问题域是有限的。

3)     所有结点的子结点的搜索代价值>0

4)     h(n)<=h*(n)h*(n)为实际问题的代价值)。

      当此四个条件都满足时,一个具有f(n)=g(n)+h(n)策略的启发式算法能成为A*算法,并一定能找到最优解。

对于一个搜索问题,显然,条件1,2,3都是很容易满足的,而

条件4) h(n)<=h*(n)是需要精心设计的,由于h*(n)显然是无法知道的。

所以,一个满足条件4)的启发策略h(n)就来的难能可贵了。不过,对于图的最优路径搜索和八数码问题,有些相关策略h(n)不仅很好理解,而且已经在理论上证明是满足条件4)的,从而为这个算法的推广起到了决定性的作用。不过h(n)距离h*(n)的程度不能过大,否则h(n)就没有过强的区分能力,算法效率并不会很高。对一个好的h(n)的评价是:h(n)h*(n)的下界之下,并且尽量接近h*(n).

      当然,估值函数的设计也不就仅仅是f(n)=g(n)+h(n)一种,另外的估值函数“变种”如:f(n)=w*g(n)+(1-w)*h(n)f(n)=g(n)+h(n)+h(n-1)针对不同的具体问题亦会有不同的效果。



最后

以上就是大意奇异果为你收集整理的A*启发式搜索的全部内容,希望文章能够帮你解决A*启发式搜索所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部