【问题标题】:Access Duals for Variable Bounds in Pyomo在 Pyomo 中访问对偶变量边界
【发布时间】:2017-05-18 20:41:49
【问题描述】:

是否可以在 Pyomo 中访问与变量边界相关的双重信息?对于约束,您可以声明一个 Suffix,但变量边界是否有等效项?

【问题讨论】:

    标签: pyomo


    【解决方案1】:

    您可以声明一个名为rc(降低成本)的后缀,以从以下接口获取:

    • 古罗比:LP、MPS、Python
    • Cplex:LP、MPS、Python
    • Glpk:LP、MPS

    Xpress 可能也在该列表中,但我无法验证。

    AMPL 的 Gurobi 和 Cplex 求解器不会将此信息作为后缀返回(我不知道为什么),因此您无法通过 Pyomo 中这些求解器的 NL 文件接口获取这些信息。

    此外,对于 Ipopt,您可以通过分别为下限和上限的对偶声明名为 ipopt_zL_outipopt_zU_out 的后缀来获得此信息。请参阅this 示例以获得更好的解释。

    以上列表只是我所知道的。可能还有其他 AMPL 求解器通过后缀提供此信息,因此只要您知道后缀的名称,您就可以通过 Pyomo 的 NL 文件接口访问该解决方案信息。

    更新:这是 gurobi 的示例:

    import pyomo.environ as aml
    
    model = aml.ConcreteModel()
    model.x = aml.Var(bounds=(0,1))
    model.o = aml.Objective(expr=model.x)
    model.c = aml.Constraint(expr=model.x >= -1)
    
    model.rc = aml.Suffix(direction=aml.Suffix.IMPORT)
    
    gurobi = aml.SolverFactory("gurobi",
                               solver_io="lp")
    results = gurobi.solve(model)
    assert str(results.solver.termination_condition) == "optimal"
    
    print(model.rc[model.x])
    

    正如我上面解释的,您可以使用 Gurobi 将本示例中的 solver_io 设置为“lp”、“mps”或“python”。

    【讨论】:

    • 你能举个例子吗?比如 gurobi?
    猜你喜欢
    • 2017-08-03
    • 2022-08-15
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多