我正在使用一个带有gurobi的python IDE来为一个任务建模和解决问题。这个问题,虽然没有说明,但似乎是一个OVRP(开放式车辆路由问题)(具有一些额外的约束)。我现在拥有的代码是:
from itertools import combinations
import gurobipy as gp
from gurobipy import GRB
def find_length(list):
length = 0
for i in range(len(list)):
length += distances[list[i][0]][list[i][1]]
如何在python中解决旅行商问题?我没有找到任何库,应该有一种方法使用scipy函数进行优化或其他库。
我的hacky-extremelly lazy-pythonic暴力解决方案是:
tsp_solution = min( (sum( Dist[i] for i in izip(per, per[1:])), n, per) for n, per in enumerate(i for i in permutations(xrange(Dist.shape[0]), Dist.shape[0])) )[2]
其中Dist (numpy.array)是距离矩阵。如果Dist太大,这将永远花费时
我有一段代码,它接受n输入,并计算它们之间的最短距离,而不需要重复访问同一个点两次。我认为这和哈密顿路径问题是一样的。
我的代码接受n地址作为输入,遍历所有可能的组合而不重复。现在我有了“暴力”方法,每个循环获取开始/结束位置,计算距离,排除重复的位置,然后添加只访问我的Df的每个点的路径。由于有5个位置,因此第5个嵌套的for循环块将序列和距离写入DF。
带有值的DF:
Index Type start_point
0 Start (38.9028613352942, -121.339977998194)
1 A (38.8882610961
下面是一个可重现的示例,展示了所需输出的样子。
# Example
library(tidyverse)
df <- tribble(
~x,~y,
4,6,
4.5,5.5,
5,5,
5.4,4.5,
5.6,3.8,
5.7,3,
5.4,2.5,
5,2,
4.8,3)
# arbitrarily scaling because ordering needs to handle different x and y scales
df <- df %>% mutate(y = y*100)
# human eye draws th