R中的TSP,错误的游览长度

时间:2018-04-12 21:03:56

标签: r traveling-salesman

我有简单的距离表(矩阵):

datalist <- data.table(V1=c(0, 28635.76, 16496.41), V2=c(28635.76, 0, 22032.14), V3 = c(16496.41, 22032.14, 0))

当我从R包测试TSP算法&#34; TSP&#34;我得到了旅游长度的结果:98559.14。但是当我正在手工增加距离时#34;我的结果是16496.41 + 22032.14 + 28635.76 = 67164.31 = tour_length(tour)。 我的其余代码:

  tspObj <- ETSP(datalist)
  tour <- solve_TSP(tspObj, start = 1, method = "two_opt")
  #tour length
  tour_length(tour)

任何人都知道为什么我得到两个不同的结果?

1 个答案:

答案 0 :(得分:1)

E中的ETSP代表“欧几里德”。此函数将V1V2V3解释为3维欧几里德空间中的3个点,而不是距离矩阵的行(如您所想的那样)。请注意:

> sum(sqrt(sum((V1-V2)^2)) + sqrt(sum((V1-V3)^2)) + sqrt(sum((V2-V3)^2)))
[1] 98559.14

还有另一个名为TSP的构造函数。您不能直接将其提供给数据表,但以下工作原理:

> tspObj <- TSP(as.dist(datalist))
> tour <- solve_TSP(tspObj, start = 1, method = "two_opt")
> tour
object of class ‘TOUR’ 
result of method ‘two_opt’ for 3 cities
tour length: 67164.31