5.最佳图搜索算法A�~(Optimal Search) 最佳图搜索算法A*又可以简称为A*算法。 当在算法A的评价函数中,使用的启发函数h(n)是处在h�~(n)的下界范围,即满足h(n) ≤h*(n)时,则我们把这个算法称为算法A�~。A�~算法实际上是分支界限和动态规划原理及使用下界范围的h相结合的算法。当问题有解时,A�~一定能找到一条到达目标节点的最佳路径。例如在极端情况下,若h(n)≡0(肯定满足下界范围条件),因而一定能找到最佳路径。此时若g≡d,则算法等同于宽度优先算法。前面已提到过,宽度优先算法能保证找到一条到达目标节点最小长度的路径,因而这个特例从直观上就验证了A�~的一般结论。 对于以下的定理、引理和推论,我们只要求掌握其结论和含义,不要求掌握其具体的证明过程。但是证明过程有助于你对算法的理解。 下面来证明A�~的可采纳性及若干重要性质。 定理1的结论是显然的。由于问题的状态是有限的,那么A算法至少可以在有限的步数内搜索完所有的可以从初始节点到达的节点,只要问题是有解的,则一定可以找到问题的解。 因为A�~是A的特例,因此它具有A的所有性质。这样对有限图如果有解,则A�~一定能在找到到达目标的路径结束,下面要证明即使是无限图,A�~也能找到最佳解结束。我们先证两个引理: 在如下的证明中,隐含了两个假设:(1)任何两个节点之间的耗散值都大于某个给定的大于零的常量;(2)h(n)对于任何n来说,都大于等于零。 证明:设d�~(n)是A�~生成的搜索树中,从s到任一节点n最短路径长度的值(设每个弧的长度均为1),搜索图上每个弧的耗散值为C(ni,ni+1)(C取正)。令e=min
C(ni,ni+1),则g�~(n)≥d�~(n)e。而g(n)≥g�~(n)≥d�~(n)e,故有: 该引理可以这样来理解:如果问题从初始节点s到目标节点g的路径存在时,则一定有一个最短路径存在。在A*没有结束之前,OPEN表中的节点不会为空。由于总是从OPEN表中取出节点来扩展,所以最优路径肯定要通过OPEN表中的某个节点,设该节点为n。那么n有两个特点,一是n是从s到g的最优路径上的节点,二是到目前为止已经找到了从s到n的最优路径。第一点会比较容易接受,第二点是如何保证的呢?如果到目前为止找到的不是从s到n的最优路径,同样的理由,在OPEN表中一定有一个节点--假定为n'--在从s到n的最优路径上,当然他也一定在从s到g的最优路径上。用n'来代替n,重复下去,一直找到满足以上两个特点的n为止。当然,我们不一定明确的知道到底OPEN表中的哪个节点满足这样的特点,但从以上的叙述可以知道,这样的节点一定存在。这一点就足够了。 引理2.2:A*结束前,OPEN表中必存在f(n)≤f�~(s)的节点(n是在最佳路径上的节点)。 定理2:对无限图,若从初始节点s到目标节点t有路径存在,则A*也一定成功结束。 证明:假定A*不结束,由引理2.1有f(n)>f*(s),或OPEN表中最小的一个f值也变成无界,这与引理2.2的结论矛盾,所以A*只能成功结束。[证毕] 由于A*算法每次选择f值最小的节点优先扩展,由定理2得知,只要问题有解,则A*算法总能找到一个解,这个解的耗散值要大于等于f*(s)(f*(s)是最优路径的耗散值),所以OPEN表中满足条件f(n)<f*(s)的任何节点n,肯定会在A*结束前被扩展。 推论2.1:OPEN表上任一具有f(n)<f*(s)的节点n,最终都将被A*选作为扩展的节点。 定理3指出,当问题有解时,A*算法不但一定能找到解,而且一定能找到最优解,这一点称为可采纳性。 定理3:若存在初始节点s到目标节点t的路径,则A*必能找到最佳解结束。 其实从对引理2.2的证明注释已经清楚,在A*算法结束之前,在OPEN表中一定存在一个节点n,该节点在最优路径上,同时也找到了从s到n的最优路径。如果A*找到的不是最优路径的话,设其找到的路径的耗散值为f(g),由于f(n)≤f*(n)<f(g),所以,这时在OPEN表中,应该至少是n排在目标g的前面,而按照A*算法,只有当目标节点排在OPEN表的第一位时,算法才结束,所以在A*结束时,找到的只能是最优路径。从这里也可以看出,在前面反复强调过的A算法(A*算法)的结束判断条件,必须是当目标节点的f值在OPEN表中最小时才能结束,而不是目标一出现就结束是多么的重要。只有这样,才能保证A*算法的可采纳性。 证明: 该推论可以直接从引理2.2推出。由引理2.2,在A*结束前,OPEN表中必有满足条件f(n)≤f*(s)的节点存在,因此,A*必然从这些节点中选择一个节点扩展,而不可能去选择f(n)>f*(s)的节点扩展,所以A*选作扩展的任一节点n,必有f(n)≤f*(s)。 推论3.1:A*选作扩展的任一节点n,有f(n)≤f*(s)。 证明:令n是由A*选作扩展的任一节点,因此n不会是目标节点,且搜索没有结束,由引理2.2而知在OPEN中有满足 的节点 。若n= ,则f(n)≤f*(s),否则选n扩展,必有
,所以f(n)≤f*(s)成立。[证毕] |