2

AStar 在直线的基础上工作,AFAIK。

就我而言,我们有地理坐标,我可以得到航点之间的直线距离。但我想知道这会有多近似?“公路”的实际距离可能会有所不同。

例子。假设 A 和 B 在同一平面上,并且与目标点等距,如果我们考虑 A 和目标点之间的直线,B 和目标点。

A 和目标点之间的“公路”距离可能大于或小于 B。但由于 AStar 以直线为基础工作,因此它将返回两条路线最短。

那是对的吗?

如果是,那么应该考虑哪种算法,如果我们想要以 Km/m 为单位的实际距离为基础的结果?

如果不是,那么我错过的重点是什么?

4

3 回答 3

3

默认情况下,A-star对具有非负权重的边的图进行操作。没有限制边缘必须是直线。与Dijkstra 算法相比,A-star 的不同之处在于它使用了一种启发式方法,其中首先搜索图形的哪些节点。在嵌入欧几里得空间的图的情况下,这种启发式通常被选择为节点之间的欧几里得距离,尽管还有其他可能性。

于 2011-06-27T07:02:51.363 回答
2

您可以使用加权图对情况进行建模,其中顶点是您考虑的点,它们之间的边的权重等于对应点之间的道路距离。然后,您可以使用例如Dijkstra 算法来找到点之间的最短距离。

例如,如果您在平面上有点 A 和 B,并且它们之间的道路距离等于 C,那么在图中您将有顶点 [A] 和 [B] 以及它们之间的长度为 C 的边:

[A]---C---[B]
于 2011-06-27T07:02:41.890 回答
2

好的,既然你让我发布答案……

在了解 A* 之前,您必须先了解Dijkstra 算法。给定一个图(一组节点和节点之间的边)和每条边的(正)“距离”(例如道路距离),Dijkstra 算法给出了某个源节点和每个目标节点之间的最短距离。例如,在您的图表中,节点可能是道路交叉口,边可能是道路,而您放在边上的权重/距离可能是该道路的长度,或者遍历它所需的时间,或者任何。

请理解:Dijkstra 的算法总是根据你放在边缘的权重给出正确的距离。事实上,图形甚至不需要嵌入到平面中,也就是说,首先可能没有“直线距离”的概念。它可以是任意图。

现在,可以将 A* 视为加速 Dijkstra 算法的特定启发式算法。您可以将其视为使用启发式方法来决定考虑图中节点的顺序。

形式上:你有一个图 G,其中有两个节点 s 和 t,你想找到 s 和 t 之间的距离 d(s,t)。(距离根据图表,例如根据您的示例中的道路距离。)要找到 d(s,t),在 A* 中,您使用满足 h(x) ≤ d(x) 的启发式函数 h(x) ,t)。例如(仅一种可能性),您可以选择 h(x) 作为从 x 到 t 的直线距离。h(x) 作为 d(x,t) 的估计值越好,A* 算法将运行得越快,但 h 的选择只影响速度,而不影响答案:它总是会根据下式给出最短距离d,不是 h。

所以要找到 s 到 t 的道路距离,只需将 d(u,v) 设置为每对节点 u 和 v 的道路距离,它们之间有一条道路,运行 A*,你会发现 d(s ,t) 你想要的。

于 2011-06-27T08:05:10.397 回答