[英]Why am I getting this openopt index error?
一,錯誤:
Traceback (most recent call last):
File "tsp_solver.py", line 57, in <module>
solvetTSP(inputData)
NameError: name 'solvetTSP' is not defined
new-host:tsp Jonathan$ python tsp_solver.py data/tsp_51_1
Traceback (most recent call last):
File "tsp_solver.py", line 57, in <module>
solveTSP(inputData)
File "tsp_solver.py", line 36, in solveTSP
r = p.solve('sa')
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site- packages/openopt-0.506-py2.7.egg/openopt/kernel/TSP.py", line 150, in solve
EdgesCoords.append((node, Out_nodes[i]))
IndexError: index 1 is out of bounds for axis 0 with size 1
我真的不知道為什么我得到這個錯誤。 我這里有一個非常基本的OpenOpt TSP求解程序實例,它完全不起作用。 我正在使用networkx繪制圖形,並僅以權重=距離逐邊添加。 當我將TSP實例傳遞給求解器時,會發生錯誤,但我顯然不知道為什么。 這是我的代碼,任何幫助將不勝感激。
from openopt import *
import networkx as nx
import math
def length(point1, point2):
return math.sqrt((point1[0] - point2[0])**2 + (point1[1] - point2[1])**2)
def solveTSP(inputData):
inputData = inputData.split('\n')
inputData.pop(len(inputData) - 1)
N = int(inputData.pop(0))
points = []
for i in inputData:
point = i.split(" ")
point = [float(x) for x in point]
point = tuple(point)
points.append(point)
G = nx.Graph()
prev_point = None
for cur_point in points:
assert(len(cur_point) == 2)
if prev_point != None:
a = length(cur_point, prev_point)
G.add_edge(cur_point, prev_point, weight = a)
else:
G.add_node(cur_point)
prev_point = cur_point
p = TSP(G, objective = 'weight', start = 0)
r = p.solve('sa')
r.nodes.pop(len(r.nodes)-1)
distance = r.ff
path = r.nodes
print distance
print path
import sys
if __name__ == '__main__':
if len(sys.argv) > 1:
fileLocation = sys.argv[1].strip()
inputDataFile = open(fileLocation, 'r')
inputData = ''.join(inputDataFile.readlines())
inputDataFile.close()
solveTSP(inputData)
您的圖具有n個節點和n-1條邊,而對於TSP圖則必須至少具有n條邊。 我提出的解決方案具有從最后一點到起點的更多優勢:
points = ((1, 2), (3, 4), (5, 6), (9, 10))
G = nx.Graph()
prev_point = None
for i, cur_point in enumerate(points):
assert(len(cur_point) == 2)
if i != 0:
a = length(cur_point, prev_point)
G.add_edge(i, i-1, weight = a)
prev_point = cur_point
G.add_edge(0, len(points)-1, weight = length(points[0], points[-1]))
p = TSP(G, objective = 'weight', start = 0)
r = p.solve('sa')
r.nodes.pop(len(r.nodes)-1)
distance = r.ff
path = r.nodes
print distance # 22.627416998
print path # [0, 3, 2, 1]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.