我对A *算法中曼哈顿,欧几里得和切比雪夫的目的感到困惑。它只是距离计算还是A *算法根据这些指标(垂直和水平或对角线或全部三个)以不同方式查找路径。我对这三个指标的印象是,他们有不同的计算距离的方法,如本网站所示:https://lyfat.wordpress.com/2012/05/22/euclidean-vs-chebyshev-vs-manhattan-distance/
但有些人告诉我,如果使用曼哈顿指标,A *算法只会垂直和水平移动,并且必须以这种方式绘制。只对角线 欧几里得并且可以向chebyshev三个方向移动。
所以我想澄清的是A *算法是基于指标(曼哈顿,切比雪夫和欧几里得)在不同方向上运行,还是在所有方向上运行,但根据指标具有不同的启发式成本。我是一名学生并且对此感到困惑,所以任何澄清可能都值得赞赏!
答案 0 :(得分:1)
实际上,事情有点相反,即我们通常知道我们感兴趣的运动类型,而这种运动类型决定了哪个是最佳指标(曼哈顿,切比雪夫,欧几里德(Euclidian)用于启发式算法。
更改启发式算法不会改变相邻单元格的连接性。
为了使A *算法根据特定的移动类型(即仅水平+垂直或对角线等)找到路径,应相应地设置邻居枚举过程。 (在从队列中弹出节点之后,节点的邻居的枚举在算法的主循环内的某处完成)。
简而言之,不是启发式,而是枚举节点的邻居的方式决定了A *算法允许的移动类型。
之后,一旦建立了移动类型并将其编码到如上所述的算法中,找到良好的启发式也很重要。启发式需要满足某些标准才能有效(它不需要过度估计到目标的距离),因此某些启发式算法与某些移动类型不兼容。选择无效的启发式方法不再能保证A *在完成后能找到合适的解决方案。启发式算法的一个很好的选择是在所选的移动类型下精确使用一个测量距离(例如曼哈顿的水平/垂直等等)。