设置pyomo约束的上限

时间:2018-02-12 13:40:43

标签: python mathematical-optimization pyomo

假设我有以下形式的pyomo约束con1

    from pyomo.environ import *
    model = ConcreteModel()
    model.x_1 = Var()
    model.x_2 = Var()
    model.con1 = Constraint(expr=-exp(model.x_1) -  model.x_2 <= 0)

我想操纵model.c1的上限(通常是右侧),即减去一些值c

我可以使用.upper().lower())方法查询上限(下限),我发现

    model.con1.set_value(model.con1.body <= model.con1.upper()-c)

似乎适用于<= - 限制和

    model.con1.set_value(model.con1.body >= model.con1.lower()-c)

似乎适用于>= - 限制。

我的方法是否有潜在的副作用(我目前不知道)?是否有一种更优雅的方式来操纵约束的右手边?

1 个答案:

答案 0 :(得分:1)

另一种方法是使用可变参数:

numpy

然后,如果要更改上限的值,可以执行以下操作:

from pyomo.environ import *
m = ConcreteModel()
m.p_ub = Param(initialize=10, mutable=True)
m.x1 = Var()
m.con1 = Constraint(expr=m.x1 <= m.p_ub)

请记住,您不能将Pyomo变量用作上限或下限,它们必须是数字常量。