假设我有以下形式的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)
似乎适用于>=
- 限制。
我的方法是否有潜在的副作用(我目前不知道)?是否有一种更优雅的方式来操纵约束的右手边?
答案 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变量用作上限或下限,它们必须是数字常量。