【问题标题】:chosing a* heuristic function选择一个*启发式函数
【发布时间】: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 2option 1 的时间提高了大约 90%。

我试图阅读有关高估/低估的信息,但无法给出明确的解释。

可能是什么原因?还有,我的选择合理吗?

【问题讨论】:

  • 为什么不选择欧几里得距离?自从我使用这个已经有一段时间了,但是给定一个 2D 地图空间,欧几里得距离应该给出一个最佳的启发式。
  • 你也应该用其他地图测试启发式算法,最好的启发式算法是通过计算所有地图的平均时间(步数)表现最好的启发式算法
  • 我还建议欧几里得距离,它可以很好地估计剩余路径,同时易于计算,因此速度很快。此外,它是可以接受的。
  • @konrad 我认为曼哈顿会更合适,因为我不能沿对角线移动。
  • 我试过欧几里得距离,结果更糟。

标签: c# a-star heuristics


【解决方案1】:

看看this的回答。有一个很好的教程有一个link,它解释并给出了经验法则关于应该为不同类型的问题选择哪些启发式方法,然后是对这些技术的友好解释。

【讨论】:

  • 从那个链接我得到了将选项 1 乘以某个 D 的想法,然后我选择了 2。
猜你喜欢
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
  • 2014-03-12
  • 2015-07-02
  • 2012-05-30
  • 1970-01-01
相关资源
最近更新 更多