:
Моя проблема заключается в следующем: когда я использую некоторые функции Gurobi, например, quicksum (), я всегда получаю предупреждение, подобное этому: «quicksum» может быть неопределенным или определенным в начале импорта: gurobipy. "Следующий код решает правильно TSP.
import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
import networkx as nx
from gurobipy import *
from openpyxl import Workbook
import xlrd
import networkx as nx
print("")
print("TRAVELING SALESMAN PROBLEM")
print("---------------------------------------------------------------------")
print("")
wb = Workbook()
ws = wb.active
book = xlrd.open_workbook('TSP.xlsx') #LECTURA DE PARÁMETROS.
sheet = book.sheet_by_name("C")
C=[[sheet.cell_value(r,c) for c in range(sheet.ncols)] for r in range(sheet.nrows)]
C=np.matrix(C)
print("")
print("MATRIZ DE DISTANCIAS")
print("")
print(C)
def TSP(C):
nodos=range(len(C))
nodos1=range(1,len(C),1) #CONJUNTOS.
model=Model('TSP') #NOMBRE DEL MODELO.
model.ModelSense=GRB.MINIMIZE #SENTIDO DE OPTIMIZACIÓN.
x,u={},{} #VARIABLES - MATRIZ DE ASIGNACIÓN DE RUTAS.
for i in nodos:
for j in nodos:
x[i,j]=model.addVar(vtype=GRB.BINARY,name="x[%s][%s]"%(i,j))
for i in nodos1:
u[i]=model.addVar(vtype=GRB.INTEGER,lb=1.0,ub=len(C)-1,name="u[%s]"%(i))
model.update()
costo=quicksum((C[i,j]*x[i,j] for i in nodos for j in nodos))
model.setObjective(costo) #FUNCIÓN OBJETIVO
model.update()
for j in nodos:
model.addConstr(quicksum(x[i,j] for i in nodos)==1.0,name="R1[%s]"%(j))
#CONJUNTO 1 DE RESTRICCIONES.
for i in nodos:
model.addConstr(quicksum(x[i,j] for j in nodos)==1.0,name="R2[%s]"%(i))
#CONJUNTO 2 DE RESTRICCIONES.
for i in nodos1:
for j in nodos1:
if i!=j:
model.addConstr(u[i]-u[j]+(len(C)-1)*x[i,j]<=len(C)-2,name="R3[%s][%s]"%(i,j))
model.update()
model.__data=x,u
return model
model=TSP(C)
model.optimize()
x,u=model.__data
print("")
print("VALOR OPTIMO TSP= ", model.ObjVal)
edges = [(i,j) for (i,j) in x if x[i,j].X == 1]
model.write('ruteo.lp')
print(u)
print("Arcos utilizados:", edges)
print("")
x_solucion=np.zeros((len(C),len(C)))
for a in range(len(C)):
for b in range(len(C)):
x_solucion[a,b]=x[a,b].x
print(x_solucion)
print("")
Каждый раз, когда я использую quicksum (), я получаю следующее предупреждение:
предупреждение quicksum () Это проблема, которую явсегда, когда я использую решатель Gurobi.Однако я всегда могу правильно вычислять и решать свои модели, но это беспокоит меня, и я думаю, что это не нормально.Есть идеи?.Заранее спасибо за помощь.