首页 > 解决方案 > Pyomo 和 IBM 决策云

问题描述

我正在尝试解决 docloud 中的 pyomo 模型并将结果导入回模型中。

通过 pyomo 加载 sol 文件的最简单方法是什么?到目前为止,我根本无法弄清楚如何做到这一点。我已经尝试了来自画廊的/示例,但没有任何运气。我试图做以下事情:

_,sym_id = model.write("/tmp/problem.mps")
client.execute(input=["/tmp/anrochte.mps"], output="/tmp/result.xml")

然后我假设我需要使用 ReaderFactory 来获得结果,然后我可以将其导入回我的模型中:

with ReaderFactory(ResultsFormat.sol) as reader:
        results = reader("/tmp/result.xml", suffixes=[".*"])
results._smap = model.solutions.symbol_map[sym_id]
model.solutions.load_from(results)

但是,之后我在模型中的所有变量仍然具有它们的默认值。

标签: ibm-cloudpyomo

解决方案


好吧,在 pyomo 中似乎没有直接的方法可以做到这一点,但是来自 docloud 的 json 文件很容易解析。我现在正在使用以下内容:

_,sym_id = model.write("/tmp/problem.mps")
resp = client.execute(input=["/tmp/problem.mps"], output="/tmp/result.json")

with open("/tmp/result.json") as f:
    res_json = json.load(f)

sym_map = model.solutions.symbol_map[sym_id]  
for var in res_json['CPLEXSolution']['variables']:
    sym_map.getObject(var["name"]).value = float(var["value"])

我不确定每个变量的“索引”条目是什么意思。


推荐阅读