我有一个公共汽车/火车/ ...站点的数据库以及每个日期的到达/离开时间等等。我正在寻找一种方法来搜索两个位置之间的最快(最短/最便宜/最少过渡)之旅。我希望将来有任意位置,使用OpenStreetMap数据在停靠点之间以及从停止点到开始/结束之间行走,但是暂时我只想在数据库中的两个停靠点之间找到路径。
问题是我似乎无法找到关于此主题的更多信息,例如this Wikipedia page有很多文本,其中绝对没有有用的信息。
我发现GTFS格式在Google Transit中使用。虽然我的城市没有提供公共数据源(甚至不是私人数据源),但我已经掌握了GTFS包含的所有重要信息,并且进行转换将是微不足道的。
有一些基于GTFS的软件,如OpenTripPlanner,也可以使用OpenStreetMap进行行人/汽车/自行车路线。
然而,路由代码没有很好地记录(至少从我发现的那个)并且我不需要整个事情。
我正在寻找的是对我可以使用的算法,它们的性能,可能是一些伪代码的一些很好的概述。
所以,问题是,给出停靠点,路线和到达/离开/出行时间列表,如何轻松找到从A站到B站的最快路径?
答案 0 :(得分:16)
w:Edges->R
,表示每条边的时间/金钱/ .... (*)对于“最少过渡”,每个边缘的重量实际上为1,因此您甚至可以通过运行BFS甚至bi-directional BFS而不是dijkstra来优化此重量,正如我所解释的那样在这个post [它被解释为社交距离,但它实际上是相同的算法]。
修改强>
作为对你在评论中提到的[时间]图的非静态性质的编辑[对于价格和转换数量,我上面提到的仍然适用,因为这些图是静态的],你可以使用一个distance vector routing algorithm,实际上意味着适用于动态图,并且是Bellman Ford algorithm的分布式变体。
算法思路: