我有简单的距离表(矩阵):
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)
任何人都知道为什么我得到两个不同的结果?
答案 0 :(得分:1)
E
中的ETSP
代表“欧几里德”。此函数将V1
,V2
,V3
解释为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