A*(A-Star)搜索算法 入门详解
其他
2020-08-12 10:28:40
阅读次数: 0
A*(A-Star)搜索算法
- A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。
- 它的实现基于最朴素的BFS搜索,却通过估价函数优化使得搜索效率大大提升。
最短路模型
- 设一个优先队列
Q,初始放入起点,
- 设估价函数
F(x)=G(x)+H(x),其中
G(x)为起点到
x点已移动的实际距离,
H(x)为
x点到重点至少需要移动的估算代价(后面详细介绍),则
F(x)表示总距离。
- 每次从
Q中取出
F值最小的点,进行增广,
- 再算出走到的点的
F值,加入
Q中。
- 这样当第一次走到终点是,终点的
G值则为最短路。.
实际应用
- 很显然,实现最短路是不需要用A*这样的搜索算法的(可以用SPFA,dijkstra等)
- 所以,最短路只是相当于一个模型,用于介绍A*算法, 更便于理解。
- 一般用于搜索中,通过若干次操作使状态
S变成目标状态
T,求最小操作数,
-
G(x)表示到当前状态的实际操作数,
-
H(x)是到目标状态的估算代价,因为我们还没有到达目标状态,不知道其实际代价,只能通过估计,
- 然后找到
F(x)=G(x)+H(x)最小,即估算出来的总代价最小的状态进行转移,一定程度上能够优化普通的搜索。
-
F(x)在
G(x)一定时,或多或少会受到
H(x)的影响,所以
H(x)会影响到每次的操作的优先顺序,不会像普通的搜索一样按部就班的来。
- 也就是说,并不知道如何操作是最优的,但可以优先选择估计最优的状态进行下一步操作,使得尽可能地先操作更优的状态,使得离真实答案更加接近,达到优化时间的目的。
估算代价
- 现在问题来了,这个所谓的“估算代价”是什么??
- 顾明思义,这是一个估计值,相当于是猜测。
- 用简单的常数级别时间的计算得到的一个值作为
H(x)。
- 再回到最短路模型中,假设是在一张有障碍的网格图上,
H(x)可以取当前点到终点间的曼哈顿距离,也就是忽略障碍的存在,
- 也就是取一个接近真实,但相比真实可以用更短时间算出来的值作为估算代价。
- 可以理解成转换了操作或限制,使得两种状态间的代价可以直接计算,则这样计算出来的代价作为估算代价,以便用于估价函数的计算。
-
H(x)的取值情况会影响程序的效率:
- 如果
H(x)小于实际代价,那么搜索的状态多,搜索范围大,效率低。但能得到最优解。
- 如果
H(x)等于实际代价,那么搜索将严格沿着最优方案进行, 此时的搜索效率是最高的。
如果
H(n)d大于实际代价,那么搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。
模型模板
转载自blog.csdn.net/qq_39565901/article/details/104299607