其中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
答案 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]
完全。