【问题标题】:Returning results of a Pyomo optimisation from a function从函数返回 Pyomo 优化的结果
【发布时间】:2017-09-04 12:01:05
【问题描述】:

我用 Pyomo 设置了一个优化 CHP 单元控制策略的问题,它的布局(非常粗略)如下:

class Problem
    def OptiControl
        <Pyomo Concrete model formulation>
        return (model.obj.value())

之所以存在问题类,是因为我正在研究几种控制策略方法,因此我使用(例如)b = problem1.OptiControl() 来调用这些方法。

问题是,如果我尝试返回目标的值,我的脚本会卡住,当我 Ctrl+C 退出时,我会得到(' Signal', 2, 'recieved, but no process queued')。此外,如果我写model.write(),脚本正常结束,但 IPython 中不显示任何内容。尝试打印model.obj.value() 也不起作用。

我认为这与我在函数中调用 Pyomo 的事实有关,因为该模型之前成功运行,但我不知道如何解决这个问题。

编辑:将值写入文件也不起作用。如果有帮助,这是我解决模型的代码摘录:

        opt = SolverFactory("glpk") # Choose solver
        solution = opt.solve(model) # Solve model

        model.write()

        with open('ffs.txt','w') as f:
            model.obj.expr()
            for t in model.P:
                f.write(model.f["CHP",t].value)

【问题讨论】:

  • 出于好奇,您在执行model.display() 时是否得到任何输出?
  • 没有。我找到了一个修复方法(见下文)
  • 当您执行model.display() 时没有打印出来?这很奇怪,可能是一个错误。不过,我很高兴您找到了解决方法。

标签: python optimization pyomo


【解决方案1】:

我最终解决了这个问题,将我的模型重写为 AbstractModel,将我的数据写入 .dat 文件并读取它(笨重,但我现在需要结果,所以必须完成)。出于某种原因,它现在可以正常工作,并且可以满足我的预期。

事实证明我的问题是不可行的,这可能会增加我的问题,但至少通过这种方法我可以使用 results.write() 并且我能够发现以前不是这种情况。

【讨论】:

  • 将来您可以使用选项 'tee=True' 流式传输求解器输出(即 opt.solve(model, tee=True))并确保其求解。
  • 谢谢,这真的很有帮助!
猜你喜欢
  • 1970-01-01
  • 2012-12-19
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
相关资源
最近更新 更多