CPLEXを使用して巨大な最適化モデル(100,000以上の変数)を解決しています。オープンソースの代替案を見つけることができるかどうかを確認したいと思います。混合整数問題(MILP)を解決します。スケーリングしたいので、本当に代替を見つけるか、独自のアドホック最適化ライブラリの作成を開始する必要があります(これは苦痛になります)
どんな提案/洞察も大歓迎です
私は個人的に [〜#〜] glpk [〜#〜] LP_SOLVEよりも優れている(つまり高速である)ことを発見しました。さまざまなファイル形式をサポートし、さらなる利点は、アプリケーションとのスムーズな統合を可能にするライブラリインターフェイスです。
COIN-OR の別の承認。線形オプティマイザーコンポーネント(Clp)は非常に強力であり、混合整数コンポーネント(Cbc)は、いくつかの分析で非常にうまく調整できることがわかりました。 LP-SolveおよびGLPKと比較しました。
本当に難しい問題には、商用ソルバーが最適です。
SCIPソルバーを試してください。私は、良好なパフォーマンスで300Kを超える変数を持つMILP問題に使用しました。そのMILPパフォーマンスはGLPKよりもはるかに優れています。 GurobiはMILPの問題に対しても優れたパフォーマンスを発揮します(通常はSCIP(2011年5月)よりも優れています)が、アカデミックユーザーでない場合はコストがかかる可能性があります。 Gurobiはマルチコアを使用してソルバーを高速化します。
私なら、Osi(C++)やPuLP(python)などのマルチソルバーインターフェイスを使用して、一度コードを記述し、多くのソルバーでテストできるようにします。
解決しようとしている整数プログラムが巨大な場合、C++よりもpythonをお勧めします。コードがよりきれいに見え、99%の時間がソルバーに費やされるためです。
逆に、問題が小さい場合は、Pythonのメモリからソルバーに(前後に)問題をコピーする時間はもう無視されません:その場合、コンパイルされた言語を使用して顕著なパフォーマンスの改善を試すことができます。
しかし、問題が圧倒的に膨大な場合、メモリフットプリントが2で大まかに分割されるため、コンパイルされた言語が再び勝ちます(pythonの問題のコピーはありません)。
やってみました - lp_solve
? Javaについては、次の質問にもいくつかの提案がありました。
COINプロジェクトをチェックアウトすることをお勧めします。 コインOR
ここには、非線形問題用のipOPTやいくつかの混合整数ソルバーなど、多くの優れたソルバーがあります。
これは聞きたいことではないかもしれませんが、商用ソルバーのCPLEXとGurobiとオープンソースのソルバーとの間には光年があります。
それにもかかわらず、幸運にもモデルはGLPKやCoinなどで問題なく動作しますが、一般にオープンソースソリューションは商用ソルバーの背後にあります。異なる場合、Gurobiライセンスに12.000ドル、CPLEXライセンスにそれ以上の料金を支払う人はいません。
過去数年、私はオープンソースのソルバーにとって難しかった多くのモデルを見てきました。私を信じてください...
サイズの問題ではなく、数値の問題です。
Scip は悪くない!
NEOSサーバー( http://www.neos-server.org/neos/solvers/minco:DICOPT/GAMS.html )を使用してDICOPTを使用して、大規模(約1k変数と1k制約を解決)しました)混合整数非線形プログラムとそれが優れていることがわかった。
私の問題について、DICOPTは、neosサーバーBARON/KNITRO/LINDO/SBBなどにリストされている他のMINLPソルバーよりもはるかに優れていました。
NEOSへのジョブの送信には一定の制約があり、少し面倒ですが、強力な商用ソルバーへの無料アクセスはそれを補って余りあります。
10万個の変数は大きな問題です。多くのオープンソースライブラリは、そのような変数ではうまく機能しません。私が読んだことから、lp_solveは約3万個の変数についてのみテストされています。商用システムを使用することが唯一の選択肢かもしれません。
すでに優れた答えに以下を追加します。
他の人が指摘しているように、商用ソルバーは無料の選択肢よりもはるかに高速で能力が高いため、許容できる最適性のギャップを考慮することが重要です。多数の整数変数を含む大きな問題では、1%またはさらに大きな最適化ギャップ(デフォルトは0.01%以下になる傾向があります)を受け入れることができる場合、はるかに高速な解決時間を得ることができます。
もちろん、1%が数百万ドルに変換される問題を解決する場合、これは受け入れられません。したがって、一流のソルバーの市場です。 (Gurobiと無料のソルバーの比較 ここ )
他のソルバーを試すことができるので、ソルバーに依存しない問題ファイル(* .mps、*。lpファイルなど)を生成するプラットフォームを使用する価値があることに、他の人も同意します。 PuLP を使用していますが、それを見つけており、無料のCOIN_CBCソルバーを使用しています。多くの整数変数の問題に限定されていますが。
MIPCL( http://www.mipcl-cpp.appspot.com/index.html )について誰も言及していないことに驚いています。このソルバーはLGPLライセンス(ソース: http://www.mipcl-cpp.appspot.com/licence.html )の下でオープンソースであると主張しているため、非-オープンソースアプリケーション。しかし、本当にオープンソースであるために欠けているのは、ソルバー自体のソースコードです。
Hans Mittelmannはごく最近(2017年9月10日)混合整数線形計画ベンチマークを行いました: http://plato.asu.edu/ftp/milpc.html (概要ページもご覧ください) http://plato.asu.edu/bench.html または彼の講演のスライド: http://plato.asu.edu/talks/informs2017.pdf ) 。
12個のスレッドと2時間の制限時間を持つMixed Integer Linear Programmingベンチマークで、MIPCLは79個のインスタンスを解決できました。商用ソルバーCPLEX、Gurobi、およびXPRESSのみが、指定された制約(それぞれ86または87インスタンス)の下でさらに解決できました。
また、選択したパフォーマンスメトリックの観点から(再び12スレッドを使用)、MIPCLはベンチマークのSCIP派生(FSCIPC、FSCIPS)およびオープンソースソルバーCBCよりも高速です。再び、商業的なソルバーCPLEX、Gurobi、およびXPRESSのみが、パフォーマンスの点でMIPCLを大幅に凌ぎます。
オープンソースではありませんが、Microsoft Academic Allianceライセンスをお持ちの場合は、 Microsoft Solver Foundation (MSF)エンタープライズエディションが含まれています。 Gurobi は学術目的でも無料であり、論文研究で使用しました。