Traitez les contraintes d'égalité avec Lagrange
Une entreprise de livraison veut installer un entrepôt pour desservir trois gros clients de la métropole rennaise. Sans contrainte, elle le placerait au « centre » de ses clients. Mais la mairie impose une condition : l’entrepôt doit être construit le long de la rocade, pour ne pas faire traverser la ville aux camions. Le minimum libre n’est plus accessible ; où se trouve le meilleur point sur la route ?
Dans la deuxième partie, les minimums annulaient le gradient. Avec une contrainte d’égalité, ce n’est plus vrai : le gradient au meilleur point de la route n’a aucune raison d’être nul. Ce chapitre présente l’outil qui remplace la condition : les multiplicateurs de Lagrange. Cet entrepôt sera notre fil rouge pour toute la troisième partie.
Le fil rouge : placer un entrepôt
Section intitulée « Le fil rouge : placer un entrepôt »Plaçons un repère (en kilomètres) sur la carte. Les trois clients sont en , et . Pour un entrepôt en , on mesure l’effort de livraison par la somme des carrés des distances :
Le carré n’est pas qu’une commodité de calcul : il pénalise fortement les clients très éloignés. Le gradient vaut , où est le barycentre (le point moyen) des trois clients. Sans contrainte, le minimum est donc en , là où le gradient s’annule. On peut même écrire : les lignes de niveau de sont des cercles centrés sur .
La rocade, dans notre repère, est la droite . On l’écrit sous la forme d’une contrainte :
La condition de tangence
Section intitulée « La condition de tangence »Imaginez que vous vous promenez le long de la rocade en surveillant la valeur de . Tant que la route coupe une ligne de niveau de , vous pouvez continuer dans un sens où diminue. Le meilleur point est donc celui où la route ne coupe plus les lignes de niveau mais les touche : la ligne de niveau y est tangente à la contrainte.
Or le gradient de est perpendiculaire aux lignes de niveau, et le gradient de est perpendiculaire à la contrainte. Si les deux courbes sont tangentes, leurs perpendiculaires sont alignées : et sont colinéaires. Il existe donc un nombre tel que
Ce nombre s’appelle le multiplicateur de Lagrange de la contrainte.
Le lagrangien et la méthode
Section intitulée « Le lagrangien et la méthode »Pour ne rien oublier, on regroupe tout dans une seule fonction, le lagrangien :
- est l’objectif et les contraintes d’égalité ;
- est le multiplicateur associé à la contrainte , un réel de signe quelconque.
Le théorème de Lagrange s’énonce alors ainsi. Si est un minimum local de sous les contraintes , que et les sont , et que les gradients sont linéairement indépendants (c’est la condition de qualification), alors il existe des multiplicateurs tels que
Remarquez que la seconde condition s’écrit aussi : on cherche simplement les points critiques du lagrangien, en toutes ses variables. On obtient équations pour inconnues.
Ce que dit le multiplicateur
Section intitulée « Ce que dit le multiplicateur »Le multiplicateur n’est pas qu’un intermédiaire de calcul. Supposons que la rocade soit en fait la droite , et notons le coût optimal correspondant. On montre (sous des hypothèses de régularité) que
avec la convention . Le multiplicateur mesure la sensibilité du coût optimal à la contrainte, exactement comme les variables duales du chapitre 4 mesuraient la valeur d’une ressource. Ce n’est pas une coïncidence : les variables duales d’un programme linéaire sont des multiplicateurs de Lagrange.
Candidat ou solution ? Vérifier la conclusion
Section intitulée « Candidat ou solution ? Vérifier la conclusion »Les conditions de Lagrange sont nécessaires : elles fournissent des candidats, pas forcément des minimums. Un maximum sous contrainte les vérifie aussi, tout comme un point selle. Pour conclure, trois arguments sont possibles.
- La convexité. Si est convexe et les contraintes affines, tout candidat est un minimum global. C’est le cas de l’entrepôt : est une somme de carrés et la rocade une droite, donc est bien le minimum global.
- L’existence et la comparaison. Si l’ensemble réalisable est compact, le minimum existe (Weierstrass) et c’est forcément l’un des candidats : on les évalue tous et l’on garde le plus petit.
- Les conditions du second ordre. On étudie la Hessienne du lagrangien, restreinte aux directions tangentes à la contrainte. C’est plus technique, et on l’utilise quand les deux premiers arguments échouent.
En pratique, les petits systèmes de Lagrange se résolvent très bien par calcul formel :
import sympy as sp
x, y, lam = sp.symbols("x y lambda", real=True)f = (x**2 + y**2) + ((x - 4)**2 + y**2) + ((x - 2)**2 + (y - 6)**2) # entrepôtL = f + lam * (x + y - 2) # rocade
candidats = sp.solve([sp.diff(L, v) for v in (x, y, lam)], [x, y, lam], dict=True)print(candidats) # un seul candidat : x = 1, y = 1, lambda = 6En résumé
Section intitulée « En résumé »- Sous contrainte, le gradient de ne s’annule plus à l’optimum ; il devient colinéaire aux gradients des contraintes (condition de tangence).
- Le lagrangien transforme le problème en recherche de ses points critiques : et .
- Le théorème exige la qualification : gradients des contraintes linéairement indépendants à l’optimum.
- Le multiplicateur est une sensibilité : , comme un prix dual en programmation linéaire.
- Les conditions sont nécessaires : on conclut par la convexité ( convexe, contraintes affines), par compacité et comparaison des candidats, ou par le second ordre.
Exercices
Section intitulée « Exercices »Exercice · La canette la plus économe
facileUne canette cylindrique de rayon et de hauteur doit contenir cm³. On veut minimiser la surface de métal . Montrez avec Lagrange que la hauteur optimale est égale au diamètre, puis calculez les dimensions.
Voir la solution
La contrainte est . Le lagrangien donne :
- ;
- , d’où .
En reportant dans la première : , soit . La hauteur est égale au diamètre.
Alors , donc cm et cm, pour une surface d’environ 264 cm². Une vraie canette (rayon 3,3 cm, donc hauteur d’environ 9,6 cm pour le même volume) est plus élancée : sa surface totale serait d’environ 268 cm², soit 1,5 % de plus seulement, un prix raisonnable pour une canette qui tient bien en main.
En code
import numpy as npfrom scipy.optimize import minimize_scalar
V = 330surface = lambda r, h: 2 * np.pi * r**2 + 2 * np.pi * r * h
r = (V / (2 * np.pi)) ** (1 / 3) # solution de Lagrange : h = 2rprint(r, 2 * r, surface(r, 2 * r)) # 3.745 7.49 264.4
# Contrôle : on élimine h = V / (π r²) et on minimise en r seulres = minimize_scalar(lambda r: surface(r, V / (np.pi * r**2)), bounds=(1, 10), method="bounded")print(res.x, res.fun) # 3.745 264.4
h_reel = V / (np.pi * 3.3**2) # vraie canette de rayon 3,3 cmprint(h_reel, surface(3.3, h_reel) / res.fun - 1) # 9.65 0.015 : 1,5 % de métal en plusV <- 330surface <- function(r, h) 2 * pi * r^2 + 2 * pi * r * h
r <- (V / (2 * pi))^(1 / 3) # solution de Lagrange : h = 2rc(r, 2 * r, surface(r, 2 * r)) # 3.745 7.490 264.4
# Contrôle : on élimine h = V / (π r²) et on minimise en r seulres <- optimize(function(r) surface(r, V / (pi * r^2)), c(1, 10))res$minimum; res$objective # 3.745 ; 264.4
h_reel <- V / (pi * 3.3^2) # vraie canette de rayon 3,3 cmh_reel; surface(3.3, h_reel) / res$objective - 1 # 9.65 ; 0.015 : 1,5 % de plusExercice · Un enclos contre un mur
moyenOn veut construire un enclos rectangulaire contre un long mur, avec 8 mètres de grillage pour les trois autres côtés : un côté de longueur parallèle au mur, et deux côtés de longueur . Quelles dimensions maximisent l’aire ? Que vaut le multiplicateur, et que signifie-t-il ?
Voir la solution
On maximise sous , soit on minimise sous . Le lagrangien donne et , donc et . La contrainte impose , d’où , m et m, pour une aire de 8 m².
C’est bien un maximum : sur le segment réalisable (), l’aire vaut , une parabole tournée vers le bas qui s’annule aux extrémités.
Interprétation : avec la contrainte , l’aire optimale vaut , de dérivée pour . Chaque mètre de grillage supplémentaire rapporte environ 2 m² d’aire : c’est (le signe vient de ce qu’on a minimisé , dont la valeur optimale a pour dérivée ).
En code
import numpy as np
# Conditions de Lagrange : -y + λ = 0, -x + 2λ = 0, x + 2y = b (inconnues x, y, λ)def enclos(b): M = np.array([[0, -1, 1], [-1, 0, 2], [1, 2, 0]], dtype=float) return np.linalg.solve(M, [0, 0, b])
x, y, lam = enclos(8)print(x, y, lam, x * y) # 4.0 2.0 2.0 8.0
# Sensibilité : aire optimale pour 8,01 m de grillagex2, y2, _ = enclos(8.01)print((x2 * y2 - x * y) / 0.01) # 2.00125 : environ λ = 2 m² par mètre# Conditions de Lagrange : -y + λ = 0, -x + 2λ = 0, x + 2y = b (inconnues x, y, λ)enclos <- function(b) solve(rbind(c(0, -1, 1), c(-1, 0, 2), c(1, 2, 0)), c(0, 0, b))
s <- enclos(8)s; s[1] * s[2] # x = 4, y = 2, λ = 2 ; aire 8
# Sensibilité : aire optimale pour 8,01 m de grillages2 <- enclos(8.01)(s2[1] * s2[2] - s[1] * s[2]) / 0.01 # 2.00125 : environ λ = 2 m² par mètreExercice · Deux contraintes à la fois
difficileTrouvez le point le plus proche de l’origine sur la droite de l’espace définie par et , c’est-à-dire minimisez sous ces deux contraintes. Donnez les multiplicateurs.
Voir la solution
Le lagrangien est . Les gradients des contraintes, et , sont linéairement indépendants : le problème est qualifié. Les conditions :
Des contraintes, et . En ajoutant les deux premières équations : , et la troisième donne . Donc , soit , d’où , puis et .
Les multiplicateurs valent et (vérification : ). La distance minimale au carré vaut . L’objectif est convexe et les contraintes affines : c’est le minimum global.
En code
import numpy as np
# Inconnues (x, y, z, λ1, λ2) : stationnarité (3 équations) puis contraintes (2)M = np.array([[2, 0, 0, 1, 1], [0, 2, 0, 1, -1], [0, 0, 2, 1, 0], [1, 1, 1, 0, 0], [1, -1, 0, 0, 0]], dtype=float)x, y, z, l1, l2 = np.linalg.solve(M, [0, 0, 0, 3, 1])print(x, y, z, l1, l2) # 1.5 0.5 1.0 -2.0 -1.0print(x**2 + y**2 + z**2) # 3.5# Inconnues (x, y, z, λ1, λ2) : stationnarité (3 équations) puis contraintes (2)M <- rbind(c(2, 0, 0, 1, 1), c(0, 2, 0, 1, -1), c(0, 0, 2, 1, 0), c(1, 1, 1, 0, 0), c(1, -1, 0, 0, 0))s <- solve(M, c(0, 0, 0, 3, 1))s # 1.5 0.5 1.0 -2.0 -1.0sum(s[1:3]^2) # 3.5