【问题标题】:Analysing solution (.sol) file in pyomo在 pyomo 中分析解决方案 (.sol) 文件
【发布时间】:2019-02-10 12:33:22
【问题描述】:

我在机器 1 中有一个 pyomo 模型,在机器 2 中有 CPLEX 求解器。我在机器 1 中将 pyomo 模型 (ConcreteModel) 转换为具有函数 model.write("problem.lp")problem.lp 文件。然后我将此文件传输到机器 2 并从 CPLEX 求解器获取 solution.sol 文件。但是解决方案文件中的变量名称与模型的变量名称不同。

这导致解决方案分析出现问题。

有没有办法将解决方案文件中的变量名称转换或映射到模型的名称?

谢谢。

编辑1:我认为归结为在编写模型时找到符号图。符号映射 ID 由 model.write("problem.lp") 返回(参见 here)。现在的问题是我有符号映射 ID。如何获取符号映射文件并使用它来解码solution.sol 文件中的变量?

【问题讨论】:

  • 我怀疑 problem.lp 文件中的名称已经与 pyomo 模型中的名称不同。那是对的吗?而且,我希望solution.sol 文件中的名称与problem.lp 文件中的名称相匹配。如果您查看 pyomo source code,有一个 process_soln_file 方法看起来就像您正在寻找的那样。我不是 pyomo 专家,我不知道您是否可以在常规求解之外以某种方式利用此功能。
  • @rkersh,是的,你是对的,problem.lp 文件中的名称与solution.sol 文件中的名称相似,但与 pyomo 模型本身中的变量名称不同。我会看看你所指的功能。谢谢!

标签: python optimization cplex pyomo


【解决方案1】:

如编辑 1 中所述,将模型写入problem.lp 时会返回符号图。 如this code 的第 27-29 行所示,可以获得模型中变量名的元组及其引用变量。

然后,CPLEX 生成的 XML 文件 (solution.sol) 可以使用 xml 之类的包在 python 中进行解析。现在我们有了地图和值。我们只需要比较参考变量并将其值存储到名称与模型中相同的变量中即可。

【讨论】:

    猜你喜欢
    • 2021-04-23
    • 1970-01-01
    • 2017-02-17
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多