sujet - Université Paris

Transcription

sujet - Université Paris
Université Paris-Dauphine
Département MIDO
DUMI2E troisième année
Optimisation numérique
Gérard Lebourg
année /
Examen d’appel
On cherche à minimiser, sur le cône positif C = { x ∈ RN | xi ≥ 0, i = 1..N } de RN , une fonction
F : RN 7→ R, convexe et de classe C 1 sur C, problème que l’on désigne dans la suite par (P). On se propose
de résoudre numériquement ce problème à l’aide de la procédure GUMP utilisée en TPs. On rappelle que GUMP
se présente comme une fonction Matlab prenant trois arguments :
1. une structure pb contenant la donnée du problème à résoudre
2. une structure algo précisant l’algorithme de descente utilisé
3. un entier itermax limitant - éventuellement - le nombre d’itérations : la valeur : itermax =inf
(+∞ en Matlab) est possible.
GUMP utilise une structure trial, actualisée à chaque passage dans la boucle de l’algorithme, dont les
« champs » contiennent toute l’information attachée au point courant, en particulier :
1. le champ trial.x contient la valeur du point courant
2. les champs trial.f et trial.g contiennent respectivement les valeurs du critère et de son gradient au
point trial.x
3. le champ trial.d contiendra la direction de recherche calculée par l’algorithme au point trial.x
1. (4 pts) La structure pb, passée pour argument à GUMP, ne comportera que deux champs :
1. le champ pb.init contiendra l’initialisation de l’algorithme. On utilisera pb.init=zeros(N,1).
2. le champ pb.crit contiendra une « poignée » @myfun sur une fonction myfun (un « oracle ») prenant
pour argument un point x de RN , et retournant, en fonction du nombre d’arguments avec lesquels elle
est appelée, la valeur du critère F au point x dans une variable f , ainsi, éventuellement, que celle de
son gradient dans une variable g .
Donner le code Matlab de myfun en supposant : A M × N matrice réelle donnée, b vecteur donné de RM ,
et : F (x) = kA ? x − bk2 . Déclarer A et b comme variables globales.
2. (3 pts) Le champ algo.searchdir de la structure algo, qui sera passée pour argument à GUMP, devra
contenir une « poignée » @mydir sur une fonction mydir. GUMP passera pour argument la structure trial à
cette fonction, qui devra retourner la direction de recherche mydir(trial) au point courant trial.x. On
utilisera le code :
function d= mydir(trial)
x= trial.x; g=trial.g;
d=trictrac(x,g);
function d= trictrac(x,g)
d=x-g;
I=find(d<0); % retourne l’ensemble I ⊂ [1, N ] des indices i tels que: di < 0
d(I)=0;
% di = 0 si: i ∈ I
d=d-x;
TSVP
On s’intéresse dans cette question à la sous-fonction trictrac apparaissant dans le code de mydir. Prouver
que : x ∈ C, g ∈ RN , et : d =trictrac(x, g) impliquent :
a. x + d ∈ C
b. g 0 ? d ≤ −kdk2
c. d = 0 ⇒ (g ≥ 0)&(g 0 ? x = 0)
(indication : calculer di pour i ∈ I et i 6∈ I où I est défini comme dans le corps de trictrac)
3. (5 pts) Le champ algo.stoppingtest de la structure algo devra contenir une « poignée » @mystop sur
une fonction booléenne mystop. GUMP passera pour argument la structure trial à cette fonction, une fois
la direction de recherche mydir(trial) calculée. La valeur mystop(trial)=1 permettra éventuellement
de générer un break : l’algorithme s’arretera - même si le nombre maximal itermax d’itérations n’est pas
atteint - et retournera la valeur du point courant trial.x. On utilisera le code :
function bool=mystop(trial)
bool=(trial.d==0)
a. Ecrire les KKT associées au problème (P) (on notera µ un vecteur de multiplicateurs associé aux
contraintes).
b. Déduire que x ≥ 0 est solution de (P) si et seulement si : ∇F (x) ≥ 0 et ∇F (x)0 ? x = 0 .
c. En utilisant 2.c, conclure que l’algorithme ne s’arretera avant itermax iterations que si il trouve auparavant une solution de (P).
4. (4 pts) Le champ algo.stepsize de la structure algo devra également contenir une « poignée » sur
une fonction Matlab à laquelle sera passée pour argument dans GUMP la structure trial. Cette fonction
devra retourner le pas calculé par l’algorithme au point trial.x dans la direction trial.d. On définira :
algo.stepsize=@backtrack. On rappelle que backtrack teste d’abord le pas : t = 1. Si ce pas vérifie la
condition d’Armijo avec la valeur fixée du paramètre : α = 0.1, le pas : t = 1 est accepté et backtrack
retourne la valeur 1. Sinon, backtrack réduit le pas en remplaçant t par l’abscisse du sommet de la parabole
tangente au graphe de la fonction de ligne ϕ définie par : ϕ(t) = F (trial.x + t ? trial.d) passant par le point
(t, ϕ(t)) jusqu’à ce que la condition d’Armijo soit vérifiée. Montrer que :
a. la suite xk des points calculés par l’algorithme, initialisée par x0 =pb.init=zeros(N,1), restera toujours
dans le cône positif C de RN .
b. la suite F (xk ) des valeurs correspondantes du critère sera décroissante.
5. (5 pts) On suppose en fait F de classe C 2 sur le cône positif C de RN , et la norme spectrale de sa Hessienne
majorée, en tout point de C, par une constante K. Prouver que le pas calculé, à chaque étape, par backtrack
sera toujours supérieur à min(1, 1/K).
6. (5 pts) On suppose en outre vérifiée l’hypothèse :
(H)
xk ∈ C, kxk k → +∞ ⇒ F (xk ) → +∞
Prouver que :
a. la suite xk des points calculés par l’algorithme avec itermax=inf aura au moins un point d’adhérence.
b. tout point d’adhérence de la suite xk sera solution du problème (P).
(utiliser 2.b)
c. la distance de xk a l’ensemble des solutions de (P) tendra nécessairement vers zéro.
(raisonner par l’absurde)