Могу ли я использовать индикатор Constraint с Min / Max Constraint в Gurobi? - PullRequest
0 голосов
/ 25 января 2020

У меня есть следующая модель для Gurobi:

m = Model()
x = {}
    for k in range(K):
        for i in range(V):
            for j in range(V):
                if i != j:
                    x[k,i,j] = m.addVar(vtype=GRB.BINARY, name="x(%s,%s,%s)"%(k,i,j))
a = {}
    for k in range(K):
        for i in range(V):
            a[k,i] = m.addVar(ub=25, vtype= GRB.INTEGER, name= "a(%s,%s)"%(k,i))

, и я пытаюсь написать ограничение, используя индикатор Constraint с Min / Max Constraint, например:

m.addConstrs((x[k,i,j] == 1) >> (a[k,j] == max_((a[k,i] + 5), 15)) for k in range(K) for i in range(V) for j in range(1,V) if i!=j)

но я получаю эту ошибку:

  File "model.pxi", line 3070, in gurobipy.Model.addConstrs
  File "model.pxi", line 2951, in gurobipy.Model.addConstr
  File "model.pxi", line 3592, in gurobipy.Model.addGenConstrIndicator
  File "linexpr.pxi", line 461, in gurobipy.LinExpr.__sub__
TypeError: unsupported operand type(s) for *: 'int' and 'GenExpr'

я также пробовал другие варианты, чтобы написать это ограничение, например:

for k in range(K):
        for i in range(V):
            for j in range(1,V):
                if i!=j:
                    m.addConstr((x[k,i,j] == 1) >> ((a[k,j]) == max_((a[k,i] + 5), 15), "tww(%s)"%(i))
          #or
                    m.addGenConstrIndicator(x[k,i,j], True, a[k,j], GRB.EQUAL, max_((a[k,i] + 5), 15))

, но в итоге получаю ту же ошибку, что и раньше или этот:

m.addGenConstrIndicator(x[k,i,j], True, a[k,j], GRB.EQUAL, max_((a[k,i] + 5), 15))
  File "model.pxi", line 3588, in gurobipy.Model.addGenConstrIndicator
gurobipy.GurobiError: Invalid rhs argument for general constraint of indicator type

что-то не так, что я делаю, или это просто невозможно сделать таким образом?

любая помощь будет оценена

...