为了账号安全,请及时绑定邮箱和手机立即绑定

将 Pyomo 导出到 .mps 文件时保留变量名称

将 Pyomo 导出到 .mps 文件时保留变量名称

PHP
一只甜甜圈 2023-11-09 10:42:03
因此,我目前正在使用一个 pyomo 模型,该模型具有多个正在并行解决的实例。问题是,解决它们需要 pyomo 相当长的时间(比如 2 到 3 秒,尽管gurobi 的解决部分大约需要 0.08 秒)。我发现,通过将 pyomo 实例导出到 .mps 文件中,然后将其提供给 gurobipy,我可以将整体速度提高 30%。当我想使用已解决模型的变量时,问题就出现了,因为我注意到,当将原始实例从 pyomo 导出到 .mps 文件时,变量名称会丢失;它们都被命名为“x”(因此,例如 model.Delta、model.Pg、model.Alpha 等会变成 x1、x2、...、x9999,而不是 Delta[0]、Delta[1], ...阿尔法[99,99])。有没有办法在导出模型时保留原来的变量名?
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

设法解决了!对于任何可能觉得这有用的人,我传递了一个带有“symbolic_solver_labels”的字典作为该方法的 io_options 参数,如下所示:

instance.write(filename = str(es_) + ".mps", io_options = {"symbolic_solver_labels":True})

现在我的变量在 .mps 文件中已正确标记!


查看完整回答
反对 回复 2023-11-09
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

我使用Pyomo==5.6.9,在这个版本中,“io_options”应该使用不同的方式来设置。


model.write(filename = "FILEPATH.mps", symbolic_solver_labels=True)

我检查了 Pyomo(pyomo/repn/plugins/mps.py:ProblemWriter_mps.__call__) 的源代码,在我看来,传递给该函数的“io_options”是 **kargs 但不是字典。


    def __call__(self,

                 model,

                 output_filename,

                 solver_capability,

                 io_options):


        # Make sure not to modify the user's dictionary,

        # they may be reusing it outside of this call

        io_options = dict(io_options)

        

        ...


        # Use full Pyomo component names in the MPS file rather

        # than shortened symbols (slower, but useful for debugging).

        symbolic_solver_labels = \

            io_options.pop("symbolic_solver_labels", False)

        

        ...

        

        if len(io_options):

            raise ValueError(

                "ProblemWriter_mps passed unrecognized io_options:\n\t" +

                "\n\t".join("%s = %s" % (k,v) for k,v in iteritems(io_options)))


查看完整回答
反对 回复 2023-11-09
  • 2 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信