具有时间依赖图的Astar

时间:2016-07-29 13:39:38

标签: c++ algorithm graph a-star boost-graph

我有一个表示路线网络的图表 - 航点是顶点,路线是边缘。问题是在某些时段之间可能存在不能越过的航路点之间的区域。但这些区域不一定影响顶点,只影响边缘。

我使用时间作为成本函数,因此对于每个顶点(以及边缘),我可以获得访问者和/或启发式的到达时间。但是,由于权重图是可读的,我无法改变边缘的权重,使其过长"。

另一方面,我无法创建自定义重量图,因为我不知道提前到达的时间,因为它取决于路径。

我在论坛中发现的是使用启发式方法并将其设置为inf以防出现错误的情况。顶点。但我需要的是选择" bad"边缘。

您是否知道在启发式中访问当前检查的边缘(默认情况下,它的唯一输入是顶点描述符)?

我知道我可以在examine_edge访问者中做出决定,但是我应该怎么称呼它让astar知道这个边缘是坏的,不应该被使用?也许我可以创建一个外部布尔"坏边缘"属性图(对于所有顶点),如果当前边缘是"坏"在examine_edge访问者中将目标顶点设置为true?这个"坏边缘"然后可以通过启发式访问属性映射。 但是,在我看来,这可能不是最佳解决方案。

还有其他想法吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

解决这类问题的常用方法是构建一个新图,其节点包含的信息比原始节点多。在您的情况下,请考虑创建一个包含每个节点的多个副本的图表,每个节点可以在不同时刻创建一个然后,如果在适当的时间点在相应节点之间存在边缘,则使每个边缘在一对节点之间。例如,始终打开的边将带您从一个时间点的节点到稍后时间点的相应节点,并且仅在某个时间点处于活动状态的边将仅在这些时间点的图中

这样做的缺点是会炸掉图表的大小,但如果您可以选择懒惰地评估图表,这种方法可能会非常合理。