【发布时间】:2014-05-02 22:10:08
【问题描述】:
我有一张道路网络图,其中包含 avg。全天变化的交通速度测量值。节点是道路上的位置,边连接同一道路上的不同位置或两条道路之间的交叉点。我需要一种算法来解决给定开始时间的任意两个节点之间的最短行程时间路径。
显然,该图具有动态权重,因为边的行驶时间i 是该边的交通速度的函数,这取决于您的路径到达边所需的时间我。
我已经实现了 Dijkstra 算法 边权重 = (edge_distance / edge_speed_at_start_time) 但这忽略了边缘速度随时间的变化。
我的问题是:
有没有一种启发式的方法来使用对 Dijkstra 算法的重复调用来逼近真正的解决方案?
我相信“距离矢量路由算法”是解决此类问题的正确方法。有没有办法使用 Igraph 库或 R、Python 或 Matlab 中的其他库来实现这个算法?
编辑 我目前在 R 中使用 Igraph。该图是一个 igraph 对象。 igraph 对象是使用 igraph 命令 graph.data.frame(Edges) 创建的,其中 Edges 看起来像这样(但有更多行):
我还有一个每个边的速度矩阵(以 MPH 为单位),看起来像这样(除了更多的行和列):
因为我想找到最短的行程时间路径,所以给定边缘的权重是 edge_distance / edge_speed。但是 edge_speed 会根据时间而变化(即您已经在这条路上行驶了多长时间)。 该图有 7048 个节点和 7572 条边(因此非常稀疏)。
【问题讨论】:
标签: r matlab graph igraph shortest-path