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

Sab*_*zir 0 java heuristics a-star path-finding

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

double Sum = 0;

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

return Math.sqrt(Sum);
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*mms 7

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

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

在此输入图像描述

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

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

请注意,您可以sqrt()完全省略,因为执行这么多次是非常昂贵的操作.也更喜欢float,double因为floats 上的操作要快得多.

所以尝试这样的事情:

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

return x + y;
Run Code Online (Sandbox Code Playgroud)

我假设你可以用某种方式用x和y代替long/lat(我没有做太多的地理空间编程).这篇文章似乎相关,看起来你需要使用半正公式来计算距离.

我在大约一年前写了一篇关于A*的文章,你可能会在这里找到帮助.