【问题标题】:Get coefficients of a linear pyomo constraint获取线性 pyomo 约束的系数
【发布时间】:2018-02-12 15:17:50
【问题描述】:

我想获得一个pyomo模型m的线性约束c的系数。

例如,对于

    m= ConcreteModel()
    m.x_1 = Var()
    m.x_2 = Var()
    m.x_3 = Var(within = Integers)
    m.x_4 = Var(within = Integers)
    m.c= Constraint(expr=2*m.x_1 + 5*m.x_2 + m.x_4 <= 2)

我想得到数组c_coef = [2,5,0,1]

this question 的答案解释了如何获取线性约束中出现的所有变量,我可以轻松地使用它来为约束中不出现的变量创建零系数。但是,我正在努力解决非零系数。我目前的方法使用 private 属性_coef,即c_nzcoef = m.c.body._coef,我可能不应该使用它。

获得非零系数的正确方法是什么?

【问题讨论】:

    标签: python mathematical-optimization pyomo


    【解决方案1】:

    获取线性表达式系数的最简单方法是使用“Canonical Representation”数据结构:

    from pyomo.repn import generate_canonical_repn
    # verify that the expression is linear
    if m.c.body.polynominal_degree() == 1:
        repn = generate_canonical_repn(m.c.body)
        for i, coefficient in enumerate(repn.linear or []):
            var = repn.variables[i]
    

    这应该适用于 Pyomo 4.0 到至少 5.3 的任何版本。

    【讨论】:

    • Pyomo 的较新版本怎么样(我想使用似乎在较新的 pyomo 版本中可用的数值导数)?当我更新时,我似乎也必须替换identify variablesclone_expression。如果这太多了,无法添加到您的帖子中,我还可以发布一个单独的问题。
    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2013-09-05
    • 2021-09-12
    • 2018-07-22
    相关资源
    最近更新 更多