Fahid Anas IS4
Rapport TP Algorithme Numérique pour l'Optimisation.
Professeur : François Lemaire.
TP1 /
Au sein de ce TP, nous devions dans un premier temps chercher à approximer une fonction de degré 3 passant par un ensemble de points expérimentaux.
Nous nous sommes appuyés sur la méthode des moindres carrées pour minimiser l'erreur (résidus) que l'on définit par la formule suivante :
Ri² = Yi² - f(xi)²
On commence par fixer des paramètres alpha, beta, gamma et mu et on affiche son graphe ainsi que le nuage des points expérimentaux sur l'intervalle [-1.2 ; 2.1].
On peut alors calculer notre erreur initiale :
On va chercher alors à minimiser cette erreur et avoir en sortie le vecteur x de taille m (où m est le nombre de paramètres) qui associé à cette minimisation.
Pour se faire on résout le système suivant AtAx= Atb, x est le vecteur contenant les 4 paramètres de notre fonction d'approximation et b l'ordonnées de nos points expérimentaux. On appellera x_optimal, le vecteur associé à la résolution de ce système précédemment énoncé.
On a alors pour x_optimal alpha = 1.58, beta = -3.14, gamma = -0.37 et gamma = 7.48.
On peut s’intéresser à présent à la nouvelle erreur quadratique entre les points expérimentaux et la nouvelle définition de f(x).
Remarquons, que l'on a considérablement diminuée la valeur de Ri passant de 4.24 à 3.37.
Dans un second temps, nous nous sommes attardés sur la méthode de Newton en une variable pour approximé la racine cubique de 2.
On sait que d'après la méthode de Newton nous fixons un U0 quelconque disons ici 5 et nous calculons les termes de la suite Un+1 = Un - f(Un)-f'(Un), où f est la fonction que l'on cherche à annuler. Ici on veut converger vers racine cubique de 2 on peut alors prendre f(x) = x³ - 2.
La valeur théorique de la racine cubique de 2 étant approximativement égale à 1.260, on voit que dès le dixième terme de la suite on s'approche très fortement de cette valeur.
On veut maintenant effectuer le même traitement, cependant on s’appuiera ici sur les fonctions grad et éventuellement hessian.
A l'aide du package numdifftools on s'appuie sur la fonction Gradient qui nous permet d'être un substitut à la fonction fprime antérieurement utilisée.
TP 2 /
On cherche au sein de ce TP, à l'aide de la méthode de Newton, trouver les points stationnaires lié à F(a, b) qui est défini au sein du code ci-dessous. Nous commençons par une singulière estimation graphique... On cherche ici les intersections entres les plans de f(a, b) et g(a,
On a alors représenté les fonctions f(a, b) et g(a, b) sur le plan 3D en colorant chacune des lignes de niveaux Y = 0 lié à chacune des fonctions et l'intersection de ces dernières correspondent aux coordonnées des points stationnaires solutions de l'équation F(a,b) = 0. A première vue, il semble y avoir 2 points qui sont solution cependant il peut en avoir plus !
On peut à présent s'appuyer sur la Jacobienne de la F(a,b) qui va nous permettre d'utiliser le binôme de Newton et trouver les coordonnées des deux zéros.
En effet on va chercher à résoudre le système suivant :
-Jac_F(a,b) * h = F(a,b), où h représente le vecteur de dimension 2 associé au décalage des coordonnées (x,y) pour se rapprocher d'un zéro potentiel.
On obtient un zéro qui a pour coordonnées (-0.774, 1.826), bien sûr celui-ci n'est que un des deux zéros. Pour trouver le second on s'appuie sur les estimations faites auparavant qui joueront le rôle de notre U0 ici. Cependant n'ayant plus les valeurs expérimentales je suis contraint de passer à la suite prématurément.
On décide dans la suite du TP de passer par la bibliothèque autograd et utiliser la fonction jacobian et effectuer le même traitement que précédemment.
Pour finir, nous mettons en oeuvre la dérivation automatique qui nous permettra d'avoir les éléments constituants la Jacobienne de F.
Voici ci-dessus l'alternative à la computation de la jacobienne via la méthode du forward mode ou dérivation automatique.
TP 3 /
Au sein de ce TP, nous devions également rechercher les points stationnaires du fonction polynomiale de degré 3. Nous nous sommes appuyé ici sur la matrice Hessienne ainsi que le nabla lié à la fonction f.
On peut commencer par une représentation graphique de notre fonction afin de pouvoir estimer graphiquement ces points stationnaires si il y en a.
Graphiquement, on peut apercevoir deux points stationnaires qui annulent f(a,b).
Écrivons à présent les fonctions nabla_f et H_f qui renvoient le gradient de f(a,b) et la matrice Hessienne respectivement.
Nous sommes désormais à même de pouvoir calculer les coordonnées des points stationnaires de f(a, b) en résolavant le système suivant :
-H_f(a, b).h = nabla_f(a, b)
Il semble y avoir un point stationnaires de coordonnées (-0.2113 ; 1.5665); Vérifions ce résultat.
Le résultat ne semblent pas très pertinent...
Une question intéressant peut-être soulevée. Quels points parmi ces points stationnaires sont des minimas locaux. En effet il peut y avoir des points de col (ou de selles). L'intitulé suivant peut-être une belle définition.
On dit que a est un point de col si il est critique (i.e dfa = 0) et si f ne présent pas d'extremums locaux en a. Plus simplement, au point a, il existe des directions vers lesquelles on monte en altitude et d'autres vers lesquelles nous descendons.
Si a est un point critique et que en ce point la Hessienne est définit positive, alors ce points est un minimum local.
Le résultat n'ayant pas été très pertinent nous avons un résultat difficile à interpreter. L'erreur est surement à la résolution du système -H_f*h = nabla_f.
Nous allons essayer ici de reprendre le problème initial, cela-dit, nous nous appuierons sur les fonctions np.gradient et np.hessian sans oublier de définir notre fonction avec un seul paramètre u qui contiendra les deux paramètres a et b.
On obtient les mêmes coordonnées que précédemment, cependant cela ne semble pas correspondre à un point stationnaire pour la fonction f. Je suis incapable de savoir d'où cela peut provenir...
La partie sur la dérivation backward mode ne sera malheureusement pas traité au sein de ce rapport.
TP 4 /
Au sein de ce dernier TP nous allons en premier lieu chercher les points stationnaires de f(a, b) sous la contrainte suivante :
a² + b² <= 1/2
La fonction f est la même que celle du TP3 il y a donc peu d’intérêt à refaire la visualisation graphique.
On nous informe que f(a, b) a cinq points stationnaires au total, et l'un d'entre eux a pour coordonnées (0.2255, 0.9312) fortement proche de celui trouvé via méthode du Gradient ou encore via la matrice Hessienne.
Vérifions si la contrainte est respectée.
La contrainte n'est pas respectée. Si on veut transformer cette contrainte en une contrainte d'égalité on pose alors la contrainte suivante :
a² + b² - 1/2 = 0
Dans la section de code ci-dessous, nous affichons quelques vecteurs Gradients (en rouge pour la contrainte et en bleu pour l'objectif). Nous avons également représenté d'un trait noir plein la contrainte d'égalité susmentionnée.