IPOPT

IPOPT
作者 Andreas Wächter, Carl Laird
初版 2005年8月26日 (19年前) (2005-08-26)
最新版
3.12.12[1] / 2018年11月18日 (5年前) (2018-11-18)
プログラミング
言語
C++
対応OS UNIX, Linux, macOS, Windows
ライセンス Eclipse Public License
公式サイト projects.coin-or.org/Ipopt
テンプレートを表示

IPOPTInterior Point OPTimizer、I-P-Opt と発音される)は、主双対内点法を利用した大規模(高次元)な連続最適化問題を解くライブラリである。C++で実装され、公開されているソースコードEPLライセンスのもとで利用できる。

対象となる最適化問題

目的関数が以下の物で、

f : R n R {\displaystyle f:\mathbb {R} ^{n}\to \mathbb {R} }

制約条件が以下の形式で与えられる物で、

g L g ( x ) g U {\displaystyle g^{L}\leq g(x)\leq g^{U}}
x L x x U {\displaystyle x^{L}\leq x\leq x^{U}}

下記の最適化問題を解く[2]

min x R n f ( x ) {\displaystyle \min _{x\in \mathbb {R} ^{n}}f(x)}

f と g は微分可能でなければならない。大規模問題としては f ( x ) = i = 1 n x i 2 {\displaystyle f(x)=\sum _{i=1}^{n}x_{i}^{2}} であれば、n = 100万でも実行できる。

アルゴリズム

IPOPT で実装されている最適化手法は、内点法の一種である主双対内点法に、フレッチャーとレイファーのフィルター法による直線探索[3]を組み入れたものであり、最適化対象の関数の一階偏導関数ヤコビ行列)および二階偏導関数(ヘッセ行列)が与えられた場合はそれを利用する。ただしAMPLなどの計算環境から呼び出された場合には自動微分を行う。ヤコビ行列やヘッセ行列は疎行列を使うことにより高速化している[4]。ヘッセ行列が与えられない場合は準ニュートン法 (L-BFGS法) でその近似値で代用することもできる[5]

API

ライブラリで実装されているAPIは、C++C言語FortranJavaなどのプログラミング言語や、MATLABR言語などの数値計算ソフトウェアから呼び出すことができる。非公式に、.NET FrameworkPythonScilab、Juliaのインターフェイスも作られている[6]

開発

開発は COIN-OR (COmputational INfrastructure for Operations Research) プロジェクト[7]の一部として、オープンソースで行われている。

アンドレアス・ウェチター (Andreas Wächter) がカーネギーメロン大学のローレンツ・ビーグラー (Lorenz T. Biegler) 研究室の博士課程の学生だったときに始められ、その後、彼とカール・レアード (Carl Laird) がC++版を実装した。この二人は2011年ジェームズ・H・ウィルキンソン賞を受賞している。

脚注

[脚注の使い方]
  1. ^ Index of /download/source/Ipopt
  2. ^ Introduction
  3. ^ R. Fletcher and S. Leyffer, Nonlinear programming without a penalty function, Mathematical Programrning, 91 (2002), pp. 239-269.
  4. ^ Method eval_jac_g - The C++ Interface
  5. ^ Quasi-Newton Approximation of Second Derivatives
  6. ^ How to use IPOPT
  7. ^ COIN-OR ホームページ

関連項目

外部リンク

  • 公式ウェブサイト
  • 表示
  • 編集