5

私はscipy.optimize.minimizeを使用して、使用される最初の推測にかなり敏感な 4D 関数の最小値を見つけています。少し変えると、解決策はかなり変わります。

これに似た質問がすでに SO に多数あります (例: 123 ) が、本当の答えはありません。

私の昔の質問で、zunzun.com サイトの開発者の 1 人(明らかにオンラインではなくなったようです) は、これをどのように管理したかを説明しました。

Zunzun.com は、差分進化遺伝的アルゴリズム (DE) を使用して初期パラメーター推定値を見つけ、それを scipy のレーベンバーグ-マルカート ソルバーに渡します。DE は、実際にはグローバル オプティマイザ自体として使用されるのではなく、「初期パラメータ ゲッサー」として使用されます。

このアルゴリズムに最も近いのは、ブロックを使用して最小化関数をランダムな初期推測で何度も呼び出すこの回答です。forこれにより、複数の最小化されたソリューションが生成され、最終的に最適な (最小値) ソリューションが選択されます。

zunzun dev が既に Python で実装されていると説明したようなものはありますか?

4

1 に答える 1

5

任意の関数を最小化する問題は解決できないため、このような質問に対する一般的な答えはありません。関数の特定のクラスで良いことも悪いこともできるため、関数がどのように見えるかを分析することは、むしろ数学者の領域です。

明らかに、特定のアプリケーションで機能する (または機能しない) ヒューリスティックの集まりである、いわゆる「メタ オプティマイザー」を多数使用することもできます。それらには、遺伝的アルゴリズムを使用したループ内のランダムサンプリング開始点、または-私が知る限り、最も数学的に正当化されたアプローチ-ベイジアン最適化を使用したものが含まれます。一般に、関数を最小化しようとすると同時に関数をモデル化するという考え方です。このようにして、次回どこから開始するかを情報に基づいて推測できます (これは、ランダムな推測または遺伝的アルゴリズム/差分進化を使用するよりも高い抽象化のレベルです)。 . したがって、これらのメソッドを次のように注文します

  • グリッド検索 / ランダム サンプリング - 以前の実行からの情報を使用しないため、最悪の結果
  • 遺伝的アプローチ、進化的、ベイスン フーピング、アニーリング - 限られた期間 (世代) の (x, f(x)) ペアとして以前の実行からの情報を使用 - したがって、平均的な結果
  • ベイジアン最適化 (および同様の方法) -基礎となる関数のモデル化と予想される改善に基づくサンプリング選択の実行を通じて、以前のすべての経験からの情報を使用します - 最良の結果 (最も複雑な方法を犠牲にして)
于 2016-02-09T20:29:40.030 に答える