【发布时间】:2016-08-03 19:04:52
【问题描述】:
我仍在试图弄清楚我的启发式选择如何以及为什么会影响我的 a* 实现的搜索时间。
我的地图如下(不是确切大小):
###########
# #
# # # # # #
# #
# # # # # #
# #
我选择了我的启发式方法
option 1: h = abs(n.x - target.x) + abs(n.y - target.y)
option 2: h = 2*(abs(n.x- target.x) + abs(n.y - target.y))
使用option 1,算法运行得相对较好,直到我必须从上到下移动,在这种情况下,需要很长时间才能找到路径。
使用option 2,option 1 的时间提高了大约 90%。
我试图阅读有关高估/低估的信息,但无法给出明确的解释。
可能是什么原因?还有,我的选择合理吗?
【问题讨论】:
-
为什么不选择欧几里得距离?自从我使用这个已经有一段时间了,但是给定一个 2D 地图空间,欧几里得距离应该给出一个最佳的启发式。
-
你也应该用其他地图测试启发式算法,最好的启发式算法是通过计算所有地图的平均时间(步数)表现最好的启发式算法
-
我还建议欧几里得距离,它可以很好地估计剩余路径,同时易于计算,因此速度很快。此外,它是可以接受的。
-
@konrad 我认为曼哈顿会更合适,因为我不能沿对角线移动。
-
我试过欧几里得距离,结果更糟。
标签: c# a-star heuristics