如何保存Pyomo解决方案并重新加载到单独的运行时环境中?

时间:2017-11-09 22:50:06

标签: pyomo

我的优化需要几个小时才能在高性能服务器上解决。我想将解决方案保存到磁盘,然后将我的笔记本电脑上的重新加载到模型实例中。这将让我以交互方式在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)

1 个答案:

答案 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)

我做了一些基本的测试,以上似乎可以将实例与结果一起还原。