110 likes | 284 Views
启发式搜索 A-Star. 静态路网求最短路的有效方法. Made by Lighthawk. 什么是启发式搜索???. 启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行 评估 ,得 到 最好的位置,再从这个位置进行搜索直到目标。. 与盲目搜索对比一下的话~~. 就是搜索具有了 目的性!. 单向bfs、双向bfs和A*的比较:. 初识A*. A*算法的实质是一个启发函数 f (N),用来计算结点 N“前途如何”。. 通常把f (N) 设计成估计“一条经过N的路径”, 进而写成 f (N) = g(N) +h(N) ;
E N D
启发式搜索A-Star 静态路网求最短路的有效方法 Made by Lighthawk
什么是启发式搜索??? 启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。 与盲目搜索对比一下的话~~ 就是搜索具有了目的性!
初识A* A*算法的实质是一个启发函数 f (N),用来计算结点 N“前途如何”。 通常把f (N) 设计成估计“一条经过N的路径”, 进而写成 f (N) = g(N) +h(N) ; g(N) --- 由起点搜到 N 点时的最小步数 (相当于已知条件); h(N) --- 对N到终点的接近程度的估计 ; 强调! h(N)与搜索过程无关,仅仅是状态的函数。当然了,要满足某些条件。
估值函数h(N)应该具有什么性质??? 可接纳性 0 <= h(N) <= h*(N) 以八数码为例: No.1 f1(N) = N不在目标位置的滑块数目; No.2 f2(N) = N所有数字到终点的Manhattan距离; No.3 f3(N) = N的逆序数对。 只有前两个可接纳
A*算法 定义f(N) = g(N) + h(N) , 其中g(N)是从初始状态到N的最优路径代价,h(N)是一个可接纳的启发函数,所有边权为c(N,N') > ε > 0 , 如果把搜索边界按照f(N)从小到大排序,则修改后的搜索算法称为A*算法。 结论一:如果重复结点全部保存,则A* 是完全的,也是最优的。 结论二:若启发函数h是单调的,则每扩展一个结点N时,就已经找到了起点到它的最优路径。 结论三:设启发函数h2比h1更精确,采用h1的A*算法称为A1*,采用h2的A*算法称为A2*,则被A2*扩展的非目标结点一定会被A1*扩展。 详细证明 --- lrj内功心法 4.4.4
A*算法 结论一:如果重复结点全部保存,则A* 是完全的,也是最优的。 完全 --- 如果问题有解,搜索边界上一定存在点 X,使得从 X 到终点存在最优路径。因为 c(N,N') > ε , 所以每次扩展h(N)后,f(N)一定会增加;如果 c(N,N') == 0 , 每次扩展h(N)后 , f(N) 都不会变,一直是最小值,就会无止境地扩展点N。 最优 --- 假设 C* 是最优解; 1、X' 为搜索边界上的非最优目标结点,则X'满足:f(X') = g(X') + h(X') > C*; 2、K为搜索边界上、任意一个在最优路径上的节点,则K满足:f(K) = g(K) + h(K) <= C*; h可接纳性带来的好处:最优路径上的点先扩展。
A*算法 结论二:若启发函数h是单调的,则每扩展一个结点N时,就已经找到了起点到它的最优路径。
A*算法 结论三:设启发函数h2比h1更精确,采用h1的A*算法称为A1*,采用h2的A*算法称为A2*,则被A2*扩展的非目标结点一定会被A1*扩展。
Thank you ~~~~~