Pyomo / IPOPT: получение вычисленных переменных

1

Мне интересно, что такое метод Pyomo-ish для получения значений решения (в частности, только для переменных, вычисляемых решателем).

В моем случае переменная 'x' индексируется тремя наборами, поэтому ее ключи являются 3-мя корнями, например x [CC, N5R_0, ntg]. Перед решением переменная "x" содержит 7626 элементов. Решитель (IPOPT) сообщает, что он решает проблему с 1339 элементами:

Total number of variables............................:     1339

После решения компонент instance.x все еще содержит 7626 элементов. Но при просмотре результатов я хочу только вытащить значения для вычисляемых переменных 1339.

Я попробовал просто получить ненулевые значения, но это не работает, если начальные значения не все равны нулю.

Есть ли быстрый и программный способ извлечения значений только для этих 1339 переменных компонентов? (помимо отдельного пост-синтаксического анализа выходного файла IPOPT?)

Например, эта информация как-то встроена в объект экземпляра модели после.solve()?

Спасибо

Теги:
pyomo
ipopt

1 ответ

1
Лучший ответ

Короткий ответ - да, каждый компонент Var имеет stale флаг, который указывает, было ли обновлено значение переменной в последний раз, когда модель была решена. Если вы вызываете pprint на Var вы увидите столбец "Stale" с этим значением для каждого индекса в переменной. Вы можете прокручивать только не-устаревшие переменные, используя что-то вроде:

for v in m.component_data_objects(Var):
    if v.stale:
        continue
    print(str(v), ' = ', value(v))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню