具有欧氏距离的A *启发式计算

时间:2013-06-01 06:43:42

标签: java path-finding a-star heuristics

我在Java中实现A *算法,用于找到两点(不同城市的机场)之间的最短路径。为此目的,我使用无向和加权图,其中每条边代表两个节点(机场)之间的距离。启发式计算通过欧几里德距离完成。这是我的启发式函数的代码

double Sum = 0;

Sum = Math.pow((destination.getG()-currentNode.getG()),2.0);

return Math.sqrt(Sum);

我正在用G值i计算启发式,即节点之间的边缘。这是对的吗?请帮助。启发式函数获取源节点和目标节点。我希望它清楚。

1 个答案:

答案 0 :(得分:7)

您不使用G分数来计算启发式,将G分数添加到启发式(H分数)以获得从节点到目标的估计值(F分数)。

欧几里德距离是此图中所示的线:

enter image description here

其中,使用两个点(x 1 ,y 1 )和(x 2 ,y 2 )是这样的:

  

h(n)= sqrt((x 1 - x 2 2 +   (y 1 - y 2 2

请注意,您可以完全省略sqrt(),因为执行这么多次是非常昂贵的操作。另外,float优先于double,因为float上的操作要快得多。

所以尝试这样的事情:

float x = Math.pow(destination.getX() - currentNode.getX(), 2.0);
float y = Math.pow(destination.getX() - currentNode.getX(), 2.0);

return x + y;

我假设你可以用某种方式用x和y代替long / lat(我没有做太多的地理空间编程)。 This article似乎相关,看起来您需要使用haversine formula来计算距离。

我在大约一年前写了一篇关于A *的文章,你可能会发现它很有用here