如何获得在几个地点之间旅行的最长时间总和?

时间:2015-10-26 04:00:13

标签: r dataframe

我有一个矩阵,其中包含从每个位置前往另一个位置的时间

library(geosphere)
lat<-c(17.48625,17.49412,17.51925,17.49359,17.49284,17.47077)
long<-c(78.38951,78.39643,78.37823,78.40079,78.40686,78.35874)
xy = data.frame(x=long,y=lat)
dmat = outer(1:nrow(xy), 1:nrow(xy), function(i,j) distHaversine(xy[i,],xy[j,]))
tmat = dmat/(333.33)  #333.33 is speed in meters/minute. time will be in minutes

假设我给出一个位置矢量说c(point1,point3,point4)(这里的点代表tmat的rownumbers或列名称),我怎样才能获得连接这些点的任何路线所需的最长时间,t1 + T2 + T3

1 个答案:

答案 0 :(得分:2)

假设你想从第1点到第4点旅行到第3点:

points <- c(1,4,3)

现在,您要考虑这些点的所有排列。获得它们的一种方法是使用gtools::permutations

library(gtools)
itineraries <- permutations(length(points), length(points), points)

对于给定的行程,您可以使用此函数计算每个连续两个点之间的时间并对它们求和:

itinerary.time <- function(itinerary) {
  sum(sapply(2:length(itinerary), function(i) 
    tmat[itinerary[i-1], itinerary[i]]))
}

然后简单地在行中应用函数并占用最多的时间:

max(apply(itineraries, 1, itinerary.time))

这扩展到任意数量的点。