如何使用TSP封装从R中的旅行商问题获得路径

时间:2019-09-09 01:16:00

标签: r traveling-salesman

假设我有以下成本矩阵,并且我希望从旅行商问题出发,通过最近的插入方法从节点20开始的路径(和总成本)。

ds.ex <- structure(c(0, Inf, Inf, 1.9, 1.7, Inf, 0, 7.3, 7.4, 7.2, Inf, 
7.3, 0, 7.7, 7.8, 1.9, 7.4, 7.7, 0, 9.2, 1.7, 7.2, 7.8, 9.2, 
0), .Dim = c(5L, 5L), .Dimnames = list(c("2", "13", "14", "17", 
"20"), c("2", "13", "14", "17", "20")))

ds.ex
     2  13  14  17  20
2  0.0 Inf Inf 1.9 1.7
13 Inf 0.0 7.3 7.4 7.2
14 Inf 7.3 0.0 7.7 7.8
17 1.9 7.4 7.7 0.0 9.2
20 1.7 7.2 7.8 9.2 0.0

我正在使用TSP软件包来解决:

ds.ex.tsp <- as.TSP(ds.ex)
(a <- solve_TSP(ds.ex.tsp, method = "nearest_insertion", start=5))
object of class ‘TOUR’ 
result of method ‘nearest_insertion’ for 5 cities
tour length: 25.8 

我可以从以下位置获取路径

`attr(a, "names")
[1] "20" "2"  "17" "14" "13"

如果这确实是路径,那么为什么路径20-2-17-13-14不是结果?在访问了节点20、2和17之后,开销较小的节点是13,而不是14。

谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以使用labels.TSP,即

library(TSP)
ds.ex.tsp <- as.TSP(ds.ex)
a <- solve_TSP(ds.ex.tsp, method = "nearest_insertion", start = 5)

labels(a)
#[1] "20" "13" "14" "17" "2"

请注意,在最接近的插入试探法中,您将根据城市与路径中所有城市之间的最小距离将城市添加到该路径中。如果有两个城市具有相同的距离,则会随机选择一个城市。因此solve_TSP在复制时可能返回不同的最佳路径。在您提供的示例中似乎就是这种情况。


样本数据

ds.ex <- structure(c(0, Inf, Inf, 1.9, 1.7, Inf, 0, 7.3, 7.4, 7.2, Inf, 
7.3, 0, 7.7, 7.8, 1.9, 7.4, 7.7, 0, 9.2, 1.7, 7.2, 7.8, 9.2, 
0), .Dim = c(5L, 5L), .Dimnames = list(c("2", "13", "14", "17", 
"20"), c("2", "13", "14", "17", "20")))