混合整数計画問題を解決する最速のソフトウェア(オープンソース)


14

混合整数プログラミングの問題があります。そして、GLPKをソルバーとして使用しています。しかし、GLPKは線形計画法の問題には適していますが、混合整数計画法にははるかに長い時間が必要であるため、要件を満たしていません。他のソフトウェアを探しています。混合整数プログラミング問題を高速で解決する他の優れたオープンソースツールはありますか?ありがとう!


SCIPとの比較を見ましたか?
アリ

回答:


14

オープンソースが必要な場合は、COINのCBCコードを試してみることをお勧めします(ブランチと価格のフレームワーク、またはSYMPHONYなどの他のMILPソルバーもいくつかあります)。

GurobiとCPLEXはかなり高速になり、2011年または2012年のINFORMSミーティングの時点では、GurobiはCPLEXよりも高速でした(もちろん、パフォーマンスメトリックは問題に依存しています)。私の論文で解決されたMILPでは、GurobiはCBCの約15〜100倍高速であり、CPLEXはGurobiとほぼ同じ速さでしたが、非常にわずかに低速でした(12〜80倍高速など)。

最悪の場合のパフォーマンスは確かに指数関数的ですが、実行時間は問題の構造に大きく依存します。特別な構造を利用しない限り、数百万の変数でMILPを解くことができるとは考えられません(多くの小さな問題に分解できる確率的なプログラムである場合)が、数千の非自明なMILPを解くことは完全に可能です1分以内の変数。(もちろん、これらの問題が解決するのに1時間以上かかることもあります。)

ブライアンボーチャーズが指摘しているように、CPLEXとGurobiの両方が一部の研究者に無料のライセンスを提供しているため、これら2つのソフトウェアパッケージのいずれかが汎用MILPソルバーとして使用するのに最適です。


6

混合整数線形計画問題は、線形計画問題よりも解決がはるかに困難です。計算の複雑さの観点から、LPは多項式時間で解くことができますが、MILPの解はNP-Hard問題です。MILPを解決するための既知のアルゴリズムには、指数関数的な最悪の複雑さがあります。

SCIP(アカデミック版は無料)、CPLEX(商用版ですがアカデミックライセンスオプションがあります)、およびGUROBI(アカデミック版ライセンスオプションが含まれる商用版)など、混合整数線形プログラミング用のその他のソフトウェアパッケージがあります。これらのパッケージのうち、GLPKよりも問題が大幅に速いかもしれませんが、同じサイズのLPを解くのと同じくらい速くMILPを解くパッケージを期待しないでください。


4

多数の異なるソルバーを試してみたい場合は、JuliaのJuMPモデリングフレームワークを試してください。モデルをJuMPモデルとして記述し、1行のコードでソルバーを切り替えることができます。たとえば、MILP問題の場合、Bonmin、Cbc、Couenne、CPLEX、GLPK、Gurobi、およびMOSEKソルバーから選択できます。このため、JuMPで記述した場合、Geoffが言及したすべてのソルバーを試してみて、多くのコードを記述しなくても機能することを確認できます。あなた自身の個人的なテストは、あなたの問題に対する最速のアルゴリズムが何であるかについての最良の知識源となります。


JuMPフレームワークは多くのオーバーヘッドを追加しますか?
naught101

1
いいえ、JuMPはマクロ経由で実行されるため、コンパイル時に実行されます。実際、JuMPはマクロを使用してコードを書き直し、自動微分を使用して勾配、ヤコビアン、およびヘッセ行列の効率的な関数を計算するため、勾配/ヤコビアン/ヘシアン。実際に経由@code_llvmして結果のアセンブリコードをチェックして、グルーコードが本質的に何もないことを確認できます(これは、Juliaが関数ポインターとC / Fortranと同じビット配列を単純に使用しているためです)。
クリスラッカッカス16

@ChrisRackauckas非線形制約のある非線形問題に対して、どのソルバーがよりうまく機能しますか?
スカン

コメントで尋ねられるべきではない場合、それはまったく別の質問ですが、必要な制約とグローバルまたはローカルの最適化が必要かどうかに応じて、NLoptまたはIPOPTでJuMPを使用する傾向があります。
クリスラッカッカス

3

他の人の提案に従って、私は(商用の) GAMS を多くのプロジェクトに使用しました。それは非常に簡単です。あなたがしなければならないのはあなたの問題の数学的な定式化を置くことです。変数、制約、目的関数、およびすべての入力データを取得します。次に、あらゆるケースに対応するさまざまなソルバー(オプティマイザー)を提供します。ケースに応じて、より洗練されたソルバーを追加します。

確かに、EASY は一見の価値があります。オープンソースのフレームワーク。

「高速」という用語は非常に曖昧です!もっと具体的にする必要があります。反復回数の点で高速ですか?評価の数?経過時間?これらの組み合わせ?

ただし、ソフトウェアを探していなくて、単に問題を解決したいだけなら、非常に高い評判とパフォーマンスのオープンソースのオプティマイザーであるグローバルオプティマイザーNSGA-IIを使用することをお勧めします。

さらに情報を提供していただければ、正確にご案内できます。


1
[openMDAO] [1]を真剣に検討する必要があります。これはNASAによって開発/サポートされており、非常に柔軟です。
T3rmInAt0r
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.