目次
概要
Maintainer: | Florian Schwendinger, Hans W. Borchers |
Contact: | R-optimization at mailbox.org |
Version: | 2024-10-06 |
URL: | https://CRAN.R-project.org/view=Optimization |
Source: | https://github.com/cran-task-views/Optimization/ |
Contributions: | このタスクビューに対する提案や改良は、GitHubのissueやpull request、またはメンテナのアドレスに電子メールで送ってください。詳しくはContributing guideをご覧ください。 |
Installation: | このタスクビューからのパッケージは、ctvパッケージを使用して自動的にインストールすることができます。例えば、ctv::install.views(“MetaAnalysis”, coreOnly = TRUE)は全てのコアパッケージをインストールし、ctv::update.views(“MetaAnalysis”)はまだインストールしていない全てのパッケージと最新のものをインストールする。詳細については、CRAN Task View Initiativeを参照してください。 |
このCRAN Task Viewには、最適化問題を解くための機能を提供するパッケージのリストが含まれています。統計学におけるすべての回帰モデルは、最適化問題を解きますが、それらはこのビューの一部ではありません。回帰手法をお探しの場合MachineLearning、Econometrics、Robustのビューが有用な出発点を含んでいます。このタスクビューの焦点は、最適化基盤パッケージまたは汎用連続ソルバ、数理計画ソルバ、最適化における特定のアプリケーション、多目的最適化です。
パッケージは、これらのセクションにしたがって分類されています。末尾の「関連リンク」「その他の資料」もご参照ください。
多くのパッケージは、このタスクビューの最後に記載されている複数のテーマに対して機能を提供しています。例えば、混合整数線形計画法ソルバは、シンプレックス アルゴリズムのような標準的な線形計画法のルーチンを提供するのが一般的です。したがって、各パッケージの説明の後にある略語のリストは、オプティマイザの典型的な機能(すなわち、解くことができる問題)を説明しています。角括弧で囲まれた略語の正式名称は、このタスクビューの最後にある「テーマによる分類」で確認できます。
もし、このリストにないパッケージがあると思われる場合は、管理者にメールでご連絡いただくか、上記のリンク先のGitHubリポジトリに課題またはプルリクエストを提出してください。
最適化のインフラストラクチャパッケージ
- optimxは、Base Rのoptim()の置換と拡張を提供し、単一の文でRの複数の関数最小化コードを呼び出します。これらのメソッドは、複数のパラメータまたは多数のパラメータのスムーズな、場合によってはボックスの制約付き関数を処理します。このパッケージの関数optimr()は、同じ構文でより多くの 「method」選択肢を指定してoptim()関数を拡張します。関数opm()は、いくつかのソルバを選択した最適化タスクに適用し、簡単な比較のために結果のデータフレームを返します。同様の機能を持ち、構文と出力がわずかに異なる初期のoptimx()関数は、互換性のために含まれています。また、保護されたニュートン法を含むいくつかのユーティリティコードと余分なソルバを実装します。詳細については、READMEを参照してください。
- Rの最適化インフラストラクチャ(ROI)パッケージは、Rの最適化問題を処理するためのフレームワークを提供します。オブジェクト指向アプローチを使用して、さまざまな問題クラス(例:線形、線形計画問題)。これにより、対応するワークフローが下にあるソルバから完全に抽象化されるため、Rユーザにとって最適化が透過的になります。このアプローチにより、ソルバ間の切り替えが容易になり、比較可能性が向上します。より多くの情報はROI home pageにあります。
- CVXRは、Disciplined Convex Programming(DCP)のオブジェクト指向モデリング言語を提供します。これにより、ユーザは、数学的な慣習とDCP規則に従って自然な形で凸最適化問題を定式化することができます。システムは問題を分析し、その凸性を検証し、正準形式に変換し、ECOSやSCSなどの適切なソルバに渡してソリューションを入手します。(CVXRは、スタンフォード大学で開発されたよく知られたMATLABツールボックスCVXに由来していますCVXR home page)。
汎用連続ソルバ
パッケージstatsには、いくつかの汎用最適化ルーチンが用意されています。1次元の拘束されていない関数の最適化のためには、最小または最大の区間を検索するoptimize()があります。optim()は、Broyden-Fletcher-Goldfarb-Shanno(BFGS)メソッド、CG、有界BFGS、共役勾配、Nelder-Mead、およびシミュレーテッドアニーリング(SANN)最適化メソッドの実装を提供します。提供されていれば、より速い収束のために勾配を利用する。通常は制約のない最適化に使用されますが、ボックス制約最適化のオプションが含まれています。さらに、線形不等式制約の対象となる関数を最小化するために、statsにはルーチンconstrOptim()が含まれています。次に、非線形制約のない最小化問題を解くために使用されるnlmがあります。最終的に、nlminb()は、PORTルーチンを使用した制約のない制約付き最適化を提供します。[RGA, QN]
- lbfgsは、L-BFGSとOWL-QNアルゴリズムの両方をインタフェースするOkazakiとMorales(NocedalのL-BFGS-B 3.0 Fortranコードから変換された)によるlibBFGS Cライブラリをラップします。後者は特に高次元の問題に適しています。
- lbfgsb3cは、両方ともJ.NocedalのL-BFGS-B 3.0インタフェースFortranコード、制限されたメモリBFGS最小化機能、境界制約を許容し、高次の問題に適用可能です。(「lbfgsb3c」には 「Rcpp」に基づく「最適な」のようなインタフェースがあります。)
- roptimは、optim()ソルバの基礎となるアルゴリズムのC ++関数を呼び出す統合ラッパーを提供します。
- optimParallelは、optim()のL-BFGS-Bメソッドの並列バージョンを提供します。これらのパッケージを使用すると、最適化時間を大幅に短縮できます。
- RcppNumericalは、数値計算と「Rcpp」との統合のためのオープンソースライブラリのコレクションです。LBFGS ++ライブラリ(N. Okazakiのコードに基づく)に基づいて、L-BFGSアルゴリズムのラッパーを提供します。
- ucminfは、信頼領域とライン検索手法を組み合わせた、非線形制約のない最適化のための準ニュートン型のアルゴリズムを実装しています。[QN]
- mizeは、共役勾配 (CG)、Broyden-Fletcher-Goldfarb-Shanno(BFGS)および制限されたメモリBFGS(L-BFGS)メソッドを含む純粋なRで最適化アルゴリズムを実装します。ほとんどの内部パラメータは、呼び出しインタフェースを介して設定できます。
- n1qn1は、Scilabから移植されたn1qn1最適化手順(制約条件のない準ニュートンBFGS法)のR移植版を提供します。
- stochQNは、LBFGSと同様の精神を持つ、確率的でメモリ制限のある準ニュートン最適化器の実装を提供します。オンラインLBFGS、ストキャスティック準ニュートン、適応型準ニュートンの実装が含まれています。
- nonneg.cgは、すべての変数が非負である関数を最小化する共役勾配ベースの方法を実現します。
- dfoptimは、Nelder-MeadアルゴリズムとHooke-Jeevesアルゴリズムの非常に効率的なR実装(無制約と境界制約)を含んでいます。[DF]
- nloptrは、さまざまな非線形最適化アルゴリズムのLGPLライセンスライブラリであるNLoptへのアクセスを提供します。これには、ローカル非派生(COBYLA、Nelder-Mead、Subplex)およびグラジエントベース(BFGSなど)メソッド、および非線形制約のための拡張ラグランジアンアプローチが含まれます。[DF、GO、QN]
- 滑らかな非線形目的関数(平等および不等式制約付き)を最適化するための拡張ラグランジュバリア最小化アルゴリズムの実装は、alabamaおよびRsolnpで見つけることができます。
- NlcOptimは、線形および非線形の等価性および不等式制約を伴う非線形最適化問題を解決し、SQP(Sequential Quadratic Programming)メソッドを実装します。
- Rdonlp2(rmetricsプロジェクト参照)関数DONLP2ソルバのラッパーであるdonlp2()は、滑らかな非線形関数と制約の最小化を提供します。DONLP2は、あらゆる種類の研究目的に自由に使用できます。それ以外の場合はライセンスが必要です。[GO、NLP]
- psqnは、部分的に分離可能な関数を最小化する準ニュートン法を提供します。この手法の大部分は、Nocedal and Wright (2006) の「Numerical Optimization」に記載されています。
- clueは、逐次無制約最小化手法(SUMT)を介して制約付き最適化問題を解く関数sumt()を含みます。
- BBは、単純な制約を伴う大規模な最適化のためのスペクトル投影勾配法を提供する関数spg()が含まれています。これは、非線形目的関数を基本的制約と同様に引数として取ります。さらに、BBは、方程式の非線形システムを解くためにスペクトル勾配法を使用するための2つの関数(dfsane()とsane())を含んでいます。
- ManifoldOptimは、最適化ライブラリ ‘ROPTLIB’ の R インタフェースです。Stiefel、Grassmann、Symmetric Positive Definite matricesなどの多様体上の実数値関数を最適化します。
- calibrarは、複雑で確率的なモデルの一般的な最適化とパラメータ推定を可能にします。これは、様々な最適化ソルバを単一のインタフェースに統合し、Base Rのoptim()と同じ構文を使用します。
- neldermeadは、Scilab neldermead モジュールの R ポートを含んでおり、シンプレックスアプローチに基づくいくつかの直接探索アルゴリズムが提供されています。
- optimsimplexは、Nelder-Mead、Spendley、Box法、あるいはTorczonによる多次元探索など、シンプレックスに基づく最適化アルゴリズムのためのビルディングブロックを提供します。
- minqaは、いくつかの派生フリー最適化アルゴリズムが用意されています。関数bobyqa()、newuoa()、およびuobyqa()は、補間によって二次モデルを形成する信頼領域法によって多くの変数の関数を最小にすることを可能にする。bobyqa()はさらに、パラメータのボックス制約(境界)を許可します。[DF]
- subplexは、部分空間検索シンプレックス法に基づく無制約の関数最適化を提供します。
- trustは、同じ名前のルーチンが、「信頼領域」アプローチに基づいてローカル最適化を行います。
- trustOptimは、制約のない非線形最適化のための「信頼領域」アルゴリズムを実装しています。このアルゴリズムは、疎なヘッセ行列を持つ目的関数に対して最適化されています。これにより、時間とメモリの両方の占有面積の観点から、スケーラビリティと効率性が高いアルゴリズムになります。
- quantregは、シンプレックスと内部ポイントルーチン(nlrq()、crq())のバリエーションが含まれています。関数rq()のRコードのL1回帰へのインタフェースを提供します。[SPLP、LP、IPM]
- marqLevAlgは、Marquardt-Levenbergアルゴリズムの並列化バージョンを実装しています。このアルゴリズムは,複雑な問題や,最終的な最適値から非常に遠い点から開始する場合に特に適しています。このパッケージは、制約のない局所最適化に使用するように設計されています。[NLP]
- aoは、交互最適化と呼ばれる反復手順を実装しており、個々のパラメータサブセットに対して制限された最適化を交互に実行することにより、すべてのパラメータに対して関数を共同で最適化します。
- optimizeRは、汎用の連続ソルバのラッパー関数を簡単に作成するための関数を提供します。
二次最適化
- quadprogのsolve.QP()は、線形等価制約と不等式制約を持つ2次計画問題を解きます。(行列は正定値でなければならない)。
- quadprogXTは、これを目的関数の絶対値制約と絶対値で拡張します。[QP]
- kernlabは、内点法を使った二次計画問題を解く関数ipopが含まれています。(行列は正の半正定値とすることができます)。[IPM、QP]
- Dykstraは、正定値および準定値行列のR.L.Dykstraの循環投影アルゴリズムを使用して、二次計画問題を解決します。このルーチンでは、等価制約と不等式制約を組み合わせることができます。[QP]
- osqpは、オプションの等価性と不等式の制約で疎な凸2次計画問題を解くことができる、「OSQP 」ソルバ、Oxford Control Group大学の「Operator Splitting QP Solver」にバインディングを提供します。[QP]
- piqpは、近接内点 2 次計画法ソルバへのインタフェースを実装します。 PIQP; 実行不可能な内点法と乗算器の近似法を組み合わせたものです。 [QP]
- qpmadrは、「qpmad」ソフトウェアとインタフェースし、GoldfarbとIdnaniによる方法を使用して、線形不等式、等式、および境界制約を伴う2次計画法(QP)問題を解決します。[QP]
- coneprojは、円錐投影法や二次計画法、制約付きパラメトリック回帰の推定と推論、形状限定回帰問題のルーチンが含まれています。[QP]
- COIN-ORプロジェクトのqpOASESは、半定型または縮退したQP問題に対処する場合でも、信頼できるQPソルバを実装します。特にモデル予測制御(MPC)アプリケーションに適しています。ROIプラグインROI.plugin.qpoasesは、Rユーザにアクセス可能にします。[QP]
- LowRankQPは、線形制約を持つ低ランク(および半定値)二次計画問題を、原始二元内点法を実装することによって解く。[QP]
- limSolveは、等式や不等式の制約を受けて、線形または二次最適化関数を解くことを提供します。[LP、QP]
テストとベンチマークのコレクション
- グローバル最適化アルゴリズムのパフォーマンスをベンチマークする目的関数は、globalOptTestsにあります。
- smoofは、ベンチマーク最適化アルゴリズムで頻繁に使用される多数の単一目的と多目的のテスト機能用のジェネレータがあります。
- flaccoは、最適化問題のグローバル構造や分離可能性などのかなり複雑な特性を定量化できる連続最適化問題の探索的ランドスケープ分析(ELA)に使用されるツールと機能が含まれています。
- 「cec2013」および「cec2005benchmark」(共にアーカイブス) は、進化計算に関するIEEE CEC 会議の実パラメータ最適化に関する2005年と2013年の特別セッションから、グローバル最適化に関する多くのテスト関数が収められています。
- funconstrain(Github上)は、More、Garbow、Hillstomの35種類のテスト関数を実装しています。制約のない最適化メソッドをテストするのに便利です。
最小二乗問題
- solve.qr()(qr.solve())は、可能な限り、最小二乗解を返す線形方程式の過大および過小決定システムを処理します。また、パッケージstatsはnls()を提供して、非線形モデルのパラメータの最小二乗推定値を決定します。
- nls2は、ブルートフォースまたはグリッドベースの検索機能を使用してnls()関数を拡張し、開始パラメータに依存しないようにするか、ローカルの解決策に慣れないようにします。
- nlsrは、非線形最小二乗問題を扱うためのツールを提供します。関数nlfbとnlxbは、基底Rの「nls()」関数に代わって、境界制約を持つ非線形最小二乗法と、必要に応じてR関数として記述されたヤコビ行列に対してMarquardt手続きの変形を適用することを目的としています。
- minpack.lmは、Levenberg-Marquardtアルゴリズムの修正により、非線形最小二乗問題を解くための関数nls.lm()を提供し、MINPACKに見られるように、より低いおよびより高いパラメータ境界をサポートしています。
- onlsは、Levenberg-Marquardt最小化法を用いた直交非線形最小二乗回帰(ONLS)により、2次元データをフィットします。フィット診断とプロットの機能を提供し、「変数における誤差」問題に遭遇したときに問題となります。
- nnlsは、Lawson-Hansonの非負最小二乗アルゴリズムの実装にインタフェースし、非負の制約と非負の制約を組み合わせることができます。
- lseiは,線形等式/非等式制約のもとで最小二乗線形回帰問題を解く関数を含んでいます。二次計画問題を解く関数も用意されており、このような問題をまず最小二乗法に変換します。(LawsonとHansonのFortranプログラムが元になっています。)
- gslnlsは、GNU Scientific Library (GSL)の非線形最小二乗最適化法へのインタフェースを提供します。利用可能な信頼領域法には、測地線加速を伴う場合と伴わない場合のLevenberg-Marquadtアルゴリズム、およびPowellのdoglegアルゴリズムのいくつかのバリエーションがあります。
- bvlsは、Stark-Parkerの上界と下界変数を持つ最小二乗アルゴリズムの実装をインタフェースします。
- colfは、線形目的関数に対して最小自乗制約付き最適化を実行します。これには、選択するアルゴリズムがいくつか含まれており、lm()と同様の数式構文が用意されています。
- nlsicは、非線形最小二乗問題(ランク不足の可能性あり)を線形等式・不等式制約で解きます。線形化された問題は、nnlsを用いることにより、LSI(不等式制約付き線形最小二乗法)、すなわちQRベースとして解かれます。非線形反復はバックトラック法によってグローバル化されます。
半定値と凸面ソルバ
- ECOSolveRは、よく知られた効率的で頑強な凸状問題のCライブラリであるEmbedded COnic Solver(ECOS)へのインタフェースを提供します。混合整数問題の整数およびブール変数の制約に加えて、円錐定数および等価制約を指定することができます。
- scsは、線形プログラム、円錐プログラム(SOCP)、および半正定値プログラムを解くための演算子分割を適用します。コーンは2次、指数関数、パワーコーン、またはこれらの任意の組み合わせです。
- clarabelは、線形計画 (LP)、二次計画 (QP)、二次錐計画 (SOCP)、半正定値計画 (SDP)、指数制約と冪錐制約を持つ問題を解く新しい同次埋め込みを用いた凸最適化問題のための内点数値ソルバを提供します。
- sdpt3rは、MATLABツールボックスSDPT3のR実装を使用して、一般的な半正定値線形計画問題を解きます。最近接相関行列、D最適実験計画法、距離加重判別法、最大カット問題などの問題を含みます。
- cccpは、内点法(部分的にはPythonのCVXOPTから移植されている)を使って、円錐拘束凸問題を解くためのルーチンが含まれています。
- CSDPは、半正定値プログラミング問題を解決するためのプライマリ – デュアルバリアメソッドを実装するルーチンのライブラリです。Rcsdpにインタフェースされています。[SDP]
- DSDPライブラリは、プライマリおよびデュアルソリューションによる半正定値プログラミングのための内点法を実装しています。Rdsdpにインタフェースされます。[SDP]
- Rmosekは、(非線形)円錐、半正定値、および凸面タスクに重点を置いて、大規模なLP、QP、およびMIP問題のための(市販の)MOSEK最適化ライブラリへのインタフェースを提供します。学術ライセンスが利用可能です。(Rmosekに関する記事はJSSのR特集号の特別号に掲載されました。以下を参照してください)。[SDP、CP]
グローバルおよび確率的最適化
- DEoptimは、Differential Evolutionアルゴリズムに基づくグローバルオプティマイザを提供します。
- RcppDEは、同じDEoptim()のC ++実装(Rcppを使用)を提供します。
- DEoptimRは、非線形プログラミング問題のための差分進化確率的アルゴリズムのjDE変形の実装を提供します(これは、制約を柔軟に扱うことを可能にします)。
- GenSAは、一般化されたSimulated Annealingのための関数を提供するパッケージであり、多数の最適化を伴う非常に複雑な非線形目的関数のグローバルな最小値を探索するために使用することができます。
- GAは、連続アルゴリズムと離散アルゴリズムの両方で遺伝的アルゴリズムを使用した最適化のための関数を提供します。このパッケージでは、対応する最適化タスクを並行して実行できます。
- gafitの gafit() は、遺伝的アルゴリズムを用いて、一次元関数の最小値を求めます。
- genalgは、多次元関数最適化のための遺伝的アルゴリズムの実装であるrgba()が含まれています。
- rgenoudは、進化的アルゴリズムと微分ベース(準ニュートン)アプローチを組み合わせることによって、複雑な関数最小化/最大化問題を解くことができるルーチンであるgenoud()を提供します。
- mcgaが提供する機械コード化遺伝的アルゴリズム(MCGA)は、変数のバイト表現に基づいて最適化の問題を解決するツールです。
- Particle Swarm Optimizer(PSO)は、psoとpsoptimに実装されています。PSOアルゴリズムの別の(並列化された)実装は、rforge.net/ppsoから入手可能なパッケージppsoにあります。
- hydromad (Github上)は、シンプレックス法と組み合わせた進化的アルゴリズムであるSCE(Shuffled Compex Evolution)最適化のためのSCEoptim関数が含まれています。
- ABCoptimは、人工蜂コロニー(ABC)最適化を実装しています。
- metaheuristicOptは、パーティクル群、トンボとホタル、サインコサインアルゴリズムなどのいくつかの進化的最適化アルゴリズムの実装が含まれています。
- ecrは、単一または複数目的の連続または離散最適化問題のための進化的アルゴリズムを構築するためのフレームワークです。
- emoaは、進化的多目的最適化アルゴリズムの設計と分析のためのビルディングブロックのコレクションがあります。
- MaOEAは、制約付き、制約なし、単一目的、複数目的、連続および整数最適化問題、確率および決定論的問題を解くことができるPythonパッケージpygmoへのインタフェースを提供します。
- N.ハンセン(N. Hansen)のCMA-ESは、進化戦略に適応する共分散行列を用いた大域最適化手順であり、いくつかのパッケージで実装されています。
- Rmalschainsは、ローカルサーチチェーン(MA-LS-Chains)を持つmemeticアルゴリズムと呼ばれる連続最適化のアルゴリズムファミリを実装しています。
- SOMA(Self-Organizing Migrating Algorithm)のR実装は、somaで利用できます。この確率的最適化方法は、遺伝的アルゴリズムと幾分類似しています。
- nloptrは、DIRECT、制御ランダム探索(CRS)、マルチレベルシングルリンケージ(MLSL)、確率的ランク付け(ISR-ES)、確率的グローバル最適化(StoGO)などのいくつかのグローバル最適化ルーチンをサポートしています。
- NMOFは、微分進化、粒子群最適化、局所探索、閾値受理(シミュレーテッドアニーリングの変形)の実装を提供します。後者の2つの方法は、パッケージに含まれる遺伝的アルゴリズムの実装と同様に、離散最適化問題のためにも機能します。
- neighboursは、局所探索メソッド用の近傍関数を構築するためのツールを提供し、例えばpkg(「NMOF」)`パッケージで使用することができます。
- OORは、決定論的関数または確率関数のグローバル最適化のための楽観的最適化手法を実装しています。
- RCEIMは、多次元関数最適化を実行するための確率的ヒューリスティック手法を実装します。
- graDiEntは、確率的準グラジエント微分進化(SQG-DE)最適化アルゴリズムを実装しています。微分を使用しないため、母集団ベースの「微分進化」のロバスト性と勾配ベースの最適化の効率性を兼ね備えています。
数学プログラミングソルバ
このセクションでは、オープンソースと商用オプティマイザの概要について説明します。特定のパッケージまたは関数によってどのタイプの数学的プログラミング問題が解決できるかは、角括弧内の省略形から見ることができます。Classification According to Subjectは、このタスクビューの最後にリストを表示します。
- omprは、混合整数リニアプログラムをRで直接代数的にモデル化して解く最適化モデリングパッケージです。モデルはソルバに依存しないため、さまざまなソルバを使用してモデルを解くことができます。(JuiaのJuMPプロジェクトに触発されました。)
- linprogは、solveLP()(ソルバはlpSolve に基づいています)を使用して線形プログラミングの問題を解決し、MPS形式のモデルファイルを読み込むことができます。[LP]
- bootは、(比較的小さな)線形プログラミング問題の2相tableau simplexメソッドを実現するsimplex()というルーチンがあります。[LP]
- rcddは、GNU Multiple Precision (GMP)ライブラリを使用して厳密な算術を使って線形プログラムを解くための関数lpcdd()を提供します。[LP]
- CEoptimは、連続および組合せ最適化問題のためのクロスエントロピー法に基づく最適化ソルバを提供します。これは、多極の問題を解決するために使用でき、線形制約を受け入れ、離散変数と連続変数を扱うことができます。[COP]
- NEOS Server for Optimizationは、最先端の最適化問題ソルバにオンラインでアクセスします。rneosおよびROI.plugin.neosを使用すると、最適化問題をNEOSに渡し、R内の結果を取得できます。
オープンソース・オプティマイザのインタフェース
- lpSolve は、自由に利用可能なソルバlp_solveを呼び出すことによってLPとMILPを解くルーチンlp()が含まれています。このソルバは、改訂されたシンプレックス法とブランチアンドバインド(B&B)手法に基づいています。準連続変数と特別注文セット(SOS)をサポートしています。さらに、lp.assign()とlp.transport()はそれぞれ割り当て問題と輸送問題を解決することを目的としています。
- さらに、lp_solveの低レベルAPIルーチンへのRインタフェースを提供するパッケージlpSolveAPIもあります(R-Forgeのプロジェクトlpsolveも参照してください)。
- lpSolveAPIは、lpおよびMPS形式のファイルから線形プログラムを読み取ることをサポートしています。[BP、IP、LP、MILP、SPLP]
- glpkAPIとRglpkは、GNU Linear Programming Kit(GLPK)へのインタフェースを提供します。前者は低レベルのルーチンへの高レベルのアクセスを提供しますが、後者はGLPKを使用してMILPを解決するための高レベルルーチンRglpk_solve_LP()を提供します。どちらのパッケージも、MPS形式で策定されたモデルを使用する可能性があります。[BP、IP、IPM、LP、MILP]
- Rsymphonyは、混合整数リニアプログラムのためのSYMPHONYソルバをインタフェースするルーチンRsymphony_solve_LP()があります。(SYMPHONYは、Computational Infrastructure for Operations Research(COIN-OR)の一部です)。Bioconductorのパッケージlsymphonyは、インストールが簡単なSYMPHONYと同様のインタフェースを提供します。[LP、IP、MILP]
- NOMADソルバは、混合整数計画問題を解決するためのcrsに実装されています。このアルゴリズムはsnomadr()関数を介してアクセスでき、主にブラックボックス関数の制約付き最適化用に設計されています。
- 「Clp」と「Cbc」は、COIN-ORスイートのオープンソースソルバです。
- 「Clp」は、連続目的変数を持つ線形プログラムを解きます。
- 「Cbc」は、「Clp」をベースにした強力な混合整数線形プログラムソルバであり、すなわち整数変数が設定されていない場合は「Clp」を適用します。
- 「Cbc」は、 rcbcからインストールすることができます。[LP, MILP]
- highsは、HiGHSソルバへのRインタフェースです。HiGHSは、現在、オープンソースの混合整数線形計画ソルバとして最も優れているものの一つです。さらに、二次最適化問題(混合整数制約なし)の解法にも使用できます。[MILP、QP]
商用オプティマイザーとのインタフェース
このセクションでは、商用ソルバへのインタフェースを調査します。通常、対応するライブラリは別々にインストールする必要があります。
- Rcplexは、IBM CPLEX Optimizerにインタフェースを提供します。CPLEXは、デュアル/プリミティブシンプレックスオプティマイザと、大規模な線形および二次プログラムを解決するバリアオプティマイザを提供します。これは、(おそらく非凸)MIQCPを含む困難な混合整数プログラムを解決するための混合整数最適化を提供します。CPLEXは無料ではなく、ライセンスを取得する必要があります。学者は要請に応じて無料のライセンスを受け取ります。[LP、IP、BP、QP、MILP、MIQP、IPM]
- Rmosekは、MOSEKの商用オプティマイザへのインタフェースを提供します。デュアル/プライマルシンプレックスオプティマイザとバリアオプティマイザを提供します。LPおよびQP問題を解決することに加えて、このソルバはSOCPおよび二次制約付きプログラミング(QPQC)タスクを処理できます。さらに、難解な混合整数プログラム(MILP、MISOCPなど)を解決するための整数型オプティマイザを提供しています。MOSEKからライセンスを取得する必要があることに注意してください。アカデミックライセンスは無料です。[LP、IP、BP、QP、MILP、MIQP、IPM]
- Gurobi Optimizationは、そのソフトウェアにRパッケージを同梱しており、Rからソルバを呼び出すことができます。Gurobiは、LP、MIP、QP、MIQP、SOCP、MISOCPモデルに対する強力なソルバを提供しています。詳細はGurobiのホームページをご覧ください。(アカデミックライセンスはご要望に応じてご提供いたします)。[LP, QP, MILP, MIQP]
「LocalSolver」、「Artelys Knitro」、「FICO Xpress Optimization」などの営利企業には、ソフトウェアをインストールする際にインストールされるRインタフェースがあります。試用ライセンスも用意されているので、詳しくは各社のウェブサイトを参照されたい。
組み合わせ最適化
- adagioは、単一および複数のナップザック問題の関数を提供し、サブセットの合計と割り当てタスクを解決します。
- clueは、solve_LSAP()を使用すると、ハンガリーのアルゴリズムの効率的なC実装を使用して、線形和割り当て問題(LSAP)を解くことができます。
- TreeDistの関数LAPJV()は、線形和割り当て問題(LSAP)をさらに高速に解くJonker-Volgenantアルゴリズムを実装しています。[SPLP]
- qapは、シミュレートされたアニーリングヒューリスティックを適用する二次割り当て問題(QAP)を解決します(他の方法もあります)。
- グラフとネットワーク解析用のigraphは、非常に高速のigraph Cライブラリを使用しています。最短パス、最大ネットワークフロー、最小スパニングツリーなどを計算するために使用できます[GRAPH]
- mknapsackは、「lpSolve」や「CBC」などのLPソルバに基づいて複数のナップザック問題を解決します。トップのナップザックの値ができるだけ大きい方法でアイテムをナップザックに割り当てます。
- パッケージ「knapsack」(R-Forgeのプロジェクトのoptimistを参照)はMartelloとTothの書籍「Knapsack Problems」のルーチンを提供しています。(複数の)ナップザック、サブセット、およびビンパッキングに関する問題があります。(Fortranコードの使用は、個人研究および学術目的のみに限定されます。)
- nildeは、線形ディオファンタス方程式のすべての整数解、ナップザックのすべての解、部分集合の和、および加算的な分割問題(生成関数アプローチに基づく)を列挙するルーチンを提供します。
- matchingRとmatchingMarketsは、安定した結婚と大学入学問題、安定したルームメイトと家割当て問題のためにGale-Shapleyアルゴリズムを実装しています。[COP、MM]
- optmatchは、マッチング問題を最小コストフロー問題に変換し、BertsekasとTsengのRELAX-IVコードによって最適に解くルーチンを提供する(研究用は無料)。
- TSPは、営業担当者の問題(TSP)を処理し、解決するための基本的なインフラストラクチャを提供します。メインルーチンsolve_TSP()は、いくつかのヒューリスティックを通じてTSPを解きます。さらに、Concorde TSP Solverへのインタフェースを提供します。これは別途ダウンロードする必要があります。[SPLP]
- rminizincは、オープンソースの制約モデリング言語およびシステム(別途ダウンロード)であるMiniZincへのインタフェースを提供します。Rのユーザは、このパッケージを適用して、既存の「MiniZinc」モデルを修正したり、独自のモデルを作成したりして、組み合わせ最適化問題を解くことができます。
多目的最適化
- caRamel内の関数caRamelは、多目的進化的アニーリング – シンプレックス(MEAS)法と非優性ソーティング遺伝的アルゴリズム(NGSA-II)の組み合わせを適用する多目的オプティマイザです。それは当初、水文学モデルの較正のために開発されました。
- 遺伝的アルゴリズムを実装するmcoを使用して、複数の基準最適化の問題を解決できます。[MOP]
- GParetoは、高価なブラックボックス関数と不確実性の定量化方法のための多目的最適化アルゴリズムを提供します。
- rmooは、多目的最適化のためのフレームワークで、実数の表現、並べ替え、バイナリを扱うことができ、幅広い設定が可能です。
最適化における特定のアプリケーション
- maxLikは、Brendt-Hall-Hall-Hausman(BHHH)やNewton-Raphsonのような多数の最大化ルーチンの上に尤度特有のレイヤーを追加します。ヘッセ行列に基づいて標準誤差を抽出し、最大化アルゴリズムの簡単な交換を可能にする要約および印刷方法を含む。また、分析微分値が直接計算されるかどうかをチェックする機能も提供します。
- データクローニングアルゴリズムは、グローバル最適化手法と、dcloneで実装されているシミュレーテッドアニーリングの変形です。このパッケージは、データクローニングとベイジアンマルコフ連鎖モンテカルロ法を用いた複雑なモデルの最尤推定手順を実装するための低レベル関数を提供します。
- mixsqpは、有限混合モデルにおける最尤推定のための、逐次二次計画法(SQP)に基づく「mix-SQP」アルゴリズムを実装しています。
- iraceは、他の最適化アルゴリズムのパラメータを最適化するための自動構成手順を実装します。つまり、一連の最適化問題が与えられた場合に最も適切な設定を見つけることによって、パラメータを(オフラインで)調整します。
- kofnGA は、遺伝的アルゴリズムを使用して整数1:nから固定サイズkのサブセットを選択し、ユーザが提供する目的関数がそのサブセットで最小化されるようにします。
- copulaedasは、コピュラに基づいた「分配アルゴリズムの推定」(EDA)が実装され、研究されることができるプラットフォームを提供します。パッケージはさまざまなEDAを提供し、S4クラスを拡張することで新しく開発されたEDAを統合することができます。
- tabuSearchは、バイナリ文字列を最適化するためのタブー検索アルゴリズムを実装し、ユーザ定義のターゲット関数を最大化し、見つかった最良の(すなわち最大化する)バイナリ設定を返す。
- isotoneは、一般的なアイソトーン回帰の問題を解決するための機能のほかに、任意の順序制約を伴うアイソトーン最適化問題のアクティブセットメソッドのフレームワークを提供します。
- mlrMBOは、ベイズ最適化とも呼ばれる、モデルベースの最適化(MBO)のための柔軟で包括的なRツールボックスです。また、rBayesianOptimizationは、パラメータのチューニングとハイパーパラメーターの最適化のために、ガウスプロセスによるベイジアングローバル最適化の実装です。
- desirabilityは、Derringer and Suich(1980)が記述した関数形式を用いたHarrington(1965)のdesirability関数アプローチを用いた多変量最適化のためのS3クラスが含まれています。
- snaは、二変量グラフ統計量を最適化するための一連のヒューリスティックルーチンのフロントエンドである関数lab.optimize()が含まれています。[GRAPH]
科目別分類
以下は、パッケージ別の概要を提供する試みです。被験者の氏名および対応するMSC 2010 コード(利用可能な場合)は括弧内に記載されています。
- LP (Linear programming, 90C05): boot, glpkAPI, limSolve, linprog, lpSolve, lpSolveAPI, quantreg, rcdd, Rcplex, Rglpk, Rmosek, Rsymphony, highs
- GO (Global Optimization): DEoptim, DEoptimR, graDiEnt, GenSA, GA, pso, rgenoud, cmaes, nloptr, NMOF, OOR, gafit
- SPLP (Special problems of linear programming like transportation, multi-index, etc., 90C08): clue, lpSolve, lpSolveAPI, quantreg, TSP
- BP (Boolean programming, 90C09): glpkAPI, lpSolve, lpSolveAPI, Rcplex, Rglpk
- IP (Integer programming, 90C10): glpkAPI, lpSolve, lpSolveAPI, Rcplex, Rglpk, Rmosek, Rsymphony
- MIP (Mixed integer programming and its variants MILP for LP and MIQP for QP, 90C11): glpkAPI, lpSolve, lpSolveAPI, Rcplex, Rglpk, Rmosek, Rsymphony, highs
- QP (Quadratic programming, 90C20): kernlab, limSolve, quadprog, Rcplex, Rmosek, highs
- SDP (Semidefinite programming, 90C22): Rcsdp, Rdsdp
- CP (Convex programming, 90C25): cccp
- COP (Combinatorial optimization, 90C27): adagio, CEoptim, TSP, matchingR
- MOP (Multi-objective and goal programming, 90C29): caRamel, GPareto, mco, emoa, rmoo, MaOEA
- NLP (Nonlinear programming, 90C30): nloptr, alabama, Rsolnp, Rdonlp2 (in rmetrics on R-Forge)
- GRAPH (Programming involving graphs or networks, 90C35): igraph, sna
- IPM (Interior-point methods, 90C51): kernlab, glpkAPI, quantreg, Rcplex
- RGA (Methods of reduced gradient type, 90C52): stats ( optim()), gsl
- QN (Methods of quasi-Newton type, 90C53): stats ( optim()), gsl, lbfgs, lbfgsb3c, nloptr, optimParallel, ucminf, n1qn1
- DF (Derivative-free methods, 90C56): dfoptim, minqa, nloptr, optimsimplex, neldermead
ピンバック:R言語 CRAN Task Views | トライフィールズ