さまざまなR 2次計画ソルバーの違いは何ですか?


9

二次最適化の問題を解決するのに役立つパッケージを探しています。少なくとも6種類のパッケージがあることがわかりました。このページによると:

QP(二次プログラミング、90C20):cplexAPIkernlablimSolveLowRankQPquadprogRcplexRmosek

これらの一部(RmosekおよびcplexAPI)は他の独自のパッケージに依存しているので、私はそれらに興味がありません。

他のQPパッケージの注目すべき違いは何ですか?


与えられた参考資料を見ましたか?同じ手順/アルゴリズムは異なる実装を持つことができます。何か何かがinterior-pointtrust-regionまたはactive-setメソッドを使用してQP問題を解決する可能性がある場合。
usεr11852

1
osqpパッケージもあります。まばらなシステムの場合、Rで利用できる実装が群を抜いて最速です...
Tom Wenseleers

回答:


11
  • Cplex(cplexAPI、Rcplex):オープンソースではありません(ただし、毎年更新可能な無料のアカデミックライセンスがあります)。スパース行列をサポートしています。QPを使用しているときのQPのラッパーでした。アカデミックライセンスでは、多くのコア(たとえばmclapply())での使用が許可されていないことに注意してください。
  • ipop(kernlabにあるもの)は純粋なRで実装されています。これにより、大きなアプリケーションでは不必要に遅くなります。スパース行列はサポートしていません。
  • limSolveは完全な本格的なQPを解決しません。制約のタイプが等しいもののみを解決します。すべてのQP問題がこの方法でフレーム化できるわけではありませんが、その場合は、明示的な解決策があります。スパース行列はサポートしていません。
  • LowRankQP:これは私の経験上、良いものです(他のオープンソースのものと比べて速い)。スパース行列はサポートしていません。
  • quadprog:Goldfarb&Idnani DualおよびPrimal-Dualソルバーのベースライン実装。スパース行列はサポートしていませんが、中程度のサイズの問題に対しては高速で静かです。
  • Rmosek:試したことはありません。

編集。

この回答を書いたので、新しいパッケージipoptrがR-forgeで利用可能になりました。この R-bloggerの投稿では、純粋なQPでのパフォーマンスとquadprogでのパフォーマンスを比較しています。つまり、ipoptrはスパース行列のトリプレットをサポートし、設計行列がスパースの場合、quadprodよりもはるかに高速になる傾向があります。ただし、設計行列が密集している場合でも、quadprogは大幅に高速であるように見えます。


2
私の経験では、quadprogは中小規模の問題の方が高速であり、ipoptrは問題がかなり大きい場合にのみ高速になります。
Neal Fultz 16

2
これらのトピックに関する最近の一連のブログ投稿があります。例えば、参照blog.ryanwalker.us/2015/02/...
チャンドラー


1
また、quadprog には2次形式の正行列が必要です。
ae0709

osqpパッケージもあります。まばらなシステムの場合、Rで利用できる実装が群を抜いて最速です...
Tom Wenseleers
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.