Pour la fonction SciPy fmin_ncg
, est-il un moyen de suppling hessois et gradient comme une variable plutôt qu'une fonction?Suppyling une toile de jute à fmin_ncg en python
Je suis en train de réécrire un code Matlab en python. Le code implique l'utilisation d'une routine d'optimisation pour adapter certains paramètres à un ensemble de données. Pour ce faire, j'ai fourni le dégradé et la toile de jute. Je Matlab dans par exemple quelque chose comme ceci:
fmincon(@myFunc,x0,[],[],[],[],lb,ub,[],options);
où myFunc
renvoie 3 valeurs: l'évaluation de la fonction, le gradient et la toile de jute.
Cependant pour fmin_ncg
en Python, il semble que le dégradé et le hessien doivent être fournis en tant que fonctions séparées.
Pour moi, cela semble inefficace que le code doit passer par un vaste ensemble de données, et il y a des calculs qui sont communs à la fonction, le gradient et la toile de jute. par exemple. Imaginez une fonction f(x) = a(x)*b(x)
avec gradient g(x) = a(x)*c(x)
, Jute h(x) = a(x)*d(x)
... dans Matlab je peux calculer a(x)
une fois, alors que il semble que je dois calculer cela trois fois en python.
Ai-je mal compris comment fmin_ncg
fonctionne ou est-il un moyen de contourner cela?
essayer memoization –