Ich lerne, wie kombinatorische Optimierungsprobleme in Gurobi mit Python lösen. Ich würde gerne wissen, was die beste Möglichkeit ist, eine CSV-Datei zu lesen, um die Daten als Modellparameter zu verwenden. Ich benutze 'genfromtxt', um die CSV-Datei zu lesen, aber ich habe Schwierigkeiten, sie für die Constraint-Konstruktion zu verwenden (Gurobi unterstützt diesen Typ nicht - siehe Fehler).Gurobi in Python: beste Möglichkeit, CSV-Datei zu lesen
Hier mein Code und Fehlermeldung, my_data besteht aus 4 Spalten: Knotenindex, x-Koordinate, y-Koordinate und maximalen Grad.
from gurobipy import *
from numpy import genfromtxt
import math
# Read data from csv file
my_data = genfromtxt('prob25.csv', delimiter=',')
# Number of vertices
n = len(my_data)
# Function to calculate euclidean distancces
dist = {(i,j) :
math.sqrt(sum((my_data[i][k]-my_data[j][k])**2 for k in [1,2]))
for i in range(n) for j in range(i)}
# Create a new model
m = Model("dcstNarula")
# Create variables
vars = m.addVars(dist.keys(), obj=dist, vtype=GRB.BINARY, name='e')
for i,j in vars.keys():
vars[j,i] = vars[i,j] # edge in opposite direction
m.update()
# Add degree-b constraint
m.addConstrs((vars.sum('*',j) <= my_data[:,3]
for i in range(n)), name='degree')
GurobiError: Unsupported type (<type 'numpy.ndarray'>) for LinExpr addition argument
Die ersten zwei Zeilen von Daten
1,19.007,35.75,1
2,4.4447,6.0735,2
Zeigen Sie die ersten beiden Zeilen von '' 'my_data'''. – sascha
1,19.007,35.75,1 2,4,4447,6,0735,2 –
Fügen Sie diese beiden Zeilen im Code-Modus zu Ihrer Frage hinzu. Es ist weniger nützlich mit gebrochenem Format innerhalb eines Kommentars. ** Edit: ** also keine Überschrift, nehme ich an? – sascha