什么是A*算法?

在现实生活中,我们经常会遇到求解最佳路径问题,比如导航软件要求从S点到G点的最短路径,A*算法就是一个有效的求解最佳路径的搜索算法。假设我们在地图上求从S出发到

很多朋友对于什么是A*算法?和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

假设我们在地图上找到从S到目标G的最短路径。每个路口都可以看作是一个状态。最短路径问题是在地图上找到一个从S到G的状态序列,使得沿着这个状态序列所走过的距离最短。这个状态序列称为从S到G的最短路径,寻找最短路径的过程称为状态搜索。

图1:本地状态搜索图

图1给出了一个状态搜索图的例子,其中每个节点代表一个状态,即路径中的一个交叉点,两个状态之间的连接代表一条直达道路。为了找到从S到G的路径,我们每次从上图中选择一个叶子节点进行扩展,直到找到目标节点G。

什么是A*算法?

问题是,搜索图中有很多叶子节点,应该扩展哪个节点?直观的解决办法是,如果某个叶子节点n到初始节点S的距离加上节点n到目标节点G的最小距离之和最小,那么该节点在最短路径上,应该进行扩展第一的。我们用g(n)表示从S到n的最短路径距离,用h(n)表示从n到G的最短路径距离。则S经n到G的总距离f(n)为:

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

如果选择f(n)最小的叶子节点进行扩展,就能保证最高的搜索效率。

什么是A*算法?

然而,我们在实际搜索时并不能直接使用f(n)来选择扩展节点。首先,在搜索过程中,我们不知道当前搜索的从S到n的路径是否是最短路径,因此当前记录的距离g'(n)不一定等于从S到n的最短距离g(n) S 到n。其次,在搜索过程中,我们还没有找到从n到G的最短路径,所以我们不知道h(n)是什么。

如何解决这个困难呢?一种解决方案是用当前获得的从S 到n 的距离g'(n) 替换未知的最短距离g(n),并使用估计值h'(n) 替换从n 到n 的最短距离h(n)。 G,基于这两个近似产生f(n)的估计f'(n)=g'(n)+h'(n),并且基于f'(n)进行搜索。

该算法首先从初始节点S开始,每次选择f'(n)值最小的叶子节点进行扩展,直到扩展目标G并且f'(G)在所有叶子节点中具有最小值。在搜索过程中,如果多条路径到达同一节点,则需要更新从S到该节点的最短路径估计g'(n)。

什么是A*算法?

上述算法称为算法A。算法A中,对h'(n)没有明确的限制,只要符合直觉即可,因此h'(n)可能小于h(n),也可能大于h(n),其中h(n)是从n到G的最短路径。算法A不保证找到的路径是最短路径。但是,如果h'(n)受到限制,使得对于任何叶子节点n,总是有h'(n)=h(n),那么该算法找到的路径一定是最短的。此时,算法A称为A*算法。

在前面提到的地图搜索任务中,我们可以通过城市的坐标值计算出两个城市之间的直线距离。显然,两点之间的直线距离必须小于或等于两点之间的实际最短路径距离。因此,用这个直线距离来计算h'(n)就可以满足A*算法的条件,所以肯定可以搜索到一条最短路径。图2所示为A*算法进行路径搜索的运行流程。

图2:A*算法搜索过程示意图[1]

用户评论

什么是A*算法?
执拗旧人

我就想问问什么是A*算法啊?感觉这个名字听起来好高端 gitu! 能简单讲讲吗?像我这种菜鸟都不懂

    有19位网友表示赞同!

什么是A*算法?
夜晟洛

终于找到解释 A* 算法的博客了!我一直都在想学习这方面的东西,可惜太难懂了。希望这篇博文能给我一个清晰的理解

    有10位网友表示赞同!

什么是A*算法?
入骨相思

A*算法真的很有意思啊,以前从来没听说过! 不过看标题感觉要讲有点深度? 我这种对编程小白可能没法完全get到吧

    有13位网友表示赞同!

什么是A*算法?
迷路的男人

作为一名程序员,我一直都在使用 A* 算法解决路径规划问题。这篇博客讲解得非常透彻,让我能更深入地理解它的工作原理!

    有5位网友表示赞同!

什么是A*算法?
£烟消云散

A* 算法的应用范围真广泛啊! 不光局限于游戏开发, 还可以在导航系统、机器人控制等等领域发挥作用! 厉害啊

    有14位网友表示赞同!

什么是A*算法?
别悲哀

这篇文章写的很不错,用通俗易懂的语言解释 A*算法。学习起来方便多了!强烈推荐给想要入门的人!

    有13位网友表示赞同!

什么是A*算法?
米兰

我有点不太理解 A* 算法的 "估价函数" 这个概念. 能不能再详细解释一下? 我感觉这个关键部分看不懂…

    有6位网友表示赞同!

什么是A*算法?
暮染轻纱

我一直以为 A* 算法很复杂,但看了这篇博文后发现其实并不难懂。只要理解了核心概念,就能应用到实际问题中。

    有14位网友表示赞同!

什么是A*算法?
╯念抹浅笑

A* 算法真是太棒了!学习完这篇文章后,我现在终于明白它的强大之处啦!

    有18位网友表示赞同!

什么是A*算法?
艺菲

作者说得很有道理! A* 算法在路径规划方面确实非常有效。 我也用它来解决一些类似的问题,效果很好!

    有20位网友表示赞同!

什么是A*算法?
念初

我觉得博客里提供的示例代码太简化了,实际运用场景下应该更加复杂吧?能提供一些更实用的案例吗?

    有7位网友表示赞同!

什么是A*算法?
太难

这篇博文让我对 A* 算法有了基本的理解,不过还有很多地方不太清楚。 希望作者能补充更多细节讲解!

    有20位网友表示赞同!

什么是A*算法?
迷路的男人

感觉 A* 算法应用太广泛了,不仅是游戏开发,还包括机器人、物流等多个领域。 真是厉害的算法!

    有19位网友表示赞同!

什么是A*算法?
满心狼藉

这篇文章解释得有点抽象, 我还是觉得很难理解 A* 算法的原理。 希望作者能用更直观的方式讲解一下!

    有12位网友表示赞同!

什么是A*算法?
别伤我i

A***算法在路径规划上的效果确实是很好的,但它是不是也存在缺点啊?比如对于复杂环境下的规划是否也很有效?

    有11位网友表示赞同!

什么是A*算法?
晨与橙与城

这篇博文让我对 A* 算法有了初步的了解,但是我还在思考它的实际应用场景。希望看到更多具体的案例分析!

    有8位网友表示赞同!

什么是A*算法?
灼痛

我之前听人说过 A* 算法很厉害,今天终于看明白它是怎么运作的了!

    有13位网友表示赞同!

什么是A*算法?
聽風

对于 A* 算法来说, 估价函数的选择很重要, 对算法的影响很大, 对这个参数选择的方法还需要多学习多实践!

    有19位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/140323.html

Like (0)
小su的头像小su
Previous 2024年9月18日 下午8:54
Next 2024年9月18日 下午9:05

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注