AN* 算法中的曼哈顿、欧几里得和切比雪夫

Manhattan, Euclidian and Chebyshev in a A* Algorithm

我对 A* 算法中的曼哈顿、欧几里得和切比雪夫的目的感到困惑。仅仅是距离计算,还是 A* 算法根据这些指标(垂直和水平或对角线或所有三个)以不同方式找到路径。我对这三个指标的印象是它们有不同的计算距离的方法,如本网站所示:https://lyfat.wordpress.com/2012/05/22/euclidean-vs-chebyshev-vs-manhattan-distance/

但有些人告诉我,如果使用曼哈顿度量,A* 算法只能垂直和水平移动,并且必须以这种方式绘制。仅对角线用于 euclidian,并且可以在切比雪夫的所有三个方向上移动。

所以我想澄清的是 A* 算法 运行 是基于度量(曼哈顿、切比雪夫和欧几里德)在不同方向上还是在所有方向上 运行 但有不同基于指标的启发式成本。我是一名学生,对此感到困惑,因此不胜感激!

实际上,事情有点相反,我们通常知道我们感兴趣的运动类型,而这种运动类型决定了哪个是最好的指标(Manhattan, Chebyshev, Euclidian) 在启发式中使用。

改变启发式不会改变相邻小区的连通性。

为了使 A* 算法根据特定的运动类型(仅水平+垂直或对角线等)找到路径,邻居枚举过程应该是相应地设置。 (节点邻居的枚举是在算法主循环内的某处完成的,在节点从队列中弹出之后)。

简而言之,不是启发式算法,而是节点邻居的枚举方式决定了 A* 算法允许的移动类型。

之后,一旦确定了运动类型并将其编码到如上所述的算法中,找到好的启发式算法也很重要。启发式需要满足某些标准才能有效(它不需要高估到目标的距离),因此一些启发式与某些运动类型不兼容。选择无效的启发式不再保证 A* 在完成后会找到正确的解决方案。启发式的一个很好的选择是在所选移动类型下精确使用一个测量距离(例如曼哈顿horizontal/vertical,依此类推)。