Basado en lo que dijo: supongo que tiene que optimizar para 50 variables; También supongo que está teniendo una situación en la que es muy costoso encontrar derivados analíticos (y mucho menos obtener números) y que su optimización no tiene restricciones.
Permítanme enfatizar, usted es un poco desafortunado porque entre 25-30 y 100 variables es una zona de penumbra cuando se trata de elegir entre rutinas de optimización a gran o pequeña escala. Dicho esto, sin embargo, no se pierde nada.
Dado que incluso la derivada de primer orden es costosa, eliminar la idea del método de Newton. Sin embargo, es posible que tengas suerte con Quasi-Newton (BFGS) si tu Hessian es ligeramente diagonal como para empezar. CG generalmente es un poco más lento que BFGS, por lo que probablemente eso no mejore mucho las cosas; úselo si la memoria también es un problema (o simplemente elija L-BFGS en ese caso). Además, dado lo lento que es evaluar su función, un simple algoritmo de búsqueda de línea / descenso más empinado sería tortuosamente lento; Lo mismo ocurre con el recocido simulado y otras variantes de búsqueda al azar (supongo que no tiene acceso a HMC y todo ese jazz).
Entonces, cuando necesite el mejor rendimiento de su inversión cuando se trata de una evaluación de una sola función: vaya con el método de Powell y también pruebe COBYLA; a pesar de ser un algoritmo de optimización restringido porque internamente lineal se aproximará al gradiente de su función para acelerar las cosas, podrá aprovechar la linealidad de su función. Definitivamente, también prueba NLopt para Python . Tienen muchos optimizadores sin gradiente; prueba UOBYQA; también es una creación de Powell (Optimización sin restricciones por aproximaciones cuadráticas).
Muy brevemente: los algoritmos N-CG dependen de la computación del Hessian, y su Hessian parece muy costoso de computar. NLCG y BFGS no lo requieren, aunque podrían intentar calcularlo una vez en su primer paso.
Dejé el algoritmo simplex a propósito porque es una bestia totalmente diferente; nada que ver con gradientes como tales. Pruébalo pero realmente no puedo comentarlo; realmente depende de la naturaleza de su problema.
Para una primera buena referencia sobre optimización numérica, el libro de CTKelly, Métodos iterativos para la optimización, lo llevará bastante lejos, bastante bien.