Bonjour à tous,
Je cherche actuellement à minimiser une fonction à l'aide d'un algorithme sous Python. La fonction est un peu compliquée et fait appel à un solveur FEA pour être calculé. Quoi qu'il en soit, j'ai pu définir ma fonction de manière classique en fonction du paramètre que je cherche à optimiser :
Cette dernière définition de la fonction marchant bien, je peux facilement avoir les valeurs de ma fonction_calcul pour les valeurs de paramètres que je souhaite. Sachant cela, je pensais pouvoir dés lors utiliser "bêtement" scipy.optimize pour trouver la valeur de minimization de ma fonction et hélas, cela ne marche pas !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 def fonction_calcul(Parametre1): blabla definition fonction return valeur de la fonction
Voyez ce que j'obtiens en partant de la valeur de départ x=1
Globalement, comme vous le voyez, minimize calcul une seule valeur et s'arrête à cette valeur, considérant qu'il a bien optimisé (sachant que en l'occurence, la valeur de minimisation se trouve autour de 0.03...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 x_start=1.0 >>> result = spo.minimize(fonction_calcul, x_start) >>> result fun: 106.69134802297765 hess_inv: array([[1]]) jac: array([0.]) message: 'Optimization terminated successfully.' nfev: 2 nit: 0 njev: 1 status: 0 success: True x: array([1.])
J'ai essayé minimize avec une fonction "classique" (polynome) et cela fonctionne bien pour trouver la valeur de minimisation...
Une idée de comment faire fonction minimize dans mon cas ?
Merci beaucoup !
Pierre
Partager