web-dev-qa-db-ja.com

Python混合整数線形計画法

Python用の混合整数線形計画法(MILP)ソルバーはありますか?

GLPK pythonはMILPの問題を解決できますか?混合整数問題を解決できると読みました。
線形計画法の問題は非常に新しいです。混合整数プログラミングが混合整数線形プログラミング(MILP)と異なる場合、私はかなり混乱しており、本当に区別できません。

65
asun

Pulp は、 /などのソルバーに接続するpythonモデリングインターフェイスです。CBC (オープンソース)、 CPLEX (商用)、 Gurobi (商用)、 XPRESS-MP (商用)および YALMIP (openソース)。

Pyomo を使用して最適化問題をモデル化し、外部ソルバー、つまりCPLEX、Gurobim GLPK、AMPLを呼び出すこともできます。ソルバーライブラリ。

GLPK/PythonからGLPKを呼び出すこともできます。 PyGLPK または PyMathProg

さらに別のモデリング言語は CMPL で、MIPソルバー用のpythonインターフェースを備えています(線形プログラムのみ)。

上記のソルバーはすべて、 Mixed IntegerLinearPrograms を解きますが、一部は(確かにCPLEX、GUROBI、XRESS-MP) 混合整数QuadraticPrograms および Quadratically制約付き2次プログラム (および円錐プログラムですが、これはおそらくこの質問の範囲を超えています)。

MIPは混合整数プログラムを指しますが、一般的には線形プログラムのみを指すために使用されます。用語をより正確にするために、常にMILPまたはMINLP(混合整数非線形計画法)を参照する必要があります。

CPLEXとGUROBIにも独自のpython AP​​Iがありますが、XPRESS-MPは商用製品ですが、学術研究には無料です。 CyLP は上記のPulpに似ていますが、COIN-ORソルバーCBCおよびCGLおよびCLPとインターフェースします。

コマーシャルソルバーとフリーソルバーのパフォーマンスには大きな違いがあることに注意してください :後者は前者に大きく差をつけています。SCIPおそらく最高の非営利ソルバー(更新については以下を参照)。 pythonインターフェース、PySCIPOptは here です。

また、 this SO question もご覧ください。

最後に、(最適化ではなく)単純な制約ソルバーに興味がある場合は、 python-constraint をご覧ください。

これがお役に立てば幸いです!

更新

私のレーダーに落ちたソルバーとpythonインターフェース:

MIPCL 。 最速の 最速の非商用MIPソルバーには、 pythonインターフェイス があり、これにはかなりの 優れたドキュメント があります。ただし、Python AP​​Iには、ネイティブの MIPCLShell と一緒に提供される高度な機能は含まれていません。特に、 MIPCL-PY manual は、小規模な実装に加えて、運用管理で使用される一連のモデルを示しています。どのソルバー/ APIを使用するかに関係なく、それ自体が非常に興味深い入門マニュアルです。

Google Optimization Tools 。次のような多数の機能が含まれています。

  • 制約プログラミングソルバーと線形プログラミング(not MIP)ソルバー
  • MIPソルバーのインターフェイス(CBC、CLP、GLOP、GLPK、Gurobi、CPLEX、およびSCIPをサポート)
  • グラフ、巡回セールスマン問題、車両ルーティング問題、ビンパッキングおよびナップザック問題に特化したアルゴリズム

いくつかの従来のOR問題と単純な実装に関する広範なドキュメントがあります。完全なPython AP​​Iドキュメントは見つかりませんでしたが、 here の例がいくつかあります。他のソルバーがどのようにインターフェースに接続し、これらのソルバーのメソッドが利用可能かどうかは、私にはやや不明確です。

CVXOPT 、凸最適化のためのオープンソースパッケージ。GLPK(オープンソース)および MOSEK (商用)とのインターフェース。多くの問題クラス(特に線形、2次、半正定、凸非線形)に取り組むことができるため、汎用性があります。唯一の欠点は、ユーザーがデータを「Matlab-y」方式で渡す必要があるため(つまり、マトリックスやrhsベクトルなどを指定するため)、複雑な問題のモデリングが煩雑になる可能性があることです。ただし、モデリングインターフェイス PICOS から呼び出すことができます...

CVXPY 、凸最適化問題のためのpython埋め込み最適化言語。デフォルトのソルバーとしてCVXOPTを含むが、 に接続できます。通常のMIPソルバー

RedPanda に、CVXOPT/CVXPYもMIPソルバーをサポートしていることを指摘してくれてありがとう。

パッケージおよびオブジェクト指向言語(Pythonに限定されない)の最適化モデリング機能に関する非常に包括的な記事については、 this article を確認してください。

115
Ioannis