假设我有一个在abstractmodel中以下列方式定义的约束:
def flow_constraint(model, t, b):
flows = sum(
sum( (model.Factor[area_from, t, b] - model.Factor[area_to, t, b])
* model.flow[area_from, area_to, t] for (area_to) in get_border(area_from))
for area_from in model.Areas)
return flows <= model.RAM[t, b]
model.flow_constraint = Constraint(model.BranchesIndex, rule = flow_constraint)
有没有办法直接从模型中检索此约束的值?
答案 0 :(得分:0)
约束值仅在具体实例的上下文中有意义。对于抽象模型,约束已经声明但不是已定义。也就是说,容器(如Constraint)已声明存在,但它们是空的。一旦你有了一个具体的实例(在Abstract模型上调用create_instance()
之后或者直接创建一个ConcreteModel),有几个选项。
您的约束实际上是一组约束(由model.BranchesIndex
索引)。您可以显示索引约束中所有约束的值:
# (assuming m is a concrete instance from create_instance(), or a ConcreteModel)
m.flow_constraint.display()
您可以通过lower
,body
和upper
属性获取单个约束的数值。例如:
print("%s <= %s <= %s" % (
value(m.flow_constraint[t,b].lower),
value(m.flow_constraint[t,b].body),
value(m.flow_constraint[t,b].upper) ))