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 に格納できる.