Форум сайта python.su
Доброй ночи всем!
Собственно в питоне можно сказать пару часов, пытаюсь решить определенную задачу. Воплощаю оптимизационную модель, но из-за синтаксических ошибок не работает.
Проверил и на каждую строку начиная со строки “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")
Офлайн
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,]
m.addConstrs(sum(d[i] * Y[i,k] for i in I) <= q for k in K)
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)]
Офлайн
FishHook, спасибо!
Исправил и ушли ошибки. Но теперь выдает KeyError: (0, 0) ,ссылаясь на строку:
m.addConstrs(sum(d[i] * Y[i,k] for i in I) <= q for k in K)
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")
Офлайн
NewUserНикогда не пишите таких тупых длинных однострочников. Вы же сами не можете понять, чего понаписали. Ну замените вы на циклы. Обычные простые for и while и все станетр ясно.
m.addConstrs(sum(X for i in I) == Y for j in J for k in K)
Офлайн
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(d[i] * Y[i,k]) <= q)
Отредактировано NewUser (Дек. 8, 2017 18:28:28)
Офлайн
Может кто на пальцах объяснить, откуда берется “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 ) ....
Офлайн
Если вдруг найдется еще добрая душа, как 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")
Офлайн