You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言TSP包计算旅行商问题路径长度结果异常求助

问题原因与解决方案

核心问题在于你误用了ETSP()函数:它的作用是处理欧几里得空间中的坐标点,而非预先计算好的距离矩阵。你传入的3×3矩阵被ETSP()当成了3个三维坐标点(每行对应一个点的x/y/z坐标),随后TSP包基于这些坐标重新计算了欧几里得距离,而非使用你提供的距离数据,这才导致最终路径长度和手动计算结果不符。

具体验证

比如,ETSP()会把你的数据解析为三个点:

  • 点1:(0, 28635.76, 16496.41)
  • 点2:(28635.76, 0, 22032.14)
  • 点3:(16496.41, 22032.14, 0)

它会计算这些点之间的欧几里得距离(比如点1到点2的距离是sqrt((0-28635.76)^2 + (28635.76-0)^2 + (16496.41-22032.14)^2)),这个数值远大于你原始的28635.76,最终总路径长度自然会变成98559.14。

正确的代码实现

要使用你预先计算的距离矩阵,应该用TSP()函数来创建TSP对象,而非ETSP():

library(data.table)
library(TSP)

# 你的距离矩阵
datalist <- data.table(V1=c(0, 28635.76, 16496.41), 
                       V2=c(28635.76, 0, 22032.14), 
                       V3 = c(16496.41, 22032.14, 0))

# 转换为矩阵格式(TSP()要求输入为矩阵)
dist_matrix <- as.matrix(datalist)

# 使用TSP()创建对象,而非ETSP()
tspObj <- TSP(dist_matrix)
tour <- solve_TSP(tspObj, start = 1, method = "two_opt")

# 输出路径长度,会和你手动计算的67164.31一致
tour_length(tour)

补充说明

TSP()函数专门用于处理自定义距离矩阵的场景,要求矩阵是对称的、对角线元素为0(你的数据完全符合这个要求),而ETSP()则是为欧几里得空间的坐标点设计的,会自动推导距离。

内容的提问来源于stack exchange,提问作者Adamek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:09:34