R:计算两个顶点之间的单个最短路径
目前,我正在从事一个涉及纽约市出租车数据的项目,在该项目中,我可以在网络中接送一个人 我正在使用一个R:计算两个顶点之间的单个最短路径,r,algorithm,spatial,shortest-path,dijkstra,R,Algorithm,Spatial,Shortest Path,Dijkstra,目前,我正在从事一个涉及纽约市出租车数据的项目,在该项目中,我可以在网络中接送一个人 我正在使用一个ESRIshapefile,我可以使用shp2graph包将其作为igraph对象加载到R中;我需要利用Dijkstra算法(或类似的最短路径算法)来找到两个给定顶点之间的单个最短路径。我原以为igraph包的get.shortest.paths()方法将是我的解决方案,但令我惊讶的是,它计算了从一个顶点到网络中所有其他顶点的所有最短路径 对我来说,这似乎有些过分,因为我在两个指定节点之间只需要一
ESRI
shapefile
,我可以使用shp2graph
包将其作为igraph
对象加载到R中;我需要利用Dijkstra算法(或类似的最短路径算法)来找到两个给定顶点之间的单个最短路径。我原以为igraph
包的get.shortest.paths()
方法将是我的解决方案,但令我惊讶的是,它计算了从一个顶点到网络中所有其他顶点的所有最短路径
对我来说,这似乎有些过分,因为我在两个指定节点之间只需要一条路径。我在网上和igraph
文档中做了一些探索,但我能找到的都是计算从给定顶点到所有其他顶点的许多最短路径的方法
由于从一个顶点计算每一条最短路径,然后从一个庞大的列表中选择一条,计算成本是多么高,因此我正在寻找一种方法来利用图中两个指定顶点之间的Dijkstra算法。在igraph包中是否有这样做的方法,或者如果没有,在R中是否有其他包可以这样做的好方法
编辑:最后,我希望找到一个函数,该函数将接收图形对象和我希望找到的两个顶点之间最短路径的ID,然后返回沿该最短路径的路径/边(或ID)列表。这将有助于我沿着两个顶点之间的最短路径检查每条单独的街道
编辑:作为我当前如何使用该功能的示例:
path在调用get.shortest.path()之前,我发现了问题。对于那些好奇如何阅读ESRI形状文件并在两点之间找到一条最短路径(这是我的难题)的人:
myShapefile我发现了我的问题,它发生在我调用get.shortest.path()之前。对于那些好奇如何阅读ESRI形状文件并在两点之间找到一条最短路径(这是我的难题)的人:
myShapefile在寻求帮助时,您应该包括一个简单的示例输入和所需的输出,用于测试和验证可能的解决方案。您到底向get.shortest.paths()
传递了哪些参数?有一个from=
和to=
参数;我在问一个通用的解决方案,如何将两个顶点ID传递到一个方法中,该方法将返回它们之间的路由列表(我将更新我的帖子来问这个问题)。在shortest.paths()文档中,我看到get.shortest.paths()的用法是:“get.shortest.paths(graph,from,mode=“all”)。可以将“to=”参数附加到此函数中?使用get.shortest.paths(NYCgraph,from=32,to=37)
。如果不存在,您使用的是哪个版本的igraph?函数的“当前”名称是最短路径()
。您完全正确-这正是我所需要的!作为旁注,我意识到在获取igraph对象的过程中,我调用了一个错误的函数:对于那些好奇的人来说,在阅读ESRI shapefile的过程中,您会遇到一个函数nel2igraph;我只是向该对象传递了错误的参数,结果NYCgraph对象与get.shortest.path()不兼容。谢谢不要将你的问题编辑为包含“答案”。只需回答你自己的问题,就像你已经做的那样。这就正确地结束了它,让社区投票决定他们是否同意。在寻求帮助时,你应该包括一个简单的示例输入和所需的输出,可用于测试和验证可能的解决方案。您到底向get.shortest.paths()
传递了哪些参数?有一个from=
和to=
参数;我在问一个通用的解决方案,如何将两个顶点ID传递到一个方法中,该方法将返回它们之间的路由列表(我将更新我的帖子来问这个问题)。在shortest.paths()文档中,我看到get.shortest.paths()的用法是:“get.shortest.paths(graph,from,mode=“all”)。可以将“to=”参数附加到此函数中?使用get.shortest.paths(NYCgraph,from=32,to=37)
。如果不存在,您使用的是哪个版本的igraph?函数的“当前”名称是最短路径()
。您完全正确-这正是我所需要的!作为旁注,我意识到在获取igraph对象的过程中,我调用了一个错误的函数:对于那些好奇的人来说,在阅读ESRI shapefile的过程中,您会遇到一个函数nel2igraph;我只是向该对象传递了错误的参数,结果NYCgraph对象与get.shortest.path()不兼容。谢谢不要将你的问题编辑为包含“答案”。只需回答你自己的问题,就像你已经做的那样。这就结束了,让社区投票决定他们是否同意。
myShapefile <- readOGR(dsn=".", layer="MyShapefileName") # i.e. "MyShapefileName.shp"
shpData <- readshpnw(myShapefile, ELComputed=TRUE)
igraphShpObject <- nel2igraph(shpData[[2]], shpData[[3]], weight=shpData[[4]])
testPath <- get.shortest.paths(igraphShpObject, from=42, to=52) # arbitrary nodes
testPath[1] # print the node IDs to the console