我想使用带有 NL / ASL 接口的 Pyomo 从 cplex 求解器中为我的变量获取 .rc 或 .urc 后缀。这个接口通常比我的模型的默认 cplex 接口快。但是我似乎无法让 NL 接口返回这些后缀。如果我使用带有默认选项的 cplex 求解器,我会得到 rc 后缀的值。但是,如果我使用 solver_io='nl' 或将求解器设置为 'cplexamp' (我认为它做同样的事情),那么我不会得到 rc 值。(我能够获得双打,但不是 rc。)
这是一些示例代码:
from pyomo.environ import *
from pyomo.opt import SolverFactory
def show_rc(m, *args, **kwargs):
opt = SolverFactory(*args, **kwargs)
results = opt.solve(m, suffixes=['rc'])
m.solutions.load_from(results)
m.rc.pprint()
m = ConcreteModel()
m.X = Var(bounds=(0, 1))
m.obj = Objective(rule=lambda m: 3.14 * m.X, sense=maximize)
m.rc = Suffix(direction=Suffix.IMPORT, datatype=Suffix.FLOAT)
show_rc(m, "cplex") # has value 3.14
show_rc(m, "cplex", solver_io="nl") # no value returned
show_rc(m, "cplexamp") # no value returned
该文档特别提到通过后缀降低成本,而 .rc 后缀似乎是 AMPL 中的标准位置,但我没有通过 Pyomo 的 NL 接口阅读此内容。谁能指出我正确的方向?