scipy.optimize から linprog をインポート
linprog 関数の scipy 公式ドキュメント
scipy.optimize.linprog(c, A_ub=なし, b_ub=なし, A_eq=なし, b_eq=なし, 境界=なし, メソッド= 'highs', コールバック= なし, オプション= なし, x0= なし, 統合性=なし)
線形計画法は、次の形式の問題を解決します。
パラメーター:
c:1 次元配列
A_ub:2 次元配列、オプション
b_ub:1 次元配列、オプション
A_eq: 2 次元配列、オプション
b_eq: 1 次元配列、オプション
境界シーケンス、オプション
x: 1 次元配列
以下では例を使用して、この関数を使用して線形計画問題を解決してみます。
c=[-70, -50, -60] A_ub = [[2, 4, 3], [3, 1, 5], [7, 3, 5]] b_ub = [150, 160, 200]
result=linprog(c,A_ub=A_ub,b_ub=b_ub,bounds=[(0,None),(0,None),(0,None)],method='highs') result
メッセージ: 最適化は正常に終了しました。(HiGHS ステータス 7: 最適) 成功: True ステータス: 0 fun: -2590.909090909091 x: [ 2.121e+00 1.576e+01 2.758e+01] nit: 3 lower: 残留: [ 2.121e+00 1.576e+01 2.758 e+01] マージナル: [ 0.000e+00 0.000e+00 0.000e+00] アッパー: 残差: [ inf inf inf] マージナル: [ 0.000e+00 0.000e+00 0.000e+00] eqlin: 残差: [ ] 周縁: [] ineqlin: 残差: [ 0.000e+00 0.000e+00 0.000e+00] 周縁: [-6.364e+00 -0.000e+00 -8.182e+00] mip_node_count: 0 mip_dual_bound: 0.0 ミップギャップ: 0.0
得られる目標解は答えと一致しますが、x の最適解の値は異なり、実現可能な解が複数存在する可能性があります。