web-dev-qa-db-ja.com

Pythonでの線形プログラミング?

線形計画モデルを作成する必要があります。私が使用している不等式は次のとおりです(例)。

6x + 4y <= 24
x + 2y <= 6
-x + y <= 1
y <= 2

これらの不等式で記述された領域を見つけて、グラフで陰影を付け、この領域の境界線の頂点を追跡し、境界線を異なる色で描画する必要があります。私が探しているものの例については、下のグラフを参照してください。

image of the points of intersection

Python 3.2、numpy、およびmatplotlibを使用しています。Pythonの線形プログラミングに適したモジュールはありますか?

31
user24562

UPDATE:答えは過去4年でやや時代遅れになりました。ここに更新があります。多くのオプションがあります:

60
Ali

Pythonの凸最適化問題を解決するには、パッケージ cvxopt をお勧めします。 Python線形プログラムのコードの短い例は、cvxoptのドキュメント here にあります。

19
silvado

グラフを使用して線形プログラムを解くのは、宿題の問題だけです。他のすべての場合、線形計画問題は行列線形代数によって解決されます。

Pythonに関しては、ピュアPythonライブラリがいくつかありますが、ほとんどの人はPythonバインディングでネイティブライブラリを使用します。線形プログラミング用のさまざまな無料および商用ライブラリがあります。詳細なリストについては、ウィキペディアの Linear Programming またはOR/MS Todayの Linear Programming Software Survey を参照してください。

免責事項:私は現在Gurobi Optimizationに勤務しており、以前はCPLEXを提供していたILOGに勤務していました。

5
Greg Glockner

他の答えは、ソルバーのリストを提供する良い仕事をしました。ただし、LPモデルを作成するためのライブラリとしてPythonライブラリとして言及されているのはPuLPのみです。

もう1つの優れたオプションは Pyomo です。 PuLPと同様に、問題を任意のソルバーに送信し、ソリューションをPythonに読み戻すことができます。ソルバーパラメーターを操作することもできます。クラスメートと私は2015年にPuLPとPyomoのパフォーマンスを比較しましたが、Pyomoは同じ問題に対して.LPファイルをPuLPよりも数倍速く生成できることがわかりました。

5
Sesquipedalism

線形計画法の問題を解決するには、SciPyの scipy.optimize.linprog モジュールを使用できます。これは、シンプレックスアルゴリズムを使用します。

4
Cosmo Harrigan

PuLP pythonパッケージ。Niceインターフェースがあり、LPを解決するために異なるタイプのアルゴリズムを使用できます。

1
mridul

lpsolveは私にとって最も簡単です。別のソルバーをインストールする必要はありません。パッケージに同梱されています。

0
Rudraksha