私は最小値を見つけたいと思う有界の非凸2次元関数を持っています。機能は非常にスムーズです。評価にはコストがかかります。許容誤差は、各軸の関数のドメインの約3%です。
NLOPTライブラリでDIRECTアルゴリズムの実装を実行しようとしましたが、必要な精度に必要な関数評価の量に関してブルートフォース検索よりも大幅な改善は見られず、いくつかの外れ値がありました。
他にどのグローバル最適化ソルバーを検討すべきですか?
私は最小値を見つけたいと思う有界の非凸2次元関数を持っています。機能は非常にスムーズです。評価にはコストがかかります。許容誤差は、各軸の関数のドメインの約3%です。
NLOPTライブラリでDIRECTアルゴリズムの実装を実行しようとしましたが、必要な精度に必要な関数評価の量に関してブルートフォース検索よりも大幅な改善は見られず、いくつかの外れ値がありました。
他にどのグローバル最適化ソルバーを検討すべきですか?
回答:
@barronは同じことを間接的に議論していますが、他の回答と比べて多少異なるアプローチを提案したいと思います。
代わりに、一連の点でそれを評価することにより、すなわち、直接あなたの関数を最適化する(ローカル)最適に(たぶん)収束は、あなたがの概念を使用できることがポイントサロゲートモデリングをしています、記述したタイプの問題(高コスト、平滑、境界付き、低次元、つまり20個未満の未知数)に非常に適しています。
具体的には、サロゲートモデルは、モデル関数を設定することで動作しあなたの本当の機能のF ∈ R D → R。重要な点は、cはもちろんfを完全に表していないが、評価する方がはるかに安価であることです。
したがって、典型的な最適化プロセスは次のようになります。
一般に、@ barronが示唆したように、これはEGO、Efficient Global Optimizationが意味するものです。あなたのアプリケーションにとって、これは完全に適切であると強調したいと思います比較的少ない評価に基づいて驚くほど正確なモデルを得て、その後、必要な最適化アルゴリズムを使用できます。また、興味深いのは、メッシュ上でcを評価してプロットできるようになったことです。これにより、fの一般的な外観を理解できます。もう1つの興味深い点は、ほとんどのサロゲートモデリング手法が統計的なエラー推定値も提供するため、不確実性の推定が可能になることです。
構築方法はもちろん未解決の問題ですが、多くの場合、クリギングまたはいわゆる空間マッピングモデルが使用されます。
もちろん、これはすべてかなりのコーディング作業ですが、他の多くの人々が非常に優れた実装を行っています。Matlabでは、DACEソフトウェアツールボックス DACEが無料であることしか知りません。TOMLABはMatlabパッケージも提供するかもしれませんが、費用がかかります。しかし、C ++でも動作し、DACEが持つ以上の機能を備えていると思います。(注:私は、まもなくリリースされるDACEの新しいバージョンの開発者の1人であり、EGOの追加サポートを提供します。)
この大まかな概要がお役に立てば幸いです。もっと明確にすることができる点や見逃した点があるかどうか、またはこのテーマについてさらに資料が必要な場合は、質問してください。
関数は滑らかなので、Newtonの方法は最小値を見つけるための圧倒的に最も効率的な方法になります。この関数は凸型ではないため、通常のトリックを適用してニュートン法を収束させる必要があります(Levenberg-Marquardtの変更、グローバル化のための行探索または信頼領域)。関数の導関数を取得できない場合は、有限差分を介して計算するか、BFGS更新を使用してください。問題に複数の局所的最小値があると思われる場合は、ランダムに選択されたポイントまたはそれほどランダムではないポイントからニュートン法を開始し、それらが収束する場所を確認します。