R 设定起点和终点的旅行商(TSP)

R 设定起点和终点的旅行商(TSP),r,nearest-neighbor,traveling-salesman,R,Nearest Neighbor,Traveling Salesman,我正在使用R中的TSP包处理一个旅行推销员问题,但试图实现一个预定的起点和终点 该软件包显然允许设置旅程的起点,如下所述: 想知道是否有人知道设定终点的方法。我理解TSP本质上是开放式的,因此不可能预先设置端点。在这种情况下,我对另一种最近邻方法持开放态度,这种方法会产生类似的结果(通过设置起点和终点的多元相似性/距离排序序列) 下面是一个简单的例子: dat <- data.frame(X=sample(0:100,n)/100,Y=sample(0:100,n)/100,Z=samp

我正在使用R中的TSP包处理一个旅行推销员问题,但试图实现一个预定的起点和终点

该软件包显然允许设置旅程的起点,如下所述:

想知道是否有人知道设定终点的方法。我理解TSP本质上是开放式的,因此不可能预先设置端点。在这种情况下,我对另一种最近邻方法持开放态度,这种方法会产生类似的结果(通过设置起点和终点的多元相似性/距离排序序列)

下面是一个简单的例子:

dat <- data.frame(X=sample(0:100,n)/100,Y=sample(0:100,n)/100,Z=sample(0:100,n)/100)
dat$SUM <- rowSums(dat)

startPoint <- which.min(dat$SUM) # Lowest sum
endPoint   <- which.max(dat$SUM) # Highest sum

tsp <- solve_TSP(TSP(ddat), method="nearest_insertion", start=startPoint)

tsp[1]==startPoint
> TRUE

tsp[n]==endPoint
> FALSE

dat添加从结束节点到开始节点的边,成本为0。将其他节点的边添加到起始节点,成本非常高。然后运行通常的TSP(在开始节点开始和结束)。这应该相当于您试图解决的问题

while(tsp[1]!=startPoint | tsp[n]!=endPoint){
  tsp <- solve_TSP(TSP(dist(dat[c("X","Y","Z")])), method="two_opt")
}

tsp[n]==endPoint
> TRUE