【问题标题】:How to obtain the path from a traveling salesman problem in R using TSP package如何使用 TSP 包从 R 中的旅行商问题中获取路径
【发布时间】:2019-09-09 01:16:00
【问题描述】:

假设我有以下成本矩阵,并且我希望从通过最近插入方法的旅行推销员问题的角度来看从节点 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。

提前致谢!

【问题讨论】:

    标签: r traveling-salesman


    【解决方案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")))
    

    【讨论】:

    • 感谢您的回答!但是我只是复制了您的代码并运行它,它给了我与您不同的答案。请帮我查一下好吗?
    • @GuilhermeParreira 你是对的。事实上,如果你不断重复那段代码,你会从solve_TSP 得到不同的答案。我做了修改,请看一下。
    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 2019-11-16
    • 1970-01-01
    • 2010-10-26
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    相关资源
    最近更新 更多