Gurobi で線形計画問題を解いた時,その双対解を得るには,該当する制約条件の Pi という属性にアクセスする.

例えばモデルが m = gurobipy.Model() に格納されている場合,mの制約条件には

  1. constrs = m.getConstrs()
  2. constr = m.getConstrByName("constr a")

という2通りの方法でアクセスできる.前者は mの全ての制約条件が順にリストconstrsに格納され,後者は指定した名前(ここではconstr a)の制約条件が変数constrに格納される.

従って,m.optimize()として mの最適解を求めた場合,その双対変数は,

  1. duals = [cons.Pi for cons in m.getConstrs()]
  2. dual = m.getConstByName("constr a").Pi

という2透りの方法で求められる.前者は,全ての制約条件についての双対変数が順にリストdualsに格納され,後者は指定した名前(ここではconstr a)の制約条件についての双対変数が変数dualに格納される.

なお,制約条件の名称はConstrNameという属性に格納されるので,
duals = dict([(cons.ConstrName, cons.Pi) for cons in m.getConstrs()])

とすれば,双対変数の名前と値の対を辞書 duals に格納できる.