我的优化需要几个小时才能在高性能服务器上解决。我想将解决方案保存到磁盘,然后将我的笔记本电脑上的重新加载到模型实例中。这将让我以交互方式在python命令行中探索结果,并开发或测试新编写的导出代码。 pyomo库具有许多将数据转储到磁盘的功能,但是没有提供将其加载回不同运行时环境的明确解决方案。
我理想的解决方案是在加载解决方案之后挑选实例,以便封装输入,解决方案和整个运行时状态。不幸的是,该实例附加的方法不是可挑剔的,而且pyomo团队还没有编写自定义酸洗功能。 2015 forum thread中建议的解决方法是pickle结果对象。默认情况下,结果对象在v5.1.1中没有加载解决方案,但是another post解释了如何解决这个问题。
我设法拼凑了一个在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)
答案 0 :(得分:0)
如this question中所述,一种解决方案是使用cloudpickle
腌制实例:
import cloudpickle
with open('test.pkl', mode='wb') as file:
cloudpickle.dump(instance, file)
with open('test.pkl', mode='rb') as file:
instance = cloudpickle.load(file)
我做了一些基本的测试,以上似乎可以将实例与结果一起还原。