在 Pyomo 中访问变量边界的对偶
Access Duals for Variable Bounds in Pyomo
是否可以访问Pyomo中与变量边界相关的双重信息?对于约束,您可以声明一个后缀,但是变量边界是否有等效项?
您可以声明一个名为 rc
的后缀(降低成本)以从以下接口获取它:
- Gurobi: LP, MPS, Python
- 复合体:LP、MPS、Python
- Glpk:LP、MPS
Xpress 可能也在该列表中,但我无法验证这一点。
AMPL 的 Gurobi 和 Cplex 求解器不return此信息作为后缀(我不知道为什么),因此您无法通过 Pyomo 中这些求解器的 NL 文件接口获取这些信息.
此外,对于 Ipopt,您可以通过分别为下限和上限的对偶声明名为 ipopt_zL_out
和 ipopt_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"。
是否可以访问Pyomo中与变量边界相关的双重信息?对于约束,您可以声明一个后缀,但是变量边界是否有等效项?
您可以声明一个名为 rc
的后缀(降低成本)以从以下接口获取它:
- Gurobi: LP, MPS, Python
- 复合体:LP、MPS、Python
- Glpk:LP、MPS
Xpress 可能也在该列表中,但我无法验证这一点。
AMPL 的 Gurobi 和 Cplex 求解器不return此信息作为后缀(我不知道为什么),因此您无法通过 Pyomo 中这些求解器的 NL 文件接口获取这些信息.
此外,对于 Ipopt,您可以通过分别为下限和上限的对偶声明名为 ipopt_zL_out
和 ipopt_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"。