[Pyomo]如何通过循环生成约束

[Pyomo]如何通过循环生成约束,pyomo,Pyomo,全部 我想创建一组约束,如下所示: import pyomo.environ as pyo model = pyo.ConcreteModel() Ngen = 5 Pmax = [40, 170, 520, 200, 100] model.Ngen = pyo.Set(dimen=Ngen) model.Pg = pyo.Var(model.Ngen) def Co1(model): return ((model.Pg[ii] for ii in model.Ngen) <=

全部

我想创建一组约束,如下所示:

import pyomo.environ as pyo

model = pyo.ConcreteModel()
Ngen = 5
Pmax = [40, 170, 520, 200, 100]
model.Ngen = pyo.Set(dimen=Ngen)
model.Pg = pyo.Var(model.Ngen)

def Co1(model):
    return ((model.Pg[ii] for ii in model.Ngen) <= (Pmax[jj]  for jj in range(Ngen)))

model.Co1 = pyo.Constraint(rule=Co1)

Pg[0]线索在于,约束是在一个集合上定义的。Pyomo允许您将
args
传递给定义该约束集的
Constraint
构造函数

因此,您的最后一行应该如下所示:

model.Co1=pyo.Constraint(model.Ngen,rule=Co1)
第二个问题是约束表达式本身。既然这是针对
集合定义的,那么您只需要用给定的索引(比如
i
)来表示约束,因为
规则
还需要与
约束
的每个
集合
的每个索引相关的参数:

def Co1(i型):
返回模型.Pg[i]