使用约束更新参数

时间:2019-06-22 17:49:34

标签: pyomo

我想定义一个约束,该约束在发生分配时更新参数。约束为follow

其中d是参数,Z是决策变量,定义为:

model.d = Param(model.V, mutable=True)
model.Z = Var(model.Vs, model.Vc2, within = Binary)

我尝试过:

def Cons24_rule(model,i):
    return model.d[i] == sum(model.d[j] * model.Z[i,j] for j in model.Vc2)
model.Cons24 = Constraint(model.Vs , rule = Cons24_rule)

但是我遇到了不可行错误。我如何定义此约束?

Pyomo代码和测试数据可以在here中找到。

谢谢-Soheil

1 个答案:

答案 0 :(得分:1)

您的实例不可行。您的约束条件为:

d[i] = sum {j in V_c2} d[j] * Z[i,j]

针对所有i。这意味着从i发货的数量必须完全等于其d,并且发货的数量必须完全等于目的地的d。但是,例如d[9] = 6,并且没有其他节点j这样的sum {j} d[j] = 6。因此,无法满足此约束条件,即无法将6个单位正好从节点9运出。

我怀疑真正的问题出在约束公式的逻辑上,而不是数据上。我不认为您想假设如果i运送到j,那么它必须运送d[j] all 。要么就是这样,要么就是您不希望i发货的总数等于d[i] 完全