:
我的问题如下:当我使用某些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() warning
这是我使用求解器Gurobi时经常遇到的问题。但是我总是可以正确地计算和求解模型,但是这困扰着我,我认为这是不正常的。有任何想法吗?。在此先感谢您的帮助。
最佳答案
似乎在警告您这来自from xxx import *
语句,这通常是不好的做法。尝试导入您显式使用的功能,我认为这应该消失。
from gurobipy import quicksum
关于python - 某些Gurobi-python函数无法正确识别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52597614/