評価にコストがかかる、滑らかで境界のある非凸2D関数のグローバルな最小値を見つける


17

私は最小値を見つけたいと思う有界の非凸2次元関数を持っています。機能は非常にスムーズです。評価にはコストがかかります。許容誤差は、各軸の関数のドメインの約3%です。

NLOPTライブラリでDIRECTアルゴリズムの実装を実行しようとしましたが、必要な精度に必要な関数評価の量に関してブルートフォース検索よりも大幅な改善は見られず、いくつかの外れ値がありました。

他にどのグローバル最適化ソルバーを検討すべきですか?


勾配を計算できますか、それとも差分商で近似する必要がありますか?
アーノルドノイマイアー

それらを差分商で近似する必要があります。
ビクター

この場合、数値の二次導関数は数値的に非常に不安定で、安全に動作するように調整するのが難しいため、ニュートンの方法は推奨できません。
アーノルドノイマイアー

@Victor May、何で終わったの?(もしあなたの関数に似た関数を投稿できれば、それは人々が異なるアルゴリズムを比較し調整するのに本当に役立つでしょう。)
denis

@Denis、ビデオ内のオブジェクトを追跡するアルゴリズムの速度をさらに高めようとしていました。アルゴリズムの出力は、追跡対象オブジェクトを含む各画像位置の尤度推定値でした。これらの尤度推定値を含む画像は、私が最適化しようとした関数です。私はいくつかの解決ステップで総当たり攻撃になりました。問題の追跡アルゴリズムの詳細については、「積分ヒストグラムを使用した堅牢なフラグメントベースの追跡」という論文を参照してください。
ビクター13

回答:


12

@barronは同じことを間接的に議論していますが、他の回答と比べて多少異なるアプローチを提案したいと思います。

代わりに、一連の点でそれを評価することにより、すなわち、直接あなたの関数を最適化する(ローカル)最適に(たぶん)収束は、あなたがの概念を使用できることがポイントサロゲートモデリングをしています、記述したタイプの問題(高コスト、平滑、境界付き、低次元、つまり20個未満の未知数)に非常に適しています。バツ1バツ2バツk代理モデリング

具体的には、サロゲートモデルは、モデル関数を設定することで動作しあなたの本当の機能のF R DR。重要な点は、cはもちろんfを完全に表していないが、評価する方がはるかに安価であることです。cRdRfRdRcf

したがって、典型的な最適化プロセスは次のようになります。

  1. j個の初期点x 1x 2x jのセットでを評価します。導関数は必要ないことに注意してください。また、これらのポイントは、ラテンハイパーキューブサンプリングまたは同様のスペース充填設計などによって、検索スペース全体に均等に分散する必要があることに注意してください。fjバツ1バツ2バツj
  2. この元のデータセットに基づいて、モデル関数作成します。クロス検証を使用してモデルを検証できます(つまり、元のjポイントのサブセットのみを使用してcを作成し、データセットの残りの部分を使用してcがそれらの値を予測する程度を確認します)cjcc
  3. Expected Improvement(EI)基準などの基準を使用して、fをサンプリングすることによりより正確にするために、より多くのサンプルを「入力」する場所を見つけます。これは実際に考えられるよりも理論的にはるかによく研究されており、EI基準は非常によく研究されています。EI基準も貪欲な基準ではないため、モデルの精度が全体的に良好に改善されると同時に、潜在的な最適値に近い精度が優先されます。cf
  4. モデルの精度が十分でない場合は、手順3を繰り返します。それ以外の場合は、お気に入りの最適化ルーチンを使用しての最適値を見つけます。これは、評価が非常に安くなります細かいメッシュで関数を評価します)。c

一般に、@ barronが示唆したように、これはEGO、Efficient Global Optimizationが意味するものです。あなたのアプリケーションにとって、これは完全に適切であると強調したいと思います比較的少ない評価に基づいて驚くほど正確なモデルを得て、その後、必要な最適化アルゴリズムを使用できます。また、興味深いのは、メッシュ上でcを評価してプロットできるようになったことです。これにより、fの一般的な外観を理解できます。もう1つの興味深い点は、ほとんどのサロゲートモデリング手法が統計的なエラー推定値も提供するため、不確実性の推定が可能になることです。fcf

構築方法はもちろん未解決の問題ですが、多くの場合、クリギングまたはいわゆる空間マッピングモデルが使用されます。c

もちろん、これはすべてかなりのコーディング作業ですが、他の多くの人々が非常に優れた実装を行っています。Matlabでは、DACEソフトウェアツールボックス DACEが無料であることしか知りません。TOMLABはMatlabパッケージも提供するかもしれませんが、費用がかかります。しかし、C ++でも動作し、DACEが持つ以上の機能を備えていると思います。(注:私は、まもなくリリースされるDACEの新しいバージョンの開発者の1人であり、EGOの追加サポートを提供します。)

この大まかな概要がお役に立てば幸いです。もっと明確にすることができる点や見逃した点があるかどうか、またはこのテーマについてさらに資料が必要な場合は、質問してください。


Fwiw、google surrogate-modelは、ゲント大学でSurrogate Modeling Labを立ち上げ、Surrogate Modeling 経由の書籍Engineering Design、2008 228p 0470770791を公開しています。実際のテスト機能よりも。
デニス


3

スムーズな機能を実現するには、Efficient Global Optimizationメソッドが非常によく機能し、DIRECTよりも劇的に効率的である必要があります。実装は、TOMLAB(自分で使用したことはありません)およびDAKOTA(私はある程度成功しました)で使用できます。


1

関数は滑らかなので、Newtonの方法は最小値を見つけるための圧倒的に最も効率的な方法になります。この関数は凸型ではないため、通常のトリックを適用してニュートン法を収束させる必要があります(Levenberg-Marquardtの変更、グローバル化のための行探索または信頼領域)。関数の導関数を取得できない場合は、有限差分を介して計算するか、BFGS更新を使用してください。問題に複数の局所的最小値があると思われる場合は、ランダムに選択されたポイントまたはそれほどランダムではないポイントからニュートン法を開始し、それらが収束する場所を確認します。


私の問題には確かに極小値があります。出発点を選択する方法は何ですか?
ビクター

1
問題について何も知らない限り、基本的に統計的サンプリングが唯一の選択肢です。
ウルフギャングバンガース

@Wolfgang:「統計的サンプリング」にアプローチする方法はありますか?10、100、...ランダムな初期推測を試してみてください。「より厳密な」アプローチはありますか?私は、多かれ少なかれ同様の問題を抱えているので、私は、聞いて(参照scicomp.stackexchange.com/q/4708/1789を
アンドレ・

それはすべて、あなたが関数について知っていることに依存します。関数の「典型的な長さスケール」のようなものを知っていれば、局所的な極値がどれだけ離れているかを示すことができます。これはまた、あなたが何点から始めなければならないか、そしてそれらがお互いにどれだけ離れて選択されるべきかを示すでしょう。
ヴォルフガングバンガース14年

0

評価には費用がかかるため、複数の関数の評価を並行して実行することを活用する必要があります。

このコードをご覧になることをお勧めします。背後にある数学については、ここで説明します


1
このコードと記事はあなたが書いたものですか?もしそうなら、あなたの答えで明示的にそう言うことができますか?また、現時点では、提案の説明を提供することで回答を改善できます。
ニコグアロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.