Gurobi で線形計画問題を解いた時,その双対解を得るには,該当する制約条件の Pi
という属性にアクセスする.
例えばモデルが m = gurobipy.Model()
に格納されている場合,m
の制約条件には
constrs = m.getConstrs()
constr = m.getConstrByName("constr a")
という2通りの方法でアクセスできる.前者は m
の全ての制約条件が順にリストconstrs
に格納され,後者は指定した名前(ここではconstr a
)の制約条件が変数constr
に格納される.
従って,m.optimize()
として m
の最適解を求めた場合,その双対変数は,
duals = [cons.Pi for cons in m.getConstrs()]
dual = m.getConstByName("constr a").Pi
という2透りの方法で求められる.前者は,全ての制約条件についての双対変数が順にリストduals
に格納され,後者は指定した名前(ここではconstr a
)の制約条件についての双対変数が変数dual
に格納される.
なお,制約条件の名称はConstrName
という属性に格納されるので,
duals = dict([(cons.ConstrName, cons.Pi) for cons in m.getConstrs()])
とすれば,双対変数の名前と値の対を辞書 duals に格納できる.