私の場合、どの種類のアルゴリズムを使用できるかを誰かが知っているかどうか疑問に思っていました。私はすでに多変量関数でオプティマイザーを実行しており、関数が十分に規則的であると仮定して、問題の解決策を見つけました。私は問題を少し混乱させ、最後の解に近い最適解を見つけたいと考えています。この場合、非常に高速なアルゴリズムはありますか、それとも通常のアルゴリズムにフォールバックする必要がありますか?
5 に答える
反復オプティマイザー(たとえば、パウエルの方向設定法、またはCGに基づく)を既に使用している場合は、最初のソリューションをオプティマイザーの次の実行の開始点として使用してみませんか?
編集:あなたのコメントによる:ジャコビアンまたはヘッセ行列を計算するとパフォーマンスの問題が発生する場合は、BFGS(http://en.wikipedia.org/wiki/BFGS_method)を試してください。これにより、ヘッセ行列の計算が完全に回避されます。ここ http://www.alglib.net/optimization/lbfgs.phpには、BFGSの(非営利目的の)実装があります。あなたがここにいる詳細の良い説明。
そして、あまり洗練されていないアルゴリズムで最初の解決策を見つけることから何かを得ることを期待しないでください。
つまり、これはすべて制約のない最適化に関するものです。制約付き最適化に関する情報が必要な場合は、「SQP」をグーグルで検索することをお勧めします。
適切な初期推定があれば、すべての最小化アルゴリズムのパフォーマンスが向上します (読み取り: まったく実行されます) 。摂動問題の最初の推測は、あなたの場合、摂動されていない問題の最小点になります。
次に、要件を指定する必要があります。速度が必要です。どのくらいの精度が必要ですか? スペース効率は重要ですか?最も重要なのは、どのような情報を持っているかです: 関数の値だけですか、それとも導関数 (おそらく二次導関数) も持っていますか?
問題の背景も役立ちます。離散化された滑らかな関数を探すことは、何百もの無関係なパラメーターを探すこととは大きく異なります。
グローバルな情報 (つまり、凸関数であるか、保証されたグローバルな最小値または多くのローカルな最小値があるかなど) は、今のところ脇に置いておくことができます。摂動問題の最小点を見つけるのが難しい場合は、これを調査する必要があります。
これらの質問に答えると、特定のアルゴリズムを選択できます。多変量最適化には多くの選択肢 (およびトレードオフ) があります。
また、どちらが速いかは (アルゴリズムではなく) 問題に大きく依存するため、実験によって決定する必要があります。
私はこの能力でコンピュータを使用することについてあまり知りませんが、関数の複雑さ (線形、N 次多項式、指数関数、対数関数など) が既知であることを考慮して、「最適な」方程式を比較的効率的に見つけるために神経進化的手法を使用した記事を覚えています。 ) と一連のポイント プロット。私が思い出したように、それは私たちが現在計算神経進化として知っているものの最も初期の用途の 1 つでした。方程式の関数の複雑さ (したがって、項の数) は既知であり、固定されているため、静的ニューラル ネットワークを使用して最も近い値をシードし、ヒューリスティックを使用して新しいネットを近づけることができます。適応度の高い既存の網に。マルチスレッドを使用すると、多くのネットを並行して作成、テスト、評価できます。