A * - 图遍历启发式

时间:2015-04-17 15:51:22

标签: algorithm graph a-star

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

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

  • 因为我可以访问Lat / Long,所以我第一次尝试启发式 只处理时间,将是乌鸦飞行的距离 节点和酒店之间。这是一个可接受的启发式吗? 它给了我最短的距离和时间,所以它不会 高估。

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

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

最后:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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