【问题标题】:Set an upper bound of a pyomo constraint设置 pyomo 约束的上限
【发布时间】:2018-07-22 16:56:00
【问题描述】:

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

似乎适用于&lt;=-restrictions 和那个

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

似乎适用于&gt;=-restrictions。

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

【问题讨论】:

    标签: python mathematical-optimization pyomo


    【解决方案1】:

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

    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)
    

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

    m.p_ub = value(m.p_ub)-c
    

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

    【讨论】:

      猜你喜欢
      • 2021-09-12
      • 2018-05-29
      • 2017-12-31
      • 2017-08-24
      • 2020-09-07
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 2018-01-18
      相关资源
      最近更新 更多