M1 Mathématiques Appliquées
Université Paris–Sud Compléments d’Optimisation
Centre d’orsay Année 2015 − 2016
© J.-B.A.K. <[email protected]>
TP 2 : Optimisation sous contrainte, un problème d’obstacle.
On souhaite résoudre numérique un problème d’optimisation donné sous la forme :
Minimiser J(u) sur K = {v ∈ RN : ϕ1 (v) ≤ 0, . . . , ϕd (v) ≤ 0}. (1)
La fiche est formée de trois parties :
— parie 1 : On présente un problème concret dont le problème discret associé rentre dans ce formalise.
— parie 2 : On présente deux méthodes de résolution assez classiques de part leur simplicité de mise en oeuvre.
— parie 3 : Un travail à rendre est proposé avec pour objectif un approfondissement ou une synthèse des acquis.
Partie - 1 Le problème et sa discrétisation par différences finies
Soit f et g deux fonctions continues données sur [0, 1]. On souhaite résoudre le problème d’obstacle suivant : trouver
u : [0, 1] → R telle que
−u00 (x) ≥ f (x),
u(x) ≥ g(x), sur ]0, 1[, etu(0) = u(1) = 0. (2)
(−u00 (x) − f (x))(u(x) − g(x)) = 0,
La première équation traduit une concavité maximale de la fonction u. La deuxième équation représente l’obstacle : on
veut que la solution u soit au dessus de g. La troisième équation traduit le fait que l’on a au moins égalité dans une des
deux équations précédentes : soit on résout −u00 (x) = f (x), soit u(x) = g(x), et u est sur l’obstacle.
Comme dans le TP 1, on discrétise le problème par différences finies. On introduit une subdivision uniforme xi = ih
de [0, 1], où h = N1+1 désigne le pas en espace du maillage et où i ∈ {0, . . . , N + 1}. On cherche alors à résoudre le
problème suivant :
−ui−1 + 2ui − ui+1
≥ f (x i ),
h2
ui ≥ g(x i ), pour i = 1 . . . N, et u0 = uN −1 = 0. (3)
−ui−1 + 2ui − ui+1
− f (xi ) (ui − g(xi )) = 0,
h2
On note à nouveau JN la fonctionnelle définie par
1
JN (u) = (AN u, u) − (fN , u).
2
où AN et fN sont donnés par :
2 −1 0
.. .. f (x1 )
−1 . . ..
= h2
AN = et fN .
.
.. ..
. . −1 f (xN )
0 −1 2
Q-1 : Montrer l’équivalence suivante :
u1
. uN minimise JN (u)
uN = .. est solution de (3) ⇔ (4)
sur KN = {v = (vi )i=1...N : vi ≥ gi ∀ i}.
uN
Q-2 : Préciser alors les quantités : J, K, ϕi , i = 1, . . . d, et d du problème (1) dans ce cas.
1
Partie - 2 Deux exemples classiques de méthode de résolution
Nous explorons ici deux méthodes de résolution du problème décrit précédemment. Les méthodes présentées dans cette
partie voient leur importance simplement à travers la facilité de leur mise en oeuvre.
Partie - 2- 1 Méthode de gradient projeté
On rappelle l’algorithme du gradient projeté à pas fixe pour minimiser une fonctionnelle J : RN → R sur un ensemble
K, pour un point de départ u0 , un pas ρ et un test d’arrêt ε préalablement définis :
Méthode du gradient projeté à pas fixe
Initialiser le résidu r0 à 1 et le compteur k à 0.
Tant que le résidu est plus grand que ε et que le compteur n’est pas trop grand :
— calculer la descente wk = −∇J(uk ),
— poser uk+1 = PK (uk + ρwk ), où PK désigne la projection sur K,
— calculer le résidu : rk+1 = ||uk+1 − uk ||,
— incrémenter le compteur.
Q-3 : Montrer que la projection sur KN est donnée par :
PKN (u) = (max(ui , gi ))i=1...N .
Ecrire un programme projK.m qui prend en argument un point u et gN = (g(xi ))i=1...N , et qui renvoie PKN (u).
Q-4 : Mise en oeuvre. Implémenter cet algorithme à travers une fonction de prototype :
Code Listing 1: Fichier gradient_projete.m
function [u,iter] = gradient_projete(J, DJ, gN, u0, rho, epsilon, iterMax, store)
% ENTREES
% J : fonctionnelle à minimiser.
% DJ : le gradient de la fonctionnelle à minimiser.
% gN : vecteur identifiant le convex K i.e K={v : v[i] >= gN[i],i=1...d}
% u0 : valeur initiale.
% rho : pas fixe.
% epsilon : test d’arrêt.
% iterMax : nombre maximal d’itérations autorisées.
% store : paramètre controllant le type de stockage dans u. Il prend les valeurs 0 ou 1.
% SORTIES
% u : dernier terme de la suite des itérés uk si store = 0 ou tous les termes si store = 1.
% iter : nombre d’itérations effectuées.
On adaptera simplement le programme gradient_fixe.m du TP 1
Q-5 : Validations 1/2. Créer un script script_TP3.m et tester la fonction gradient_projete.m pour
f (x) = 1, g(x) = max (1.5 − 20(x − 0.6)2 , 0), N = 2, 5, 20, 50, 100, ε = 10−5 , et ρ choisi de façon optimale, c’est-à-
dire :
2
ρ=
λ1 + λN
où λ1 et λN sont respectivement la plus petite et la plus grande valeur propre de AN .
Afficher à l’aide de la fonction fprintf le nombre d’itérations ainsi que le temps de calcul pour chaque N . Tracer sur
une même figure les solutions approchées uN , ainsi que le graphe de la fonction g.
Q-6 : Validations 2/2. Reprendre la question précédente pour f (x) = π 2 sin(πx).
2
Partie - 2- 2 Méthode de pénalisation
La méthode de pénalisation consiste à remplacer le problème de minimisation sous contrainte (4) en une suite de
problèmes de minimisation sans contrainte qui converge vers (4).
η
Soit η > 0 donné, et JN défini par :
N
η 1X
JN (u) = JN (u + (max(gi − ui , 0))2 .
η i=1
Le minimiseur uηN de JN η
sur RN converge vers uN quand η tend vers 0.
η
On admet que le gradient de JN est donné par :
η 2
∇JN (u = AN u − fN − signe(gi − ui ) max(gi − ui , 0)
η i=1,...,N
−1 si x < 0
où la fonction signe est définie par : signe(x) = 0 si x = 0
1 si x > 0
Q-7 : Mise en oeuvre. En adaptant la fonction gradient_fixe.m du TP1, implémenter cet algorithme à travers
une fonction une fonction penalisation.m
Code Listing 2: Fichier penalisation.m
function [u,iter] = penalisation(J, DJ, gN, eta, u0, rho, epsilon, iterMax, store)
% ENTREES
% J : fonctionnelle à minimiser.
% DJ : le gradient de la fonctionnelle à minimiser.
% gN : vecteur identifiant le convex K i.e K={v : v[i] >= gN[i],i=1...d}
% eta : parametre de penalisation destiné à tender vers 0
% u0 : valeur initiale.
% rho : pas fixe.
% epsilon : test d’arrêt.
% iterMax : nombre maximal d’itérations autorisées.
% store : paramètre controllant le type de stockage dans u. Il prend les valeurs 0 ou 1.
% SORTIES
% u : dernier terme de la suite des itérés uk si store = 0 ou tous les termes si store = 1.
% iter : nombre d’itérations effectuées.
Q-8 : Validations. Tester cette fonction pour les valeurs numériques de la question Q-5, en prenant :
N = 50, ρ = 0.1 et η = 105 , 104 , 103 , 102 , 10, 1, 0.1. Afficher à l’aide de la fonction fprintf le nombre d’itérations
ainsi que le temps de calcul pour chaque η. Tracer sur une même figure les iso-solutions approchées uηN , ainsi que le
graphe de la fonction g et le graphe de la solution de −u00 (x) = 1. Que constatez-vous pour η grand ? Pour η petit ?
Note 1 (Indications).
On rappelle que si l’on dispose des deux fonctions
function [v] = penalite(u,gN,etha) function [v] = grad_penalite(u,gN,eta)
dont le premier implémente le terme de pénalisation et le second son gradient, alors le listing suivant
implémente la méthode du gradient pour le problème pénalisé
Jf = @(U) (J(U) + penalite(U,gN,eta)) ;
DJf = @(U) (DJ(U) + grad_penalite(U,gN,eta)) ;
[u, iter] = gradient_fixe(Jf,DJf,u0,rho,epsilon,iterMax,store);
Il faut remarquer que dans le cas du problème considéré, la pénalisation apporte un terme quadratique !
3
Partie - 3 Devoir maison : à rendre
Note 2 (Recommandations).
Cette partie porte sur la résolution du problème décrit dans la Partie-1, par une méthode d’Uzawa et une
version ajustée de la méthode de pénalisation.
Le problème dans sa mise en oeuvre est expressément décrit de manière succincte afin que le choix des
paramètres des fonctions vous incombe. En effet ceci sera pris en compte dans l’évaluation. Seront aussi
pris en compte :
• La structuration des fonctions via une décomposition fonctionnelle que vous jugerez optimale pour
alléger la lecture et faciliter la ré-utilisabilité.
• Le choix des arguments d’entrée et de sortie ainsi que leur position et leur nombre, permettant de
mener convenablement et de manière pertinente les expériences demandées.
• Un effort de recherche bibliographie, si l’interprétation rigoureuse des résultats obtenus le réclame.
Partie - 3- 1 Méthode d’Uzawa
On souhaite ici résoudre le problème (1) par la méthode d’Uzawa. Pour λ = (λ1 , . . . , λd ), on note
d
X
Lλ (u) = J(u) + λi ϕi (u).
i=1
La méthode d’Uzawa consiste à remplacer le problème (1) par une suite de problèmes de minimisation sans contrainte
portant sur les Lλ .
Pour un point de départ u0 , un choix initial de λ0 = (λ01 , . . . , λ0d ), une tolérance ε, et un pas ρ donné, cet algorithme
s’écrit de la façon suivante :
Méthode d’Uzawa
Initialiser le résidu r0 à 1 et le compteur k à 0.
Tant que le résidu est plus grand que ε et que le compteur n’est pas trop grand :
— calculer uk+1 le minimiseur de v 7→ Lλk (v) (voir Note 4),
— poser λk+1 = (max(λki + ρϕi (uk+1 ), 0))i=1...d ,
— calculer le résidu rk+1 = ||uk+1 − uk ||,
— incrémenter le compteur.
Dans la suite on considère le problème de la section précédente (voir aussi Partie-2-1).
Q-9 : On souhaite utiliser la méthode du gradient à pas fixe pour calculer à chaque étape le minimiseur de
v 7→ Lλk (v). Écrire une fonction gradient_fixe_lambda.m qui prend en argument λ, ρ, ε et un point de départ
u0 , et qui retourne le minimiseur de v 7→ Lλ (v).
Q-10 : Créer un script script_uzawa.m et résoudre le problème de minimisation sous contrainte min J(u) à
u∈K
l’aide de l’algorithme d’Uzawa. On prendra u0 et λ0 nuls.
Q-11 : Que se passe-t-il si l’on augmente le pas ρ ?
Q-12 : Peut-on modifier l’algorithme d’Uzawa de sorte à faire varier ρ ? Y’ a-t-il intérêt à le faire ?
4
Partie - 3- 2 Méthode de pénalisation
Note 3.
— La fin de l’exercice sur la méthode de pénalisation de la Partie-2 a mis en évidence des
comportements différents suivant les valeurs du paramètre de pénalisation.
— Il est donc judicieux de mettre en place un algorithme itératif permettant d’ajuster le paramètre le
pénalisation à chaque itération.
— On se propose ici de mettre en oeuvre un tel algorithme et de le comparer avec la méthode
d’Uzawa sous la main. Mais pour que cette comparaison soit être possible, l’algorithme dans son
implémentation devra retourner à chaque itération une approximation du multiplicateur de Lagrange.
On procède comme dans la méthode d’Uzawa. Pour η ∈ R∗ , on note
d 2
1 X
Lη (u) = J(u) + max(ϕi (u), 0) .
η i=1
La méthode de pénalisation avec ajustement du paramètre de pénalisation s’écrit alors :
Méthode de pénalisation
Initialiser le résidu r0 à 1, le compteur k à 0 et η0 à 1.
Tant que le résidu est plus grand que ε et que le compteur n’est pas trop grand :
— calculer uk+1 le minimiseur (approché) de v 7→ Lηk (v) : voir Note 4
— mettre à jour le multiplicateur de Lagrange λk+1 : voir Note 5,
— choisir un nouveau paramètre de pénalisation ηk+1 < ηk : voir Note 5,
— calculer le résidu rk+1 = ||uk+1 − uk ||,
— incrémenter le compteur.
Q-13 : Modifier la fonction penalisation.m de la question Q-7, pour mettre en oeuvre cet algorithme.
Q-14 : Créer un script script_penalisation.m et résoudre le problème de la Partie-1 (voir Q-8).
Q-15 : Comparer avec la méthode d’Uzawa pour le problème considéré. On insistera sur la qualité de la solution,
la difficulté à obtenir la solution qu’on pourra mesurer par les nombres d’itérations et les temps mis pour la résolution.
On commentera les valeurs approchées du multiplicateur de Lagrange obtenu.
Note 4 (Résolution du problème sans contrainte).
La résolution du problème de minimisation sans contrainte peut se faire soit à l’aide des fonctions
fminsearch, fminunc ... de Matlab, soit en faisant recours à l’une des méthodes vues au
précédent TP.
5
Note 5 ( Mise à jour des paramètres : ηk+1 et λk+1 = (λk+1
1 , . . . , λk+1
d )).
1. Paramètre de pénalisation :
La mise à jour du nouveau paramètre de pénalisation peut se faire de la manière suivante :
ηk
ηk+1 = . (5)
100
2. Multiplicateur de Lagrange dans la méthode pénalisation :
La méthode de pénalisation ne dépend pas du multiplicateur de Lagrange. On peut néanmoins estimer
le multiplicateur de Lagrange par la formule suivante :
2
λk+1
i = max(ϕi (uk ), 0) i = 1, . . . , d. (6)
ηk