【问题标题】:TSP in R, wrong tour lengthR中的TSP,错误的游览长度
【发布时间】:2018-09-23 03:42:06
【问题描述】:

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

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”测试 TSP 算法时,我得到了游览长度的结果:98559.14。但是当我“手动”添加距离时,我的结果是 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)

有人知道为什么我会得到两个不同的结果吗?

【问题讨论】:

    标签: r traveling-salesman


    【解决方案1】:

    ETSP 中的E 代表“欧几里得”。此函数将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 
    

    【讨论】:

    • TSP 需要对称的 martix,或者在 dist.但仍然像 ETSP 一样给出结果。
    • 为什么使用data.table()而不是rbind()cbind()直接创建对称矩阵?它显然是通过计算成对距离将您的数据表强制转换为dist 对象。也许用你的数据试验dist()as.dist(),直到你得到你想要的。
    • @Adamek 我下载了这个包并且能够让它按预期工作,如上面的编辑所示
    猜你喜欢
    • 2018-12-27
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    相关资源
    最近更新 更多