GNU Scientific ライブラリには、多次元関数最小化フレームワークがあります。ただし、その警告には、いくつかの異なる極小値を持つ関数で使用すると、1 つの任意の解が返されるだけであることが明示されています。すべての極小値のリストを返すように(いくつかのしきい値基準に従って)それを適応させる方法を知っている人はいますか?
3 に答える
これは GNU Scientific に基づいたものではありませんが、すべての極小値を見つけるためのこのアルゴリズムを見つけました: http://www.cs.uoi.gr/~lagaris/papers/MINF.pdf
標準的な最適化アルゴリズムは、開始点に「近い」どこかで、それ自体が選択するか、ユーザーが提供する局所最小値を探します。すべての極小値を見つけることは、計算不可能な問題になる可能性があります。これは、有限の範囲内であっても無限の数を持つ可能性があるためです (たとえば、f(x) = [ cos(1/x) ]^2 には無限の極小値があります)。 (0, 1] の範囲) 有限個の局所的最小値があると仮定すると、それらすべてを見つけることは、全体的な最小値を見つけるよりも複雑な作業であり、どこかで局所的な最小値を見つけるよりもはるかに難しい問題です。局所最適化アルゴリズムを適応させて大域的最小値を見つける簡単な方法はありません. 遺伝的アルゴリズム/進化戦略のような大域的最小値を見つけるための一般的なアルゴリズムでさえ, それらがすべての極小値に到達することを保証するものではありません. 実際には,
この状況で GSL を使用する最善の方法は、最小化された関数を見て、どこに最小値があるべきかを推測し、GSL コードを使用してそれらを探すことです。
粒子群最適化法は、関数のすべてのローカル最小値とグローバル最小値を見つけるタスクにとって悪いオプションではないことがわかりました。ローカル最小値を見つけるための コードPSOグローバル最小値を見つけるための PSOが参照用に利用可能です。