在 R 中使用 C++ Routing 包的 Dijkstra 方法

Djikstra method using cppRouting package in R

我想知道如何使用 cppRouting 包使用 dijikstra 方法。我的数据库包含不同位置之间的距离数据,我想用这种方法来解决我的问题,即计算这些位置之间的最短路径。我研究并看到了这个适用于此方法的软件包。

包裹:https://cran.r-project.org/web/packages/cppRouting/cppRouting.pdf

> df <- read_excel('C:/Users/Local.xlsx')
> df
# A tibble: 6 x 6
         `Local 1`      `Loca 2`    `Local 3`     `Local 4`      `Local 5` `Local 6`
          <dbl>         <dbl>         <dbl>         <dbl>         <dbl>         <dbl>
1            0           350.         1279.         1544.         2393.         2837.
2          350.            0          1365.         1807.         2605.         3159.
3         1279.         1365.            0           946.         1386.         2433.
4         1544.         1807.          946.            0           918.         1502.
5         2393.         2605.         1386.          918.            0          1483.
6         2837.         3159.         2433.         1502.         1483.            0 

我是 cppRouting 包的作者。计算距离或路径的主要数据是图表,你不提供,你有吗?

我猜你读了一些距离矩阵,但你的输入数据是什么?路网 ?

请阅读 this 了解如何使用 cppRouting 包。

输入数据是一个图表。 图是由边连接的一组顶点(或节点)。 图形通常用于表示像道路这样的网络,其中边是路段,节点是交叉点。如果每条边都有一个权重,描述距离或行进时间,则该图是加权的。

看这个有向图的简单例子,让我们假设所有边的长度相等:

在 R 和 cppRouting 包中,图形必须是描述每条边的数据框:

library(cppRouting)
library(igraph)

graph<-data.frame(from=c(0,1,2,3,4,2),
                  to=c(1,2,3,0,2,4),
                  weight=c(1,1,1,1,1,1))

#visualize 
test<-graph_from_data_frame(graph,directed = TRUE)
plot(test,edge.arrow.size=0.2)

现在,如果您想知道节点 0 和 3 之间的最短路径:

cpp_graph<-makegraph(graph,directed=TRUE)
get_path_pair(cpp_graph,from="0",to="3")

如果你想知道最短距离:

get_distance_pair(cpp_graph,from="0",to="3")

希望对您有所帮助。