【问题标题】:A* - Graph Traversal HeuristicA* - 图遍历启发式
【发布时间】:2015-06-24 14:01:21
【问题描述】:

我有一个代表城市的图表。我知道感兴趣的地方的位置(节点,具有重要性值)、我住的酒店的位置、节点的连接方式、它们之间的遍历时间以及可以访问纬度和经度。从时间转换为距离没有问题,反之亦然。

目标是游览城市,最大限度地提高每天的重要性,但将一天的旅行时间限制为 10 小时。一天在酒店开始和结束。我有一个有效的 A* 算法,它选择了最低值但还没有启发式,我想这使它现在成为 BB。考虑到这一点:

  • 自从我可以访问 Lat/Long 以来,我第一次尝试启发式算法,而 只与时间打交道,将是乌鸦飞过的距离 在节点和酒店之间。这会是一个可接受的启发式方法吗? 它给了我最短的距离和时间,所以它不会 高估了。

现在假设一个节点的重要性在 1-4 之间。为了将其考虑在内,一个想法可能是 g(neighbor) = g(current) + (edge_cost / Importance^2)。假设这是有效的(如果不是,为什么?):

  • 但现在启发式值将采用不同的单位。解决这个问题可以简单地给酒店重要性 = 1 吗?如果值相同,是否仍然可以接受?编辑:我认为这最终会给我带来问题,因为规模不同。
  • 我还是要限制总时间。每个节点是否应该跟踪花费的总时间,以便与限制进行比较,加上 g() 和 h() 值,因为单位不同?

最后:

  • 由于我必须在同一个节点开始和结束,我想到的是探索一个节点,我应该找到酒店看看我是否还有时间探索邻居而不是回去。但是,如果我还有时间再扩展一个节点,但时间用完了,我无法从那里到达酒店,我假设我将不得不回溯到父节点。
  • 我不禁看到了与背包问题的相似之处。即使我必须使用 A*,我可以从中吸取什么教训吗?
  • 在这种情况下,我的启发式算法必须保持一致吗?如果是,为什么?

顺便说一下,这里的目的是首先寻路,其次是优化。

【问题讨论】:

  • 这实际上是Traveling Salesman Problem 的泛化 - 这是NP-Complete。 A* 的问题 - 它不支持对路线本身的限制,它仅旨在找到从源到一组目标的最短路径,这不是你的情况(无论如何都不是没有修改)。
  • 我负责这些修改。对于这个,我几乎坚持使用 A*。因此,所有的问题。
  • 在这个任务中使用 A* 对我来说很奇怪,它似乎更像是一个优化问题而不是最短路径问题 - 所以例如遗传算法或爬山似乎更适合这里。跨度>
  • 这是一个项目。实际上有同样的主题,但有其他算法。但这是我必须解决的问题。
  • 如前所述,这听起来像是用锤子拧螺丝。 A* 将告诉 A 点和 B 点之间的最短路径,对,如果你能飞,那就是曼哈顿距离,所以这是已知的,你已经知道如何从 A 点到 B。如果问题是要么创建一个从 A 到 A 的圆圈,并在最大范围内通过尽可能多的景点,然后是 TSP 问题,或者选择要放在列表中的事件,最大范围,然后是背包,它们都不会A* 会有所帮助。

标签: algorithm graph a-star


【解决方案1】:

这实际上看起来像是旅行商问题 (TSP) 和背包问题 (KP) 的组合。在这方面它是 KP:背包容量为 10(一天中可用的总小时数),位置是物品。项目值等于位置值。物品重量等于前往该地点所需的时间(加上该地点返回酒店的路程部分)。挑战源于这样一个事实,即在您通过选定位置解决最佳旅行之前,项目的重量是未知的——输入 TSP 和寻路。

一种方法可能是使用寻路算法(例如 A*、Bellman–Ford 或 Dijkstra 算法)主要计算每个节点之间的距离矩阵。然后可以在解决问题的 TSP 部分时利用距离矩阵:找到通过这些位置的游览并使用总时间作为权重。

下一步取决于您。如果您正在寻找近似解决方案,TSP 和 KP 都存在许多启发式方法:请参阅 Christofides TSP Heuristic,或 Compendium of NP Optimization problems 中的 Minimum TSPMaximum Knapsack 条目。

另一方面,如果您寻求最佳解决方案,您可能会不走运。我仍然建议您找到 Graph Theory 的副本。 Nicos Christofides (ISBN-13: 978-0121743505) 的算法方法。它为深度优先搜索中的早期回溯提供启发式方法,加快了对几个 NP 完全问题的最佳解决方案的搜索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多