我想这样做:
但是我不知道怎么做,这就是我尝试过的:
def R2(model, da, gr, cu):
return sum(sum(model.Dap[asi, pe] for asi in model.A[asi, gr, cu]) for pe in model.Pd[pe, da]) <= 1
model.R2 = Constraint(model.DA, model.GR, model.CU, rule=R2)
答案 0 :(得分:0)
我不是100%理解您的数学公式。
根据编写约束的方式,您似乎有多个索引集(即,它们本身在其他集上建立索引的集),尽管有时是必要的,但这通常是表示该公式有点笨拙的征兆。
如果您要表达的是一个约束系统,即DA
,GR
,CU
的每个元素以及集合Pd
和A
在DA
,GR
,CU
上建立了索引:
那你应该写
def R2(model, d, g, c):
return sum(sum(model.Dap[p] for a in model.A[g, c])
for p in model.Pd[d]) <= 1
model.R2 = Constraint(model.DA, model.GR, model.CU, rule=R2)
否则,您应该尝试使表述更加清晰。