Различение линейных и нелинейных ограничений в Pyomo

Как я могу различать линейные и нелинейные ограничения в Pyomo? Допустим, все они были созданы с помощью конструктора ограничений, а не конструктора linear_constraint.


person lymbot    schedule 19.01.2018    source источник


Ответы (1)


Вы всегда можете спросить любое выражение 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 возвращает текущий градус, поэтому фиксированные переменные интерпретируются как константы при вычислении степени.

person jsiirola    schedule 20.01.2018