非線形制約付き最小化のためのC ++ライブラリ


9

現在、MATLABの「fmincon」関数に実装されている非線形制約付き最小化問題を解決しようとしています。私の期待は、minimize(fun1、x0、uB、lB、fun2)です。ここで、x0は初期状態、fun1は最小化する必要がある関数、uBは上限、lBは下限、fun2は非線形等式のベクトルを提供する関数です。 /不等式に記載されているようにhttp://www.mathworks.com/help/optim/ug/fmincon.htmlnonlcon関数として。これらのベクトルも反復によって変化します(これらは、解ベクトルのn番目の反復であるx_nに非線形に依存しています)。matlab実装では、c(x)<= 0の形式です。これは、MATLABからC ++に移植する必要のある最後のコードであり、このアルゴリズムを含む適切なC ++ライブラリを見つけるために多くの苦労をしてきました。これが私がここで助けを求めている理由であり、あなたの専門知識を提供していただければ幸いです。

私がしたいことの良い例は、このページの最初のものですhttp://www.mathworks.com/help/optim/ug/constrained-nonlinear-optimization-examples.html#f10960?s_tid=doc_12b唯一の違いは、境界も必要です...

前もって感謝します。

ピーター


NLOPT ab-initio.mit.edu/wiki/index.php/NLopt_C-plus-plus_Referenceを使用する可能性がありますが、目的関数から「最小化された」関数評価への複数の呼び出しを使用して有限差分を計算する必要があり、親切でしたパフォーマンスを向上させるために、アルゴリズムによって自動的に処理されることを期待しています。私の最小化された関数は、計算するのに本当に高価です。明確にするために、最小化された関数は、時系列マルコフスイッチングモデル推定における元のデータを使用した推定モデルの対数尤度です。
Peter Kottas、

1
この質問への回答を見ましたか?要件が十分に対処されていない場合は、質問を編集してそれらを指摘し、役立つ推奨事項を取得する必要があります。
Christian Clason、

おかげで、そこにいくつかの有用な情報があります。私のNLOPTライブラリは、自分の問題にも適していることがわかったので、すぐに対応できます。私はこのトピックを投稿したままにしておき、思いついたときに解決策を提供します。プロセスをより速くするかもしれないどんな助けでもそれでもありがたいです。たとえば、実際の実装など
Peter Kottas

1
いくつかの質問:1.問題は凸状ですか?2.目的と制約は区別可能ですか?もしそうなら、何回?一度?二回?3.それらが存在する場合、それらの導関数を簡単に計算できますか?これらの導関数がすぐに利用できない場合、有限差分近似は簡単に計算できますか?4.決定変数はいくつありますか?(つまり、最小化しようとしている変数の数について?)大まかな見積もりで十分です。5.関数の評価は高価ですか?より適切な回答を得るには、これらの情報をすべて用意しておくと役立ちます。
Geoff Oxberry

こんにちは!まず、返信ありがとうございます。1.わかりにくかったが、おそらくそうではない。最小化された関数は、金融アプリケーションでの時系列のマルコフスイッチングモデル推定と対数尤度であるため、その性質から、ノイズの多い出力を想定している。2.no 3.有限差分のみを使用する4.解ベクトルはn変数で構成され、nは目的のモデルパラメーターに依存します。一般に12から30までです。5.モデルと元のデータの間の対数尤度は高く、追加の非線形不等式です。計算が
難しい

回答:


2

関数が微分可能でない場合、有限差分の使用方法に注意する必要があります。導関数情報を使用したい場合、おそらく最善の策は、ある種の準滑らかなニュートンタイプの方法です。そのようなメソッドを説明する一連のメモは、ここにあります

12から30の変数は、パターン検索(直接検索とも呼ばれます)メソッドで実行可能な処理の上限にあると考えられます。Journal of Global OptimizationのRiosとSahinidisによる最近のレビューペーパー(パターン検索方法など)の導関数なしの最適化手法については、関連するWebページとともにここにあります。SIAM ReviewのKolda、Lewis、Torczonによるこれらの方法に関する最近のレビューペーパーは、こちらにあります。これらの方法は、高価な関数評価でかなりうまく機能し、微分可能性や微分情報を必ずしも必要としません。

これらのメソッドの多くは、大域的最適値への収束を保証するために、ある種の凸性を必要とするため、問題を厳密に解決する場合は、これらのメソッドを分岐限定戦略と組み合わせる必要がある場合があります。ただし、厳密さを気にしない場合は、MATLABのようなアプローチでfmincon十分に機能する可能性があります(保証はもうありません)。有限差分は、ほとんどの場合、微分不可能な関数の微分のメンバーを提供します。これは、問題のインスタンスと特定の入力データが目的に対して十分に正確な結果を返すのに十分である可能性があります。その場合は、クリスチャンがコメントでリンクした質問への回答で言及されているライブラリを確認する必要があります。


2

非線形最適化問題を解決するためのC ++ライブラリが必要な場合は、RobOptimを使用できます。RobOptimは、最初はロボット工学の最適化問題を念頭に置いて開発されましたが、あらゆる非線形最適化問題に適しています。複数の非線形ソルバー(IpoptNAGなど)のプラグインを備えたシンプルなC ++インターフェイス提供します。この種のラッパーを使用すると、別のNLPソルバーを簡単に使用できます。勾配を提供できない場合は、差分計算を自動的に行うことができます。

これはオープンソースなので、GitHubでソースコードをチェックできます:https : //github.com/roboptim/

@Geoff Oxberryによって行われる分析は、RobOptimによって呼び出される非線形ソルバーの選択に不可欠です。この種のソルバーを処理する場合、パラメーターの微調整はパフォーマンスに大きな影響を与える可能性があり、ローカルミニマでスタックする可能性があることに注意してください(処理する問題の種類によって異なります)。

注:私はこのプロジェクトの開発者の1人です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.