Мне интересно, что такое метод 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()?
Спасибо
Короткий ответ - да, каждый компонент Var
имеет stale
флаг, который указывает, было ли обновлено значение переменной в последний раз, когда модель была решена. Если вы вызываете pprint
на Var
вы увидите столбец "Stale" с этим значением для каждого индекса в переменной. Вы можете прокручивать только не-устаревшие переменные, используя что-то вроде:
for v in m.component_data_objects(Var):
if v.stale:
continue
print(str(v), ' = ', value(v))