Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 8, 2017 02:01:55

NewUser
Зарегистрирован: 2017-12-08
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

invalid syntax

Доброй ночи всем!
Собственно в питоне можно сказать пару часов, пытаюсь решить определенную задачу. Воплощаю оптимизационную модель, но из-за синтаксических ошибок не работает.
Проверил и на каждую строку начиная со строки “m = Model()” ругается из-за синтаксиса.
Если кто может взглянуть мельком, то буду очень признателен!

 from gurobipy import *
from itertools import product
I, J, K = range(5), range(5), range (2)
q = 2
c = [[0, 11, 10, 11, 14],
     [11, 0, 5, 15, 25],
     [10, 5, 0, 11, 22],
     [11, 15, 11, 0, 15],
     [14, 25, 22, 15, 0,]
m = Model()
X=m.addVars(I,J,K, vtype = GRB.BINARY, name= "X")     
Y=m.addVars(I,J,K, vtype= GRB.BINARY, name= "Y")    
U=m.addVars(I,J, vtype = GRB.INTEGER, name = "U")
#1
m.setObjective(sum(c[i][j] * X[i,j,k] for i in I for j in J for k in K), GRB.MINIMIZE)
#2
m.addConstrs(sum(d[i] * Y[i,k] for i in I) <= q for k in K)
#3
for i in I:
    if i >= 1:
        m.addConstrs(sum(Y[i,k] for k in K) == 1)
#4
for i in I:
    if i == 0:
        m.addConstrs(sum(Y[i,k] for k in K) == K)
#5
m.addConstrs(sum(X[i,j,k] for i in I) == Y[j,k] for j in J for k in K)
#6
m.addConstrs(sum(X[i,j,k] for j in J) == Y[i,k] for i in I for k in K )
#7
m.addConstrs(X[i,i,k] == 0 for i in I for k in K)
#8
for i =! j:
    m.addConstrs(U[j,k] >= U[i,k] + 1 - (1 - X[i,j,k]) * I for i in I for j in J for k in K)]
#10
m.addConstrs(U[i,k] >= 0 for i in I for k in K)
m.optimize()
m.printAttr('X')
m.printAttr('Y')
m.printAttr('U')
#m.write("problem.lp")

Офлайн

#2 Дек. 8, 2017 06:00:45

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

invalid syntax

NewUser
1

 c = [[0, 11, 10, 11, 14],
     [11, 0, 5, 15, 25],
     [10, 5, 0, 11, 22],
     [11, 15, 11, 0, 15],
     [14, 25, 22, 15, 0,]
не хватает закрывающей скобки

2
 m.addConstrs(sum(d[i] * Y[i,k] for i in I) <= q for k in K)
откуда взялся d?

3
 for i =! j:
оператора =! в питоне нет

4
 m.addConstrs(U[j,k] >= U[i,k] + 1 - (1 - X[i,j,k]) * I for i in I for j in J for k in K)]
нет открывающей квадратной скобки



Офлайн

#3 Дек. 8, 2017 15:49:38

NewUser
Зарегистрирован: 2017-12-08
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

invalid syntax

FishHook, спасибо!
Исправил и ушли ошибки. Но теперь выдает KeyError: (0, 0) ,ссылаясь на строку:

 m.addConstrs(sum(d[i] * Y[i,k] for i in I) <= q for k in K)
Вроде сначала задаю для K range(2).
Заранее спасибо! огромное!)
 from gurobipy import *
from itertools import product
I, J, K = range(5), range(5), range(2)
q = 2
c = [[0, 11, 10, 11, 14],
     [11, 0, 5, 15, 25],
     [10, 5, 0, 11, 22],
     [11, 15, 11, 0, 15],
     [14, 25, 22, 15, 0,]]
d = [1, 1, 1, 1, 1]
m = Model()
X=m.addVars(I,J,K, vtype = GRB.BINARY, name= "X")     
Y=m.addVars(I,J,K, vtype= GRB.BINARY, name= "Y")    
U=m.addVars(I,J, vtype = GRB.INTEGER, name = "U")
#1
m.setObjective(sum(c[i][j] * X[i,j,k] for i in I for j in J for k in K), GRB.MINIMIZE)
#2
m.addConstrs(sum(d[i] * Y[i,k] for i in I) <= q for k in K)
#3
for i in I:
    if i >= 1:
        m.addConstrs(sum(Y[i,k] for k in K) == 1)
#4
for i in I:
    if i == 0:
        m.addConstrs(sum(Y[i,k] for k in K) == K)
#5
m.addConstrs(sum(X[i,j,k] for i in I) == Y[j,k] for j in J for k in K)
#6
m.addConstrs(sum(X[i,j,k] for j in J) == Y[i,k] for i in I for k in K )
#7
m.addConstrs(X[i,i,k] == 0 for i in I for k in K)
#8
for i in I != j in J:
    m.addConstrs(U[j,k] >= U[i,k] + 1 - (1 - X[i,j,k]) * I for k in K)
#10
m.addConstrs(U[i,k] >= 0 for i in I for k in K)
m.optimize()
m.printAttr('X')
m.printAttr('Y')
m.printAttr('U')
#m.write("problem.lp")
Может кто тыкнуть в ошибку теперь?

Офлайн

#4 Дек. 8, 2017 17:43:12

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

invalid syntax

NewUser
m.addConstrs(sum(X for i in I) == Y for j in J for k in K)
Никогда не пишите таких тупых длинных однострочников. Вы же сами не можете понять, чего понаписали. Ну замените вы на циклы. Обычные простые for и while и все станетр ясно.



Офлайн

#5 Дек. 8, 2017 17:54:28

NewUser
Зарегистрирован: 2017-12-08
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

invalid syntax

FishHook
Я заменил на:
 for k in K:
    m.addConstrs(sum(d[i] * Y[i,k] for i in I) <= q)
И “for k in K” не выделяет как ошибку более. Но “for i in I” не могу вытащить перед m.addConstrs и после sum не работает. Куда этот цикл деть следует?
Если в виде двух циклов делаю,следующим образом, то выдает ошибку “KeyError: (0, 0)”:
 for k in K:
    for i in I:
        m.addConstrs(sum(d[i] * Y[i,k]) <= q)
Спасибо заранее!

Отредактировано NewUser (Дек. 8, 2017 18:28:28)

Офлайн

#6 Дек. 8, 2017 22:30:36

NewUser
Зарегистрирован: 2017-12-08
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

invalid syntax

Может кто на пальцах объяснить, откуда берется “KeyError: (0, 0) ” в начале кода в m.addConstrs ?

 from gurobipy import *
m = Model()
I, J, K = range(5), range(5), range(2)
q = 2
c = [[0, 11, 10, 11, 14],
     [11, 0, 5, 15, 25],
     [10, 5, 0, 11, 22],
     [11, 15, 11, 0, 15],
     [14, 25, 22, 15, 0,]]
d = [1, 1, 1, 1, 1]
x = m.addVars(I, J, K, name = "x", vtype = GRB.BINARY)     
y = m.addVars(I, J, K, name = "y", vtype=GRB.BINARY)    
u = m.addVars(I, J,  name = "u", vtype=GRB.INTEGER)
#1
m.setObjective( sum(c[i][j] * x[i,j,k] for i in I for j in J for k in K), GRB.MINIMIZE )
#2
for k in K:
    for i in I:
        m.addConstrs( sum(d[i] * y[i, k] ) <= q )
....

Офлайн

#7 Дек. 9, 2017 01:22:03

NewUser
Зарегистрирован: 2017-12-08
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

invalid syntax

Если вдруг найдется еще добрая душа, как FishHook, то могу сказать, что пришел к следующему:

 from gurobipy import *
m = Model()
I, J, K = range(5), range(1, 5), range(2)
q = 2
c = [[0, 11, 10, 11, 14],
     [11, 0, 5, 15, 25],
     [10, 5, 0, 11, 22],
     [11, 15, 11, 0, 15],
     [14, 25, 22, 15, 0,]]
d = [1, 1, 1, 1, 1]
x = m.addVars(I, I, K, name = "x", vtype = GRB.BINARY)     
y = m.addVars(I, K, name = "y", vtype=GRB.BINARY)    
u = m.addVars(I, K, name = "u", vtype=GRB.INTEGER)
#1
m.setObjective( sum(c[i][j] * x[i,j,k] for i in I for j in I for k in K), GRB.MINIMIZE )
#2
m.addConstrs( sum(d[i] * y[i,k] for i in J) <= q for k in K)
#3
m.addConstrs(sum(y[i,k] for k in K) == 1 for i in J)
#4
m.addConstrs(sum(y[i,k] for k in K) == 2 for i in [0])
#5
m.addConstrs(sum(x[i,j,k] for i in I) == y[j,k] for j in I for k in K)
#6
m.addConstrs(sum(x[i,j,k] for j in I) == y[i,k] for i in I for k in K)
#7
m.addConstrs(x[i,i,k] == 0 for i in I for k in K)
#8
for i in I: 
  for j in J:
    if i != j:
      m.addConstrs(u[j,k] >= u[i,k] + 1 - (1 - x[i,j,k]) * 4 for k in K)
#10
m.addConstrs(u[i,k] >= 0 for i in I for k in K)
m.optimize()
m.printAttr("x")
m.printAttr("y")
m.printAttr("u")
#m.write("problem.lp")
Единственное только, выдает AttributeError: ‘gurobipy.Model’ object has no attribute ‘y’ в конце. Но решение выводит перед этим.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version