如何从Pyomo中检索约束的值

时间:2018-06-05 15:05:34

标签: pyomo

假设我有一个在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)

有没有办法直接从模型中检索此约束的值?

1 个答案:

答案 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()

您可以通过lowerbodyupper属性获取单个约束的数值。例如:

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) ))