首页 > 解决方案 > 我可以在 Gurobi 中使用带有最小/最大约束的指标约束吗?

问题描述

我有以下 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))

我正在尝试使用具有最小/最大约束的指标约束来编写约束,如下所示:

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

我做错了什么还是不能这样做?

任何帮助将不胜感激

标签: pythongurobi

解决方案


推荐阅读