あなたが言ったことに基づいて:私はあなたが50の変数に対して最適化する必要があると仮定します。また、分析的な導関数を見つけるのに非常にコストがかかる(数値を出すのは言うまでもなく)最適化が制約されていない状況にあると仮定します。
大雑把に言って、あなたは25-30から100の変数を少し不運にも引き起こします。それは大規模または小規模の最適化ルーチンを選択することになると、ちょっとしたミステリーゾーンです。とはいえ、何も失われていません。
一次導関数でさえもそのようなものを手に入れるのに費用がかかることを考えると、ニュートンの方法のアイデアは殺されます。あなたのヘッセ行列が最初から少し斜めになっている場合でも、準ニュートン(BFGS)でいくらか運があるかもしれません。CGは通常BFGSよりも少し遅いので、おそらくそれほど改善されないでしょう。メモリも問題になる場合に使用します(または、その場合はL-BFGSを使用します)。さらに、関数の評価がどれほど遅いかを考えると、単純な最急降下/ライン検索アルゴリズムは曲がりくねって遅くなります。同じことは、シミュレーテッドアニーリングやその他のランダム検索バリアントにも当てはまります(HMCとそのすべてのジャズにアクセスできないと思います)。
したがって、単一の関数評価に関して、最高の価値が必要な場合は、次のようにします。Powellの方法を使用して、COBYLAもテストします。関数の勾配を内部的に線形近似することで物事を高速化するため、制約付き最適化アルゴリズムですが、関数の線形性を利用できます。また、間違いなくNLopt for Pythonを試してください。勾配のないオプティマイザーがたくさんあります。UOBYQAを試してください。それは、パウエルの発案でもあります(2次近似による制約のない最適化)。
非常に簡単に:N-CGアルゴリズムはヘッセ行列の計算に依存しており、ヘッセ行列の計算には非常に費用がかかるようです。NLCGとBFGSはそれを必要としませんが、最初のステップで一度計算しようとするかもしれません。
シンプレックスアルゴリズムはまったく別物であるため、意図的に省略しました。グラデーション自体とは関係ありません。それを試してみてください、しかし、私はそれについて本当にコメントすることができません。それは本当にあなたの問題の性質に依存しています。
数値最適化に関する最初の参考資料として、CTKellyの著書である「最適化のための反復法」を使用すると、かなりうまく、かなりうまくいくでしょう。