ボックス制約を使用して、非線形最小二乗法min を実行する推奨方法は何ですか?ボックスの制約を2次式にして、を最小化できるように ここで、は、\ _ _ _ /、 ような形をした「タブ関数」です。 これは理論的に機能しますか、実際に機能しますか? (NLS +に関する多くの理論的な論文があるようですが、私の興味は実用的です—
実際のまたは現実的なテストケースは、方法の中から選択するのに役立ちます。)
(専門家、タグを追加してください:「最小二乗」?)
ボックス制約を使用して、非線形最小二乗法min を実行する推奨方法は何ですか?ボックスの制約を2次式にして、を最小化できるように ここで、は、\ _ _ _ /、 ような形をした「タブ関数」です。 これは理論的に機能しますか、実際に機能しますか? (NLS +に関する多くの理論的な論文があるようですが、私の興味は実用的です—
(専門家、タグを追加してください:「最小二乗」?)
回答:
制約を取り除くためにペナルティ項の2乗を追加することは、オーダー1 /ペナルティファクターのみの精度を与える単純なアプローチです。したがって、計算中にペナルティを無限大にしない限り、高精度にすることはお勧めしません。しかし、ペナルティ係数が高いと、ヘッセ行列は非常に悪条件になり、制約を明示的に考慮せずに達成可能な全体の精度が制限されます。
バインドされた制約はペナルティに変換されないので、一般的な制約よりもはるかに扱いやすいことに注意してください。
ソルバーL-BFGS-B(約5次元の履歴で使用)は、通常、両方の低次元と高次元の両方で、制限された制約付き問題を非常に確実かつ高速に解決します。例外は、解法から離れると非常にフラットになる可能性のある問題に対する誤収束であり、降下法では行き詰まりが発生しやすくなります。
グローバル最適化ソフトウェアの一部として非常にロバストな境界制約ソルバーが必要だったため、多くの異なるソルバーを使用して、多くの異なる次元で非常に多様な関数について多くの実験を行いました。L-BFGS-Bは明らかに汎用的な方法として際立っていますが、もちろんsmeの問題では、他のソルバーのパフォーマンスが大幅に向上します。したがって、最初の選択肢としてL-BFGS-Bをお勧めします。L-BFGS-Bが特定のクラスの問題をうまく処理できない場合に備えて、別の手法を試してみます。
私は単に汎用のNLPソルバー IPOPTを使用します。これは、私が試した中で最も堅牢なソルバーです。
特別な要件がない限り、ボックス制約のあるNLSでのみ機能する問題固有のソルバーを主張する理由はありません。
要件の変更(非線形制約の追加など)は、問題固有のソルバーで大きな頭痛の種を引き起こします。汎用IPOPTを使用すれば、そのような問題は発生しません。
解決手順は、IPOPTの驚くべき堅牢性を損なうことを犠牲にして、より速くなる可能性があります。私の意見では、利用可能な場合は正確な派生物を使用します。パフォーマンスの問題が証明された場合にのみ、近似(L-BFGSなど)をいじり始めます。
R minpack.lm CRANパッケージはボックス制約にレーベンバーグ・マルカートの実装を提供します。
一般に、Levenberg-Marquardtは最小二乗問題に対してL-BFGS-Bよりもはるかに適しています。挑戦的な問題に(はるかに)収束します。また、非線形最小二乗問題に合わせて調整されているため、汎用IPOPTよりもはるかに高速です。
Rパッケージは、制約を適用するために非常に単純な射影アプローチを選択します(ソースコードを参照)。使用しているLM実装によっては、簡単に含めることができます。
ここで、変換の使用に関するコメントでの提案(たとえば、scipyのような正弦変換)も、制約のないLMアルゴリズムを制約のあるLMアルゴリズムに変換するための優れた単純な代替手段です。ヤコビアンが分析的な場合は、変換をヤコビアンに含める必要もあります。
(数年後)ボックス制約を処理する2つのソルバー:
Scipy least_squaresに は3つのメソッドがあり、詳細なドキュメントがあります。