回答:
オープンソースが必要な場合は、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ソルバーとして使用するのに最適です。
混合整数線形計画問題は、線形計画問題よりも解決がはるかに困難です。計算の複雑さの観点から、LPは多項式時間で解くことができますが、MILPの解はNP-Hard問題です。MILPを解決するための既知のアルゴリズムには、指数関数的な最悪の複雑さがあります。
SCIP(アカデミック版は無料)、CPLEX(商用版ですがアカデミックライセンスオプションがあります)、およびGUROBI(アカデミック版ライセンスオプションが含まれる商用版)など、混合整数線形プログラミング用のその他のソフトウェアパッケージがあります。これらのパッケージのうち、GLPKよりも問題が大幅に速いかもしれませんが、同じサイズのLPを解くのと同じくらい速くMILPを解くパッケージを期待しないでください。
多数の異なるソルバーを試してみたい場合は、JuliaのJuMPモデリングフレームワークを試してください。モデルをJuMPモデルとして記述し、1行のコードでソルバーを切り替えることができます。たとえば、MILP問題の場合、Bonmin、Cbc、Couenne、CPLEX、GLPK、Gurobi、およびMOSEKソルバーから選択できます。このため、JuMPで記述した場合、Geoffが言及したすべてのソルバーを試してみて、多くのコードを記述しなくても機能することを確認できます。あなた自身の個人的なテストは、あなたの問題に対する最速のアルゴリズムが何であるかについての最良の知識源となります。
@code_llvm
して結果のアセンブリコードをチェックして、グルーコードが本質的に何もないことを確認できます(これは、Juliaが関数ポインターとC / Fortranと同じビット配列を単純に使用しているためです)。
他の人の提案に従って、私は(商用の) GAMS を多くのプロジェクトに使用しました。それは非常に簡単です。あなたがしなければならないのはあなたの問題の数学的な定式化を置くことです。変数、制約、目的関数、およびすべての入力データを取得します。次に、あらゆるケースに対応するさまざまなソルバー(オプティマイザー)を提供します。ケースに応じて、より洗練されたソルバーを追加します。
確かに、EASY は一見の価値があります。オープンソースのフレームワーク。
「高速」という用語は非常に曖昧です!もっと具体的にする必要があります。反復回数の点で高速ですか?評価の数?経過時間?これらの組み合わせ?
ただし、ソフトウェアを探していなくて、単に問題を解決したいだけなら、非常に高い評判とパフォーマンスのオープンソースのオプティマイザーであるグローバルオプティマイザーNSGA-IIを使用することをお勧めします。
さらに情報を提供していただければ、正確にご案内できます。