ポールが述べているように、これ以上の情報がなければ、仮定なしに助言を与えることは困難です。
10〜20個の変数と高価な関数評価では、派生物のない最適化アルゴリズムを推奨する傾向があります。私はPaulのアドバイスに強く反対します:何らかの特別な方法を使用していない限り、一般的に機械精度の勾配が必要です(たとえば、機械学習の確率的勾配降下は、合理的な方法を考え出すために目的の形式を活用します勾配推定値)。
各準ニュートンステップは次の形式になります。
H〜(xk)dk= - ∇ F(xk)、
ここで、ヘッセ行列のいくつかの近似である、探索方向である、、現在の反復で決定変数の値であり、あなたの目的関数であり、は目的の勾配であり、決定変数はように更新されます。ここでH〜dkバツkf∇ Fバツk + 1= xk+ αkdkαkは、何らかの方法(行検索など)で決定されるステップサイズです。特定の方法でヘッセ行列を近似することで逃げることができ、反復が収束しますが、正確な勾配によるヘッセ行列の有限差分近似のようなものを使用すると、条件が悪いために問題が発生する可能性があります。通常、ヘッセ行列は勾配を使用して近似されます(たとえば、ヘッシアンのランク1更新を使用するBFGSタイプのメソッド)。
ヘッシアンと勾配の両方を有限差分で近似することは、いくつかの理由から悪い考えです。
- 勾配に誤差が生じるため、適用する準ニュートン法は、ノイズの多い関数の根を見つけることに似ています。
- 関数の評価に費用がかかり、変数に関する勾配を評価しようとすると、反復ごとにN個の関数の評価がかかりますNN
- 勾配に誤差がある場合、ヘッセ行列にさらに誤差が生じることになります。これは、線形システムの調整に関して大きな問題です
- ...そして、反復ごとに関数評価のコストがかかりますN2
準ニュートンの悪い繰り返しを1つ取得するには、評価ごとに30分で最大420回の関数評価のようなことをしています。つまり、繰り返しごとにしばらく待つか、関数の評価のためだけに大きなクラスターが必要です。実際の線形解は20行20列の行列(最大で!)になるため、それらを並列化する理由はありません。たとえば、随伴問題を解くことによって勾配情報を取得できる場合、それはより価値があるかもしれません。その場合、Nocedal&Wrightのような本を見る価値があるかもしれません。
多数の関数評価を並行して行う場合は、代わりに、サロゲートモデリングアプローチを検討するか、準ニュートンアプローチを検討する前にセット検索メソッドを生成する必要があります。古典的なレビュー記事は、2012年に公開された、非常に優れた、幅広い比較を提供する、誘導体を使用しない方法に関するリオスとサヒニディスによるものです。2009年のMore and Wildによるベンチマーク記事。Conn、Scheinberg、およびVicenteによる2009年の教科書「Derivative-Free Optimizationの紹介」。そして、コルダ、ルイス、およびTorczonによる設定の検索方法の生成に関するレビュー記事 2003年から。
上記にリンクされているように、DAKOTAソフトウェアパッケージはこれらのメソッドの一部を実装します。また、DIRECTを実装するNLOPTと、パウエルの代理モデリングメソッドのいくつかも実装します。MCSもご覧ください。MATLABで書かれていますが、MATLAB実装を選択した言語に移植することができます。DAKOTAは基本的に、高価なシミュレーションを実行し、最適化アルゴリズムのデータを収集するために使用できるスクリプトのコレクションです。NLOPTには多数の言語のインターフェイスがあるため、どちらのソフトウェアパッケージを使用する場合でもプログラミング言語の選択は大きな問題ではありません。ただし、DAKOTAは学習に時間がかかり、ふるいにかけるための膨大な量のドキュメントがあります。