拡張ラグランジュ関数法(かくちょうラグランジュかんすうほう、)とは、数理最適化において制約付き最適化問題に対するアルゴリズムの一種である。拡張ラグランジュ関数法は制約付き最適化問題を無制約最適化問題として扱うペナルティ関数法に類似した解法で、制約を目的関数にペナルティ項として加える解法であるが、ラグランジュ乗数と組み合わせた解法である。拡張ラグランジュ関数法はラグランジュの未定乗数法と関連した解法であるが、異なったアルゴリズムである。

言い換えると、拡張ラグランジュ関数法は制約付き最適化問題に対するラグランジュ関数にペナルティ項を加えたものとみなすことができる。

拡張ラグランジュ関数法は元々1970年代から1980年代にかけてペナルティ関数法の代替的手法として乗数法という名で知られていた。拡張ラグランジュ関数法は1969年にとによって始めて議論された。その後、によってフェンシェル双対に関連して研究され、特に構造最適化で用いられる近接点法、Moreau-Yoshida正則化、最大化と併せて研究された。またが1982年に出版した著書において非二次正則化関数の項目()で拡張ラグランジュ関数法について記載された。これらの研究から乗数法を指数型乗数法に拡張することができ、二階微分可能な拡張ラグランジュ関数として扱えるようになった。

1970年代以降、拡張ラグランジュ関数法が一部の数値解析ライブラリにおいて疎行列サブルーチンを容易に使用することが可能になり、理論による内点法の優れた大域的収束性の保証から、逐次二次計画法(SQP)および内点法(IPM)が研究されるようになった。拡張ラグランジュ関数法はLANCELOTやALGENCAN、AMPLなどの最適化システムに実装され、密行列をもつ問題を分割可能な問題によって行列を疎行列として扱えるようになり、注目されるようになった。このことから、拡張ラグランジュ関数法は現在でも使用されている , chapter 17。

2007年ごろから、拡張ラグランジュ関数法はや圧縮センシングの分野において使用されるようになった。特に、拡張ラグランジュ関数法の類似の解法によって連立方程式を解く解法のガウス=ザイデル法のように行列の部分更新する際に使用されるようになり、これは交互方向乗数法(略称:ADMM)として知られている。

一般的な解法 以下の制約付き最適化問題を考える:

subject to

ただし、 は等式制約とする。この問題は無制約最小化問題の一種として解くことができる。参考までに、 k回目の反復におけるペナルティ関数法の例を紹介する:

ペナルティ関数法では上記の問題を解いた後、次の反復ではより大きな の下で問題を解き直す。このとき、前の反復で求まった解 を使用することで問題の求解にてホットスタートすることができる。

拡張ラグランジュ関数法では以下の無制約の目的関数を用いる:

各反復において、 を更新し、 も以下の式によって更新される:

ただし、 はk番目の反復における問題を解いた解(例: )である。

変数 はラグランジュ乗数に対応しており、各反復において が真のラグランジュ乗数に近づいていく。拡張ラグランジュ関数法の利点はペナルティ関数法とは異なり元の問題を解くために とする必要が無いことが挙げられる。これは目的関数にラグランジュ乗数項が含まれていることから、 が小さい値の場合でも、ill-conditioning とならない。しかしながら、実用上では数値誤差を少なくすることと強い収束性を保証するために、高次元の有界な集合にラグランジュ乗数 を射影する手法が用いられている。

拡張ラグランジュ関数法は不等式制約付き最適化問題に対して拡張されている。

他の解法 逐次二次計画法 逐次線形計画法 逐次線形二次計画法

ソフトウェア 以下はオープンソース、有償・商用版のソフトウェアにおいて拡張ラグランジュ関数法が実装されているものをまとめたものである: Accord.NET(拡張ラグランジュ関数法が C# によって実装されている。) ALGLIB(ソルバーの前処理に使用するために拡張ラグランジュ関数法が C# および C++ によって実装されている。) PENNON(GPL 3, 商用ライセンス) LANCELOT(内部使用ライセンスとして無償、あるいは商用ライセンスもオプションとして存在する。) MINOS(いくつかの最適化問題に対して拡張ラグランジュ関数法が使用可能。) コードは Apache 2.0 licensed REASON として利用可能。 ALGENCAN (拡張ラグランジュ関数法が Fortran によって実装されている。)オンライン上で使用可能。 NLOPT(C++ によって実装されているが、他のプログラミング言語からも呼び出し可能。) PyProximal(拡張ラグランジュ関数法が Python によって実装されている。)

脚注

注釈

出典

参考文献

関連項目 バリア関数 内点法 ラグランジュの未定乗数法 ペナルティ関数法