私はgurobipyで私のモデルをコーディングしました。制約とコストベクトルの行列を求めたいと思います。 アクセスする方法はありますか?gurobipyから行列形式の制約を取得します
4
A
答えて
10
Python APIから、Gurobiモデルから行列係数を取得する関数はありませんが、自分で書くことは難しいことではありません。
変数と制約のリストを持つと便利です。あなたは、変数m
dvars = m.getVars()
constrs = m.getConstrs()
でgurobiモデルを持っている場合は、あなたの変数と制約のリストが表示されます。次に、m.getAttrを使用して、変数に関連する属性を取得できます。目的関数係数を取得するには、 'Obj'属性をクエリします。
obj_coeffs = m.getAttr('Obj', dvars)
これは、モデル内の各変数の目的係数のリストを提供します。制約行列については、おそらくnonzerosだけを格納したいと思うでしょう。私はちょうどGurobiパイソンの各変数および制約オブジェクトは、インデックスを持つ
COOrdinateフォーマット
- 行インデックス
- 列インデックスに格納します。私はちょうど指標
var_index = {v: i for i, v in enumerate(dvars)} constr_index= {c: i for i, c in enumerate(constrs)}
constrs
リスト内の各制約オブジェクトは、モデル内の制約に対応するオブジェクトをマッピングする辞書を作成します。左側の表現 - - 感覚(< =、==、> =) - 各制約はその 含ま制約行列の場合は右辺定数を、あなたは左側をしたいです。これはモデル上で
getRow
メソッドで取得できるLinExpr
オブジェクトで表されます。 Gurobi 6.xののとして、列インデックス、係数タプルのリストを取得する行列を取得するには、次のdef get_expr_coos(expr, var_indices): for i in range(expr.size()): dvar = expr.getVar(i) yield expr.getCoeff(i), var_indices[dvar]
のような機能を必要とし、あなたはすべての制約のため、この機能を適用する必要があります。
def get_matrix_coo(m): dvars = m.getVars() constrs = m.getConstrs() var_indices = {v: i for i, v in enumerate(dvars)} for row_idx, constr in enumerate(constrs): for coeff, col_idx in get_expr_cos(m.getRow(constr), var_indices): yield row_idx, col_idx, coeff
この機能を使用すると、あなたはこのような構造から、パンダのデータフレーム
nzs = pd.DataFrame(get_matrix_coos(m), columns=['row_idx', 'col_idx', 'coeff'])
のような構造に行列を保存することができ、あなたがゼロでないパターンの基本的なプロットを行うことができます。 miplib aflow40bベンチマーク問題の問題を使用しています。
import matplotlib.pyplot as plt import pandas as pd import gurobipy as grb m = grb.read("miplib/instances/miplib2010/aflow40b.mps.gz") nzs = pd.DataFrame(get_matrix_coo(m), columns=['row_idx', 'col_idx', 'coeff']) plt.scatter(nzs.col_idx, nzs.row_idx, marker='.', lw=0)
関連する問題
- 1. データをフォームから配列形式で取得します。
- 2. クエリ制約付きのリレーションシップからレコードを取得します
- 3. 回帰回帰と行列形式の要約統計の取得
- 4. 与えられた対称疎行列からCSR形式を取得する
- 5. xamarin形式のsignaturepadから画像を取得しますか?
- 6. OWL形式のオントロジーから文字列を取得する
- 7. open_idフォームから形式のURLを取得します
- 8. データベースからUri形式でデータを取得しますか?
- 9. 取得Brithdays VARCHAR列から日付形式として
- 10. Android:base64binary形式から画像を取得
- 11. VertexインスタンスからJson形式の文字列を取得
- 12. WebAPIからJSON形式のXmlと文字列データを取得
- 13. MySQLは時:分形式から日付を取得します
- 14. コレクションビューのセル内の制約値を取得しますか?
- 15. 配列形式または配列でWakandaのデータソースを取得
- 16. webapp2は非形式からデータを取得できます
- 17. R - 呼び出しオブジェクトから形式を取得する
- 18. サーバーコールから取得したJSONデータの正しい形式
- 19. ビジュアル形式の制約をNSLayoutAnchor APIに変換する
- 20. リストからオブジェクトを取得し、正しい形式で返します。
- 21. XML形式のFBからユーザーの詳細を取得する
- 22. javascriptでjson形式の配列からデータを取得する方法
- 23. UTC形式の時刻文字列からNSDateを取得する
- 24. iOS:Instrumentからtxt形式のログを取得する
- 25. json形式のモデルから属性を取得する - Rails
- 26. MySQLからHH:MM形式の時刻を取得する
- 27. Grails inList制約InListマップの値をエラーメッセージで取得します
- 28. 壊れたハード(またはソフト)制約を取得します
- 29. オブジェクトをjson形式で取得しますか?
- 30. socketTextStreamから文字列形式でレコードを取得する方法
あなたは、目的関数と制約を提供することができますか?変数に対しては、forループを使用してmodel.getVarsを繰り返してすべての制約を得ることができると思います。モデルを提供すると、モデルからすべてのデータを取得できるため、詳細な出力を提供できます。 – sb0709