区分Pyomo中的线性和非线性约束

时间:2018-01-19 15:25:09

标签: pyomo

如何区分Pyomo中的线性和非线性约束?让我们说它们都是用约束构造函数构造的,而不是用linear_constraint构造函数构建的。

1 个答案:

答案 0 :(得分:3)

你可以随时询问任何Pyomo表达式的多项式度数:

>>> from pyomo.environ import *
>>> m = ConcreteModel()
>>> m.x = Var()
>>> m.y = Var()
>>> m.z = Var()
>>> m.c = Constraint(expr=m.x**m.y + m.x*m.z + m.x >= 0)
>>> m.c.body.polynomial_degree()
None
>>> m.y.fix(3)
>>> m.c.body.polynomial_degree()
3
>>> m.y.fix(1)
>>> m.c.body.polynomial_degree()
2
>>> m.x.fix(1)
>>> m.c.body.polynomial_degree()
1
>>> m.z.fix(0)
>>> m.c.body.polynomial_degree()
0

常量表达式为0度,线性表达式为1度。

请注意polynomial_degree会返回当前度,因此在计算度时,固定变量会被解释为常量。