Sulla base di quello che hai detto: suppongo che devi ottimizzare per 50 variabili; Suppongo anche che si stia verificando che è molto costoso trovare derivati analitici (per non parlare di ottenere valori numerici) e che l'ottimizzazione non è vincolata.
Lasciami sottolineare, sei un po 'sfortunatamente causa tra 25-30 e 100 variabili, è un po' di zona crepuscolare quando si tratta di scegliere tra routine di ottimizzazione su larga o piccola scala. Detto questo, però, nulla è perduto.
Dato che anche i derivati del primo ordine sono costosi per ottenere quel tipo, uccide l'idea del metodo di Newton. Potresti avere un po 'di fortuna con Quasi-Newton (BFGS) anche se il tuo Hessian è leggermente diagonale, come iniziare. CG è di solito un po 'più lento di BFGS, quindi probabilmente non migliorerà molto le cose; usalo se anche la memoria è un problema (o semplicemente scegli L-BFGS in quel caso). Inoltre, dato quanto sia lento valutare la tua funzione, un semplice algoritmo di ricerca di discesa / linea più ripido sarebbe tortuosamente lento; lo stesso vale per la ricottura simulata e altre varianti di ricerca casuali (suppongo che tu non abbia accesso a HMC e tutto quel jazz).
Quindi, quando hai bisogno del miglior rapporto qualità-prezzo per una valutazione a singola funzione: segui il metodo Powell e testa anche COBYLA; nonostante sia un algoritmo di ottimizzazione vincolato perché approssima internamente la pendenza della tua funzione per accelerare le cose, sarà in grado di sfruttare la linearità della tua funzione. Anche sicuramente provare nlopt per Python . Hanno molti ottimizzatori senza gradiente; prova UOBYQA; è anche un'idea di Powell (Unconstrained Optimization BY Quadratic Approximations).
Molto brevemente: gli algoritmi N-CG dipendono dal calcolo dell'Assia e la tua Assia sembra molto costosa da calcolare. NLCG e BFGS non lo richiedono, anche se potrebbero provare a provarlo una volta nel loro primo passo.
Ho omesso di proposito l'algoritmo simplex perché è una bestia totalmente diversa; nulla a che fare con i gradienti in quanto tali. Provalo ma non posso davvero commentarlo; dipende davvero dalla natura del tuo problema.
Per un primo buon riferimento sull'ottimizzazione numerica, il libro di Iterative Methods for Optimization di CTKelly ti porterà abbastanza lontano, abbastanza bene.