Python 2.7 在Python中读取TSP文件

Python 2.7 在Python中读取TSP文件,python-2.7,traveling-salesman,Python 2.7,Traveling Salesman,我需要弄清楚如何读入文件名“berlin52.tsp”的数据 这是我正在使用的格式 NAME: berlin52 TYPE: TSP COMMENT: 52 locations in Berlin (Groetschel) DIMENSION : 52 EDGE_WEIGHT_TYPE : EUC_2D NODE_COORD_SECTION 1 565.0 575.0 2 25.0 185.0 3 345.0 750.0 4 945.0 685.0 5 845.0 655.0 6 880.0 6

我需要弄清楚如何读入文件名“berlin52.tsp”的数据

这是我正在使用的格式

NAME: berlin52
TYPE: TSP
COMMENT: 52 locations in Berlin (Groetschel)
DIMENSION : 52
EDGE_WEIGHT_TYPE : EUC_2D
NODE_COORD_SECTION
1 565.0 575.0
2 25.0 185.0
3 345.0 750.0
4 945.0 685.0
5 845.0 655.0
6 880.0 660.0
7 25.0 230.0
8 525.0 1000.0
9 580.0 1175.0
10 650.0 1130.0
这是我目前的代码

# Open input file
infile = open('berlin52.tsp', 'r')

# Read instance header
Name = infile.readline().strip().split()[1] # NAME
FileType = infile.readline().strip().split()[1] # TYPE
Comment = infile.readline().strip().split()[1] # COMMENT
Dimension = infile.readline().strip().split()[1] # DIMENSION
EdgeWeightType = infile.readline().strip().split()[1] # EDGE_WEIGHT_TYPE
infile.readline()

# Read node list
nodelist = []
N = int(intDimension)
for i in range(0, int(intDimension)):
    x,y = infile.readline().strip().split()[1:]
    nodelist.append([int(x), int(y)])

# Close input file
infile.close()
代码应读入文件,输出值为“1、2、3…”或更多的巡更列表,同时存储x和y值以计算距离。它至少可以收集标题。创建节点列表时会出现问题

这就是我犯的错误

ValueError: invalid literal for int() with base 10: '565.0'

我在这里做错了什么?

您正在将字符串“565.0”输入
节点列表.append([int(x),int(y)])
。 它告诉你它不喜欢那样,因为那个字符串不是整数。末尾的.0使其成为浮点

因此,如果您将其更改为
nodelist.append([float(x),float(y)])
,作为一种可能的解决方案,那么您将看到您的问题消失了


或者,您可以尝试从字符串输入中删除或分离“.0”。

这是一个TSPLIB格式的文件。要在python中加载它,请查看python包
tsplib95
,可通过或在上获得

文件可在


您可以将TSPLIB文件转换为图形,并从中检索必要的信息。

上面的代码有两个问题。我已经运行了代码,并在下面的行中发现了以下问题:

Dimension = infile.readline().strip().split()[1] 
这条线应该是这样的

`Dimension = infile.readline().strip().split()[2]`
它不是1,而是2,因为对于1
Dimension=:
和2
Dimension=52
。 两者都是字符串类型

第二个问题是线路

N = int(intDimension)
会的

 N = int(Dimension)
最后是排队

for i in range(0, int(intDimension)):
只要简单地使用

for i in range(0, N):
我想现在一切都会好起来的。

谢谢你,伙计!将int()更改为float()修复了错误消息。