Gradients, optimisation et multiplicateur de Lagrange

Qu'est-ce que le gradient d'une fonction multivariable ? Comment maximiser les fonctions contraintes ? Apprenons ensemble !

Keywords: calcul multivariable, optimisation, algèbre linéaire

By Carmen Cincotti  

En lisant l’article sur la dynamique basée sur la position, je me suis rendu compte qu’il y a pas mal de concepts mathématiques que je ne comprends pas très bien. 😕

Par exemple, dans le contexte des contraintes, il existe des concepts tels que le gradient d’une fonction. En plus, quand on parle de l’optimisation d’une fonction qui est contrainte, on parle souvent du multiplicateur de Lagrange et aussi du lagrangien.

Lors de cet article, mon objectif est de démystifier ces concepts.

Le gradient

Avant de découvrir le pourquoi du gradient, je propose que nous regardions d’abord comment résoudre le gradient d’une fonction de plusieurs variables telle que f(x,y,z)f(x,y,z). Le gradient est un vecteur constitué des dérivées partielles de la fonction définie, ff :

f=[fxfyfz] \nabla{f} = \begin{bmatrix} \frac{\partial f}{\partial x} \\[6pt] \frac{\partial f}{\partial y} \\[6pt] \frac{\partial f}{\partial z} \\ \end{bmatrix}

\nabla est appelé nabla. Il est parfois appelé “del”. Il désigne l’opérateur différentiel vectoriel.

Prenons un exemple. J’ai une fonction définie comme f(x,y)=5x+3xyf(x,y) = 5x + 3xy. Tout d’abord, on doit trouver les dérivées partielles par rapport aux variables xx et yy comme suit :

fx=5+3yfy=3x \frac{\partial f}{\partial x} = 5 + 3y \\[6pt] \frac{\partial f}{\partial y} = 3x \\[6pt]

Cela nous donne un gradient :

f=[5+3y3x] \nabla{f} = \begin{bmatrix} 5 + 3y \\[6pt] 3x \\ \end{bmatrix}

C’était assez facile à résoudre ! Néanmoins, l’importance du gradient reste un mystère que nous allons découvrir dans la section suivante. 🕵️‍♂️

💡 Si vous êtes nuls en dérivées partielles, je vous propose de les apprendre un peu sur cette ressource

La signification du gradient

Imaginons que nous sommes au pied d’une montagne et que nous voulons la grimper le plus rapidement possible. On voit que la bonne piste est de la gravir dans le sens de la flèche :

Person climbing a mountain

Cette flèche représente le gradient parce que c’est l’ascension la plus rapide de la montagne.

En termes plus précis, le vecteur gradient est la direction et le taux d’augmentation le plus rapide d’une fonction ff à un point donné. Ce concept est le point le plus important à retenir sur le gradient. 💡

Imaginons que nous créons une carte thermique pour une fonction ff dans un espace arbitraire. Ensuite, nous trouvons le gradient à différentes entrées de ff telles que (x0,y0,...),(x1,y1,...),...(xn,yn,...)(x_0, y_0, ...), (x_1, y_1, ...), ... ( x_n, y_n, ... ) . Si nous représentons le gradient à chacun de ces points sous forme de flèches, nous pourrions voir l’image suivante :

Gradient of a Function.tif
By Vivekj78 - Own work, CC BY-SA 3.0, Link

Nous pouvons voir que le gradient f(x,y,...)\nabla{f}(x, y,...) nous indique la direction pour maximiser la valeur de ff à chaque entrée donné.

En plus, la magnitude, f(x0,y0,...)|| \nabla{f}(x_0, y_0,...) ||, nous donne la pente de cette ascension.

Le gradient et les lignes de contour

Regardons ce graphique pour l’équation f(x,y)=x2+y2f(x,y) = x^2 + y ^2 :

A 3D plot of x squared + y squared

Si nous l’écrasons d’un espace tridimensionnel à un espace bidimensionnel, nous verrons ces cercles qui représentent l’espace d’entrée, x et y, tandis que la troisième valeur z (qui représente la sortie de la fonction f(x,y)f(x,y)) est désignée par les textes 1, 2, 3, 4, 7 :

Contour map of x squared + y squared

Une caractéristique importante des graphiques de contour, c’est qu’ils peuvent nous aider à trouver les pics et les vallées d’une fonction.

Contour map example

Quand les lignes (au bas du graphique ci-dessus) sont éloignées les unes des autres, la pente n’est pas raide. À l’inverse, si les lignes sont proches les unes des autres, la pente est raide.

Cela est un important point quand nous examinons la relation entre le gradient et un graphique de contour.

Contour maps

Comme vous pouvez le voir, chaque vecteur de gradient est perpendiculaire à la ligne de contour qu’il touche. Ce comportement est observé parce que la piste la plus courte entre des lignes est une ligne perpendiculaire les unes aux autres.

Cela a du sens, parce qu’on a déjà défini le gradient comme la direction et le taux d’augmentation le plus rapide d’une fonction ff.

