评论

深入详解A*寻路算法的实现原理

彻底搞懂A*寻路算法的实现原理。

嗨!大家好,我是小蚂蚁。

上一节里我们讲了寻路算法的发展历程,从低效率的广度优先查找算法,发展到为了解决不同的地形因素引入了“成本”概念的Dijkstra算法,再到为了提升查找效率引入“启发式查找”的最佳优先搜索算法,最终进化出了结合“成本”和“启发式查找”的A*算法

这一节,我们就深入A*算法,了解它的查找过程,知晓它的查找原理。

几个概念

在正式开始之前,我们先来了解几个概念,这些概念对于接下来了解A*算法的查找原理非常重要。

实际代价

实际代价其实就是Dijkstra算法中的“成本”(这里我们给它换了一个名字),它指的是从起点位置移动到当前位置所需要的代价。

举个例子,如图,兔子位置是起点位置,我们假设每个格子的长度为 1,计算兔子到1,2,3号位置的实际代价,位置1和位置2分别位于兔子的左侧和下侧相邻的格子,所以兔子移动到位置1和位置2的实际代价相同,都是 1。位置3是位于右上方的格子,兔子移动到位置3的距离是等腰直角三角形的斜边,也就是√2。

实际代价在具体使用时其实是一个数字,数字越大表示移动到这个位置上所需要的代价越高。

估计代价

估计代价是最佳优先搜索算法中提到的“启发式查找”(又换了一个名字),它指的是从当前位置移动到目标位置所需要的代价。

如图,还是有1,2,3的三个位置,每个位置的估计代价就是当前位置到目标位置的直线距离,很明显可以看出位置2的估计代价最小,位置1次之,位置3最大。兔子想要找到胡萝卜,选择移动到估计代价最小的位置2更好。

估价函数

估价函数指的就是实际代价与估计代价的总和。

如图,蓝线的总长度是移动到位置1的估价,绿线的总长度是移动到位置2的估价,橙线的总长度是移动到位置3的估价。在通过估价函数计算得到将要移动到的所有位置的估价值之后,做一个比较,选择向估价值最小的那个位置(位置2)移动。

估价函数是A*算法的计算基础,通常使用 f(n) 表示估价函数,g(n) 表示实际代价,h(n) 表示估计代价,最终的估价函数的计算公式是这样:

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

g(n) 表示当前位置到起点位置的实际代价值。

h(n) 表示当前位置到目标位置的估计代价值。

f(n) 表示当前位置的最终估价值。


该篇文章为付费教程,剩余部分可前往公众号中付费阅读。

https://mp.weixin.qq.com/s/H28I6rQx1Lq7XQsIfD6BPg

最后一次编辑于  2023-02-10  
点赞 0
收藏
评论
登录 后发表内容