Некоторые функции Gurobi-python не распознаются правильно - PullRequest
0 голосов
/ 01 октября 2018

:

Моя проблема заключается в следующем: когда я использую некоторые функции 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.Однако я всегда могу правильно вычислять и решать свои модели, но это беспокоит меня, и я думаю, что это не нормально.Есть идеи?.Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 01 октября 2018

Похоже, это предупреждает вас, что это исходит из заявления from xxx import *, которое обычно является плохой практикой.Попробуйте импортировать функции, которые вы используете явно, и я думаю, что это должно уйти.

from gurobipy import quicksum
...