亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 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 關注
  • 210 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號