Application du gradient - problème d’optimisation sous contraintes

L’objectif d’un problème d’optimisation sous contraintes est de maximiser ou minimiser une fonction de plusieurs variables f(x,y,z,...)f(x,y,z,...).

Une fonction contrainte prend la forme g(x,y,z,...)=cg(x,y,z,...) = c.

Si je prends une fonction de plusieurs variables f(x,y)f(x,y) et une fonction contrainte g(x,y)g(x,y) telles que :

f(x,y)=3x+2yg(x,y)=0.5x2+0.5y2=cc=2f(x,y) = 3x + 2y \\[6pt] g(x,y) = 0.5x^2 + 0.5y^2 = c \\[6pt] c = 2

Notre but est de trouver le point où f(x,y)f(x,y) et g(x,y)g(x,y) sont tangents quand c=g(x,y)=2c = g(x,y) = 2 comme suit :

Graph

Pour ce faire, nous pouvons trouver les valeurs maximales de xx et yy en utilisant notre connaissance du gradient.

Nous savons déjà le fait que le gradient se pointe dans le sens perpendiculaire aux courbes de contour.

Graph with gradients

Cependant, les magnitudes de f(x,y)\nabla f(x,y) et de g(x,y)\nabla g(x,y) ne sont pas pareils. Il faut donc corriger cette différence avec un scalaire, λ\lambda qui s’appelle le multiplicateur de Lagrange :

f(x,y)=λg(x,y) \nabla f(x,y) = \lambda \nabla g(x,y)

Nous savons déjà pour trouver les valeurs f(x,y)\nabla f(x,y) et g(x,y)\nabla g(x,y), il faut prendre la dérivée partielle de chacune par rapport à x et y :

f(x,y)=[fx=3fy=2] \nabla f(x,y) = \begin{bmatrix} \frac{\partial f}{\partial x} = 3 \\[6pt] \frac{\partial f}{\partial y} = 2 \\ \end{bmatrix}
g(x,y)=[fx=0.25xfy=0.25y] \nabla g(x,y) = \begin{bmatrix} \frac{\partial f}{\partial x} = 0.25x \\[6pt] \frac{\partial f}{\partial y} = 0.25y \\ \end{bmatrix}

Nous pouvons résoudre les valeurs λ,x,y\lambda, x, y en résolvant le système d’équations suivant :

[32]=λp[0.25x0.25y] \begin{bmatrix} 3 \\[6pt] 2 \\ \end{bmatrix} = \lambda_p \begin{bmatrix} 0.25x \\[6pt] 0.25y \\ \end{bmatrix} \\[6pt]

Ce qui nous donne les équations :

g(x,y)=0.5x2+0.5y2=c=23=λp0.25x2=λp0.25y...x=12/λpy=8/λp0.5(12λp)2+0.5(8λp)2=236+16=52=λp2±52=λpg(x,y) = 0.5x^2 + 0.5y^2 = c = 2 \\[6pt] 3 = \lambda_p 0.25x \\[6pt] 2 = \lambda_p 0.25y \\ ... \\ x = 12 / \lambda_p \\[6pt] y = 8 / \lambda_p \\[6pt] 0.5(\frac{12}{\lambda_p})^2 + 0.5(\frac{8}{\lambda_p})^2 = 2 \\[6pt] 36 + 16 = 52 = \lambda_p^2 \\[6pt] \pm \sqrt{52} = \lambda_p

En résolvant pour xx et yy :

x=±1.66y=±1.11(x,y)=(1.66,1.11),(1.66,1.11),(1.66,1.11),(1.66,1.11)x = \pm 1.66 \\[6pt] y = \pm 1.11 \\[6pt] \therefore (x,y) = (1.66, -1.11), (1.66, 1.11), (-1.66, 1.11), (-1.66, -1.11)

Supposons que nous voulions maximiser f(x,y)f(x,y). On testerait ces points comme entrées de la fonction. La bonne réponse serait (1.66,1.11)(1.66, 1.11)

Final result

Le lagrangien

Nous pouvons reformuler ces fonctions en les écrivant sous la forme :

L(x,y,λ)=f(x,y)+λg(x,y)\mathcal{L(x, y, \lambda)} = f(x, y) + \lambda g(x,y)

Cette fonction s’appelle le lagrangien.

Pourquoi devrais-je écrire encore une autre nouvelle forme de la fonction ? 🤔

En pratique, un ordinateur résout souvent ces problèmes d’optimisation. Cette forme les encapsuler mieux. Sans ordinateur, il serait probablement plus facile de séparer les fonctions comme nous l’avons déjà fait.

Pour l’instant, je vous laisse faire vos propres recherches à ce sujet ! Voici un point de départ.

Des ressources (en français et anglais)


Comments for Gradients, optimisation et multiplicateur de Lagrange



Written by Carmen Cincotti, computer graphics enthusiast, language learner, and improv actor currently living in San Francisco, CA.  Follow @CarmenCincotti

Contribute

Interested in contributing to Carmen's Graphics Blog? Click here for details!