获取线性 pyomo 约束的系数

2024-05-06

我想获得线性约束的系数cpyomo 模型的m.

例如,对于

    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].

答案是这个问题 https://stackoverflow.com/questions/48538945/access-all-variables-occurring-in-a-pyomo-constraint解释了如何获取线性约束中出现的所有变量,我可以轻松地使用它来为约束中未出现的变量创建零系数。然而,我正在与非零系数作斗争。我目前的方法使用private属性_coef, 那是c_nzcoef = m.c.body._coef我可能不应该使用它。

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


获取线性表达式系数的最简单方法是利用“规范表示”数据结构:

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]

这对于从 4.0 到至少 5.3 的任何版本的 Pyomo 都有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取线性 pyomo 约束的系数 的相关文章

随机推荐