IPOPT
IPOPT(Interior Point OPTimizer、I-P-Opt と発音される)は、主双対内点法を利用した大規模(高次元)な連続最適化問題を解くライブラリである。C++で実装され、公開されているソースコードはEPLライセンスのもとで利用できる。
対象となる最適化問題
目的関数が以下の物で、
制約条件が以下の形式で与えられる物で、
下記の最適化問題を解く[1]。
f と g は微分可能でなければならない。大規模問題としては であれば、n = 100万でも実行できる。
アルゴリズム
IPOPT で実装されている最適化手法は、内点法の一種である主双対内点法に、フレッチャーとレイファーのフィルター法による直線探索[2]を組み入れたものであり、最適化対象の関数の一階偏導関数(ヤコビ行列)および二階偏導関数(ヘッセ行列)が与えられた場合はそれを利用する。ただしAMPLなどの計算環境から呼び出された場合には自動微分を行う。ヤコビ行列やヘッセ行列は疎行列を使うことにより高速化している[3]。ヘッセ行列が与えられない場合は準ニュートン法 (L-BFGS法) でその近似値で代用することもできる[4]。
API
ライブラリで実装されているAPIは、C++、C言語、Fortran、Javaなどのプログラミング言語や、MATLAB、R言語などの数値計算ソフトウェアから呼び出すことができる。非公式に、.NET Framework、Python、Scilab、Juliaのインターフェイスも作られている[5]。
開発
開発は COIN-OR (COmputational INfrastructure for Operations Research) プロジェクト[6]の一部として、オープンソースで行われている。
アンドレアス・ウェチター (Andreas Wächter) がカーネギーメロン大学のローレンツ・ビーグラー (Lorenz T. Biegler) 研究室の博士課程の学生だったときに始められ、その後、彼とカール・レアード (Carl Laird) がC++版を実装した。この二人は2011年にジェームズ・H・ウィルキンソン賞を受賞している。
脚注
関連項目
外部リンク
- ↑ Introduction
- ↑ R. Fletcher and S. Leyffer, Nonlinear programming without a penalty function, Mathematical Programrning, 91 (2002), pp. 239-269.
- ↑ Method eval_jac_g - The C++ Interface
- ↑ Quasi-Newton Approximation of Second Derivatives
- ↑ How to use IPOPT
- ↑ COIN-OR ホームページ