启发式搜索算法

[1历史回顾]

       P. E. Hart , N. J. Nilsson B. Raphael共同发表了一篇在启发式搜索方面有深远影响力的论文:

“P. E. Hart, N. J. Nilsson, and B. Raphael. A formal basis for the heuristic determination of minimum cost paths in graphs. IEEE Trans. Syst. Sci. and Cybernetics, SSC-4(2):100-107, 1968”。从此,一种精巧、高效的算法------A*算法横空出世了,并在相关领域得到了广泛的应用。

                      

                                  Peter E. Hart                 Nils J. Nilsson

 

       首 先要提一下搜索树的概念,一个可以搜索出某个可行解的问题,如“农夫、白菜、羊、狼”和“八皇后”等,虽然从表面上看上去和“树”这种结构无关,但是整个 搜索过程中的可能试探点所行成的搜索空间总可以对应到一颗搜索树上去。所以,将各类形式上不同的搜索问题抽象并统一成为搜索树的形式,为算法的设计与分析 带来巨大的方便。

 

下面,让我们通过两个Flash演示来回顾一下DFSBFS的算法思想:

       DFS算法思想演示:

                         

      

 BFS算法思想演示

                         

      

 

      重点要在这里说明是:

       DFSBFS在展开子结点时均属于盲目型搜索,也就是说,它不会选择哪个结点在下一次搜索中更优而去跳转到该结点进行下一步的搜索。在运气不好的情形中,均需要试探完整个解集空间, 显然,只能适用于问题规模不大的搜索问题中。

       那么,作为启发式算法中的A*算法,又比它们高效在哪里呢?

       首先要来谈一下什么是启发式算法。所谓启发式搜索,与DFSBFS这 类盲目型搜索最大的不同,就在于当前搜索结点往下选择下一步结点时,可以通过一个启发函数来进行选择,选择代价最少的结点作为下一步搜索结点而跳转其上 (遇到有一个以上代价最少的结点,不妨选距离当前搜索点最近一次展开的搜索点进行下一步搜索)。一个经过仔细设计的启发函数,往往在很快的时间内就可得到 一个搜索问题的最优解,对于NP问题,亦可在多项式时间内得到一个较优解。

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

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

       其中f(n)是每个可能试探点的估值,它有两部分组成:一部分为g(n),它表示从起始搜索点到当前点的代价(通常用某结点在搜索树中的深度来表示)。另一部分,即h(n),它表示启发式搜索中最为重要的一部分,即当前结点到目标结点的估值,h(n)设计的好坏,直接影响着具有此种启发式函数的启发式算法的是否能称为A*算法。

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

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

2)      问题域是有限的。

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

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

       当此四个条件都满足时,一个具有f(n)=g(n)+h(n)策略的启发式算法能成为A*算法,并一定能找到最优解。([1]P89给出了相关的证明)

对于一个搜索问题,显然,条件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)针对不同的具体问题亦会有不同的效果。

 


[2DFSBFS中来]

  http://www.builder.com.cn/2007/1223/688879.shtml

posted on 2009-10-04 19:54  水无恨  阅读(3630)  评论(0编辑  收藏  举报

导航