変数のインスタンス化のコストを最小限に抑えるために、最急降下法の最適化を実行しようとしています。私のプログラムは非常に計算コストが高いので、GDの高速実装を備えた人気のあるライブラリを探しています。推奨されるライブラリ/リファレンスは何ですか?
4 に答える
GSLは、数学および科学的に関心のある一般的な機能をすでに実装している優れた(そして無料の)ライブラリです。
オンラインでリファレンスマニュアル全体を熟読することができます。ざっと見てみると、これは面白そうに見えますが、問題についてもっと知る必要があると思います。
あなたは最小化の方法にかなり慣れていないようです。新しい数値メソッドのセットを学ぶ必要があるときはいつでも、私は通常、数値レシピを調べます。これは、この分野で最も一般的な方法、それらのトレードオフ、および(重要なことですが)詳細について文献を調べる場所の概要を説明する本です。通常、ここで停止することはありませんが、多くの場合、出発点として役立ちます。
たとえば、関数にコストがかかる場合、目標は収束する必要のある評価の数を最小限に抑えることです。勾配の分析式がある場合、関数とその勾配が対象の領域で適切に動作する(特異点がない)と仮定すると、勾配ベースの方法がおそらく有利に機能します。
分析勾配がない場合は、ほとんどの場合、関数のみを評価する(勾配ではない)ダウンヒルシンプレックスのようなアプローチを使用することをお勧めします。数値勾配は高価です。
また、これらのアプローチはすべて極小値に収束するため、最初にオプティマイザーを開始した時点にかなり敏感であることに注意してください。大域的最適化はまったく別の獣です。
最終的な考えとして、最小化のために見つけることができるほとんどすべてのコードは、かなり効率的です。最小化の実際のコストは、コスト関数にあります。コスト関数のプロファイリングと最適化に時間を費やし、それを呼び出す必要がある回数を最小限に抑えるアルゴリズムを選択する必要があります(下り坂シンプレックス、共役勾配、BFGSなどの方法はすべてさまざまな種類の問題に当てはまります)。
実際のコードに関しては、言及されている他のライブラリに加えて、NETLIBで多くの素晴らしいルーチンを見つけることができます。ほとんどのルーチンはFORTRAN77にありますが、すべてではありません。それらをCに変換するには、f2cが非常に便利です。
学生が無料で利用できるCPLEXをお試しください。