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
ドキュメントでは、サフィックスを介してコストを削減することが具体的に言及されており、AMPL では .rc サフィックスがこれの標準的な場所のようですが、Pyomo の NL インターフェースを介してこれを読むことはできません。誰かが私を正しい方向に向けることができますか?