Gurobi: Korzystanie addConstrs (), ale ekspresja nie jest w porządku

głosy
0

Jestem nowy Gurobi i Python. Próbuję rozwiązać prostego zagadnienia mieszanego binarnego, ale istnieją pewne błędy.

I zdefiniowany problem w następujący sposób:

I chce zmienna U [1,1] U [2,1] U [3,1], a u [1,2] U [2,2] U [3,2] podobieństwa do zmiennego s. Chcę dodać powyżej ograniczeń, ale istnieją pewne błędy mówiąc moje wyrażenia nie jest w porządku.

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))

Błąd jest tak

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)

Czy ktoś może mi pomóc z tym? Dzięki!

Utwórz 10/10/2019 o 00:54
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

W Pythonie, używając range(n)zwraca listę nnumerów od 0do n-1. Tak więc, twoje addConstrs()funkcje iteracyjne nad klawiszami (0,0), (0,1), (1,0), (1,1), (2,0), i (2,1).

Jednak uzmienne są indeksowane (1,1), (1,2), (2,1), (2,2), (3,1), i (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 )
>

Komunikat o błędzie KeyError, ponieważ indeksy ograniczeń nie pasują indeksów zmiennych. Aby rozwiązać ten problem, można zmienić konstrukcję uzmiennych na zgodny ze pzmiennych:

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 )
>
Odpowiedział 10/10/2019 o 23:23
źródło użytkownik

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