Gurobi: Utilizzo addConstrs (), ma l'espressione non è giusto

voti
0

Sono nuovo di Gurobi e Python. Sto cercando di risolvere un problema semplice binario misto, ma ci sono alcuni errori.

Ho definito il problema come segue,

Voglio variabile u [1,1], u [2,1], u [3,1] e u [1,2], u [2,2], u [3,2], la somiglianza alla variabile p. Voglio aggiungere sopra vincoli, ma ci sono alcuni errori che dicono le mie espressioni non è giusto.

u=m.addVars([1, 2, 3], [1, 2], vtype=GRB.BINARY)
p=m.addVars(3,2,lb=0.0)

m.addConstrs(p[i,j]<= 30*u[i,j]
            for i in range(3)
            for j in range(2))
m.addConstrs(p[(i,j)]>=5*u[(i,j)]
            for i in range(3)
            for j in range(2))

L'errore è come questo

line 14, in <module>
    for i in range(3)
  File model.pxi, line 3062, in gurobipy.Model.addConstrs
  File /Users/Documents/pyexercise/HW4Q1.py, line 15, in <genexpr>
    for j in range(2))
KeyError: (0, 0)

Qualcuno mi può aiutare con questo? Grazie!

È pubblicato 10/10/2019 alle 00:54
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

In Python, utilizzando range(n)restituisce un elenco di nnumeri da 0a n-1. Così, le vostre addConstrs()funzioni di scandire le chiavi (0,0), (0,1), (1,0), (1,1), (2,0), e (2,1).

Tuttavia, le uvariabili sono indicizzati dai (1,1), (1,2), (2,1), (2,2), (3,1), e (3,2):

gurobi> u = m.addVars([1, 2, 3], [1, 2], vtype=GRB.BINARY)
gurobi> u.keys()
<gurobi.tuplelist (6 tuples, 2 values each):
 ( 1 , 1 )
 ( 1 , 2 )
 ( 2 , 1 )
 ( 2 , 2 )
 ( 3 , 1 )
 ( 3 , 2 )
>

Riceverete KeyErrorperché gli indici dei vincoli non corrispondono gli indici delle variabili. Per risolvere questo problema, è possibile modificare la costruzione delle uvariabili in base a quella delle pvariabili:

gurobi> u = m.addVars(3, 2, vtype=GRB.BINARY)
gurobi> u.keys()
<gurobi.tuplelist (6 tuples, 2 values each):
 ( 0 , 0 )
 ( 0 , 1 )
 ( 1 , 0 )
 ( 1 , 1 )
 ( 2 , 0 )
 ( 2 , 1 )
>
Risposto il 10/10/2019 a 23:23
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more