Как я могу различать линейные и нелинейные ограничения в Pyomo? Допустим, все они были созданы с помощью конструктора ограничений, а не конструктора linear_constraint.
Различение линейных и нелинейных ограничений в Pyomo
Ответы (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