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)