Моя оптимизация занимает несколько часов на высокопроизводительном сервере. Я хочу сохранить решения на диск, а затем перезагрузить их на свой ноутбук в экземпляр модели. Это позволило бы мне интерактивно исследовать результаты в командной строке python и разрабатывать или тестировать только что написанный код экспорта. Библиотека pyomo имеет множество функций для сброса данных на диск, но не предоставляет четкого решения для их загрузки обратно в другую среду выполнения.
Моим идеальным решением было бы обработать экземпляр после загрузки решения, чтобы он инкапсулировал входные данные, решение и все состояние времени выполнения. К сожалению, к экземпляру прикреплены методы, которые нельзя мариновать, а команда pyomo не написала собственных функций травления. Рекомендуемый обходной путь в ветке форума 2015 г.: засолить объект результатов. В объект результатов не загружено решение по умолчанию в v5.1.1, но другой пост объясняет, как это решить.
Мне удалось собрать решение, которое работает в pyomo v5.1.1, но интересно, есть ли способ лучше.
Сохранить
# ...Define abstract model
# ...Load data from input directory and create model instance
# Solve, get a results object that only contains execution metadata
results = opt.solve(instance)
# Load solution data into results object
instance.solutions.store_to(results)
# Archive results: solution & execution metadata
pickle.dump(results, open("results.pickle", "wb"))
Перезагрузить
... синхронизировать код, каталог входов и файл results.pickle с сервера на мой ноутбук.
# ...Define abstract model
# ...Load data from input directory and create model instance
# Load results from pickle: metadata & solution
results = pickle.load(open("results.pickle", "wb"))
# Load solution data into instance object
instance.solutions.load_from(results)