gpt4 book ai didi

java - A* 欧氏距离启发式计算

转载 作者:行者123 更新时间:2023-12-01 07:31:42 27 4
gpt4 key购买 nike

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

double Sum = 0;

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

return Math.sqrt(Sum);

我正在使用 G 值(即节点之间的边)计算启发式。这是对的吗?请帮忙。启发式函数采用源节点和目标节点。我希望它是清楚的。

最佳答案

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

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

enter image description here

其中,使用两个点 (x1, y1) 和 (x2, y2>)是这样的:

h(n) = sqrt((x1 - x2)2 + (y1 - y2)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 代替长/纬度(我没有做过太多地理空间编程)。 This article似乎相关,看起来您需要使用 haversine formula计算距离。

大约一年前,我写了一篇关于 A* 的文章,您可能会发现它有帮助 here .

关于java - A* 欧氏距离启发式计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16869920/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com