Как получить все переменные в ограничении в Pyomo? - PullRequest
0 голосов
/ 28 марта 2020

Мой вопрос прост. Учитывая ограничение Pyomo, как я могу легко извлечь переменные, которые появляются в ограничении?

Этот вопрос уже задавался несколько раз. Я полагаю, что внутренности Pyomo были изменены, и предложенные решения больше не работают.

Как получить переменные ограничения в Pyomo

Доступ ко всем возникающим переменным в ограничении pyomo

Минимальная рабочая тестовая задача:

from pyomo.environ import *

m = ConcreteModel()

m.I = Set(initialize=[i for i in range(5)])

m.x = Var(m.I,bounds=(-10,10),initialize=1.0)
m.z = Var(bounds=(-100,100), initialize=5.0)

m.con1 = Constraint(expr=m.x[0] + m.x[1] - m.x[3] >= 10)
m.con2 = Constraint(expr=m.x[0]*m.x[3] + m.x[1] >= 0)
m.con3 = Constraint(expr=m.x[4]*m.x[3] + m.x[0]*m.x[3] - m.x[4] == 0)

m.obj = Objective(expr=sum(m.x[i]**2 for i in m.I))

m.pprint()

opt = SolverFactory('ipopt')
opt.options['max_iter'] = 0
opt.solve(m, tee=True)

В этом примере я хотел бы программно проверить переменные в con1.

1 Ответ

1 голос
/ 28 марта 2020

Вторая ссылка имеет правильное решение: Доступ ко всем переменным, встречающимся в ограничении pyomo

identify_variables() все еще существует, но похоже, что оно было перемещено в pyomo.core.expr.visitor. Возможно, стоит продвинуть его в пространство имен pyomo.core.expr.

...