[解決済み] Python 混合整数型線形計画法
質問
Pythonの混合整数線形計画法(MILP)ソルバはありますか?
GLPK pythonは、MILP問題を解くことができますか?私はそれが混合整数問題を解くことができると読みました。
私は線形計画問題には非常に新しいです。だから私はむしろ混乱しており、混合整数プログラミングが混合整数線形計画法(MILP)と異なるかどうかを本当に区別することはできません。
どのように解決するのですか?
パルプ のようなソルバにフックアップする Python のモデリングインターフェイスです。 CBC (オープンソース)です。 CPLEX (商用)です。 グロビ (商用)です。 XPRESS-MP (商用) と ヤルミップ (オープンソース)です。
また ピヨモ を使って最適化問題をモデル化し、外部のソルバー、すなわちCPLEX、Gurobi GLPK、AMPLソルバーライブラリを呼び出します。
からGLPKを呼び出すこともできます。 GLPK/Python , PyGLPK または PyMathProg .
さらに別のモデリング言語として CMPL これは、MIPソルバー(線形計画のみ)のためのpythonインターフェースを持っています。
上記のすべてのソルバーは 混合整数 線形 プログラム を解くことができるものもあるが(CPLEX, GUROBI, XRESS-MPは間違いない)。 混合整数 二次関数 プログラム と 二次制約付き二次プログラム (そして、二次曲線プログラムもですが、これはおそらくこの質問の範囲を超えています)。
MIPとはMixed integer programsのことですが、一般的には線形計画だけを指すのに使われます。用語をより正確にするために、常にMILPまたはMINLP(混合整数非線形計画法)を参照する必要があります。
CPLEXとGUROBIは独自のPython APIを持っていますが、それら(とXPRESS-MP)は商用製品であり、学術研究用には無料であることに注意してください。 CyLP は上記のPulpに似ていますが、COIN-ORソルバーのCBCやCGL、CLPとのインタフェースがあります。
以下のことに注意してください。 商用ソルバーとフリーソルバーの性能には大きな差があります。 後者は前者に大きく遅れをとっています。 SCIP は おそらく最高の非商業的ソルバー (アップデートは下記参照)。そのパイソンインターフェースであるPySCIPOptは ここで .
また、以下をご覧ください。 このSOの質問 .
最後に、もしあなたが単純な制約ソルバー(最適化ではない)に興味があるのなら、次のサイトを見てください。 python-constraint .
お役に立てれば幸いです。
更新情報
私のレーダーに引っかかったソルバーと Python インターフェイスを追加しました。
更新:MIPCLのリンクが壊れているようです。 MIPCL は、非商用MIPソルバーとしては最速と思われますが、このソルバーは pythonインターフェース があり、これはかなり 良いドキュメント . しかし、Python API には、ネイティブの API に付属するような高度な機能は含まれていません。 MIPCLShell . 私が特に気に入っているのは MIPCL-PYマニュアル このマニュアルでは、オペレーションズ・マネジメントで使用されるさまざまなモデルを、小規模な実装の上に実証しています。どのソルバー/APIを利用したいかに関わらず、それ自体が非常に興味深い入門マニュアルです。
Google 最適化ツール のような多くの機能を含んでいます。
- 制約プログラミングソルバーと線形計画法 ( MIPではない )ソルバー
- MIPソルバーのインターフェース(CBC, CLP, GLOP, GLPK, Gurobi, CPLEX, SCIPをサポート)。
- グラフ、巡回セールスマン問題、車道問題、ビン詰め問題、ナップサック問題に特化したアルゴリズム
いくつかの伝統的なORの問題と簡単な実装に関する広範なドキュメントがあります。Python API の完全なドキュメントは見つかりませんでしたが、いくつかの例は存在します。 ここに . 他のソルバーがどのようにインターフェースにフックするのか、また、これらのソルバーのメソッドが利用可能なのか、私にはやや不明です。
CVXOPT 凸最適化のためのオープンソースパッケージで、GLPK(オープンソース)および MOSEK (商用)とのインターフェースです。多くの問題クラス(特に線形、2次、半正定値、凸非線形)に取り組むことができ、汎用性が高い。唯一の欠点は、複雑な問題のモデリングが面倒なことで、ユーザはデータを "Matlab-y" 方式で渡す必要があります(つまり、行列やrhsベクトルなどを指定するため)。しかし、これはモデリングインターフェースから呼び出すことができます。 PICOS と...
CVXPY
は、凸最適化問題のためのpython組み込みの最適化言語で、以下のものを含みます。
CVXOPT
をデフォルトのソルバーとして含みますが,このソルバーは
通常のMIPソルバー
.
おかげさまで
レッドパンダ
が指摘した
CVXOPT/CVXPY
は MIP ソルバもサポートします。
パッケージやオブジェクト指向言語(Pythonに限らない)の最適化モデリング能力に関する非常に包括的な記事として、以下をご覧ください。 この記事 .
関連
-
[解決済み] UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで整数から文字列に変換する
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?