Vous êtes sur la page 1sur 6

TP1 Optimisation SM6 Mr. SADIK et Mr.

BOUIDI

Introduction
Le logiciel Matlab a une srie dalgorithmes dj implments pour trouver les racines
(root, fzero), les moindres cars (lsqcurvefit, lsqlin. . .), la solution de systme dqua-
tions (fsolve,fzero) et la minimisation, en une ou plusieurs dimensions. Pour minimiser
une fonctions une variable dans un domaine, on utilise fminbnd et si la fonction a plu-
sieurs variables, on utilise fminsearch. Pour le cas de problmes contraints, on utilise
linprog et quadrprog pour les cas linaires et quadratiques respectivement. La fonction
fmincon permet de trouver le minimum dun problme avec contraintes non linaire et
multivariable.
Matlab possde un toolkit (une bibliothque) doptimisation (Optimization Toolbox) pour
les problmes plus compliqus, qui automatise via GUI (interface graphique) le processus
de choix de lalgorithme. Matlab utilise plusieurs algorithmes selon le type de problme
rsoudre. Par exemple, on cite :
Interior reflective Newton method ;
Trust-region-dogleg ;
Trust-region-reflective ;
Levenberg-marquardt ;
Simplex ;
BFGS ;
MinMax. . .

Points critiques : maximums, minimums


Pour trouver les maximums et les minimums dune fonction, on utilise le calcul dif-
frentiel, et l o la drive de la fonction sannule, on trouve soit un maximum soit un
minimum. Un minimum local est facil trouver, mais il est difficile de trouver un mini-
mum absolu (ou global).

En gnral, une fonction a plusieurs minimums. Pour arriver la solution dsire (mi-
nimum global), il est trs important danalyser la fonction en dtail avant de choisir un
point de dpart x0 pour lalgorithme.
Pour trouver le type de point critique, on utilise les deuximes drives values dans le
00
point dtude. Pour le cas dune fonction une variable f : x 7 f (x), si f (a) > 0, on
00
trouve un minimum local en ce point, si f (a) < 0, on trouve un maximum local et si
00
f (a) = 0, on ne peut rien dire, mais a peut tre un point selle.

Par exemple, pour les fonctions continues et deux fois drivables, les points station-
naires identifis (l o la drive est 0) sont classs selon la matrice Hessienne (minimum

1
local si positif, maximum local si ngatif et indfini sil sagit dun point selle). Pour
le cas dune fonction deux variables, on trouve fxx (x, y), fyy (x, y) et fxy (x, y) va-
lus au point (a, b). Le dterminant de la matrice Hessienne 1 est dfinie par : |H| =
2
fxx (x, y) fyy (x, y) fxy (x, y)
2
fxx (x, y) fyy (x, y) fxy (x, y) fxx (x, y) Classification
>0 >0 Minimum local
>0 <0 Maximum local
<0 >0 Point de selle

Pour trouver les points extrmes (ou points critiques) dune fonction de deux variables,
par exemple : f (x, y) = x3 + y 3 + 3x2 3y 2 8, on doit trouver les points qui annulent
les drives partielles de la fonction x f (x, y) = 0 et y f (x, y) = 0.

syms x y ;
f = x3 + y3 + 3 x2 3 y2 8 ;
fx = diff(f,x)
fy = diff(f,y)
S = solve(fx,fy)

La commande solve trouve les solutions qui sont gales zro simultanment pour les
deux fonctions drives. S est une structure variable. Pour voir les valeurs de S :

[S.x,S.y]

Le rsultat montre les points critiques pour la fonction analyse (0, 0), (0, 2), (2, 0)
et (2, 2).
Pour visualiser les rsultats, on peut utiliser la fonction :

[x,y] = meshgrid(-3 :0.1 :3) ;


z = x.3 + y.3 + 3 x.2 3 y.2 8 ;
mesh(x,y,z)
xlabel(x)
ylabel(y)
zlabel(z=f(x,y))

2f 2f 2f


x21 x1 x2 ... x1 xn



2f 2f
..
... .

2f x2 x1 x2 x2
1. Hij (f ) = =

xi xj .. .. .. ..
.

. . .
2f 2f 2f


xn x1 xn x2 ... x2n

2
On a aussi la fonction

surfc(x,y,z)

Parfois cest aussi utile de visualiser les lignes de niveaux dans un graphique spar

contour(x,y,z)

Ou dans le mme graphique, on utilise pour dessiner les contours en dessous de la


maille ou pour dessiner les courbes de niveau en dessous de la surface.

meshc(x,y,z)
surfc(x,y,z)

On peut changer le paramtre par dfaut des courbes de niveau :

contour(x,y,z,20)

On observe mieux les deux points critiques (-2,0) et (2,0).


Matlab permet aussi de dessiner les courbes diffrentes hauteurs avec :

[C,h] = contour(x,y,z,-14 :-4) ;


clabel(C,h)

A partir de ces contours, on observe :

Peu importe la direction dapproche du point (-2,0), les courbes de niveau aug-
mentent. Par consquent, on trouve un maximum local (-2,0).
Peu importe la direction dapproche du point (0,2), les courbes de niveau diminuent.
Par consquent, on trouve un minmum local (0,2).
Pour les points (0,0) et (-2,2), on observe une croissance des courbes de niveau
selon les directions opposes. on peut dire quil y a un point de selle (0,0) et
(-2,2).

3
Optimisation avec Matlab
Minimisation unidimensionnel : fminbnd
Les mthodes doptimisation pour les fonctions une variable sappellent recherche
par ligne ("line searche"). Les algorithmes implments dans Matlab pour la fonction
fminbnd sont "Golden section search" et linterpolation parabolique.
On cre une fonction externe dans un fichier f.m. Travailler avec des fichiers externes
permet de simplifier et rduire les erreurs.

function y = f(x)
y = 1./((x 0.3).2 + 0.01) + 1./((x 0.9).2 + 0.04) 6;

On peut observer la fonction

clear all
fplot(f,[-5 5])
grid on

On fait un zoom pour observer o se trouve notre minimum

fplot(f,[-5 5 -10 25])


grid on

Notre minimum se trouve entre 0.3 xmin 1

min=fminbnd(f,0.3,1,optimset(Display,iter))
fplot(f,[0 2])
hold on
plot(min,f(min),r*) ;

La fonction fminbnd permet de trouver le minimum de la fonction dans un intervalle


donn. Dans les options, on peut voir les approximation successives et lalgorithme que
Matlab utilise avec optimset(Display,iter).

4
Minimisation multidimensionelle : fminsearch, fminunc
Dans Matlab, pour minimiser une fonction plusieurs variables, on utilise lalgo-
rithme du Simplex qui est implment dans fminsearch. Matlab utilise cet algorithme
car il na pas besoin de calculer ni le gradient ni la matrice Hessienne chaque itration.

Exemple :

On dfinit dans un fichier g.m la fonction suivante :

g(x) = 100(x2 x21 )2 + (1 x1 )2 , x = (x1 , x2 ).

function y = g(x)
y = 100 (x(2) x(1)2 )2 + (1 x(1))2 ;

On peut minimiser la fonction via les commandes suivantes

x0 = [5 5] ;
[x, gval, exitflag, output] = fminsearch(g,x0)

Une autre fonction avec une syntaxe similaire est le fminunc qui solutionne des pro-
blmes doptimisation non linaires, multi-variables et sans restrictions Cette fonction
permet de changer entre algorithmes diffrents par exemple de mthode de "Interior Re-
flective Newton" (si lon connait les drives) ou la mthode BFGS en cas contraire.
Lalgorithme BFGS approxime la matrice Hessienne (mthode quasi-Newton).

Exemple dans le fichier h.m, on dfinit la fonction suivante

h(x) = x21 x2 + x1 x22 + x21 + x22

function y = h(x)
y = x(1)2 x(2) + x(1) x(2)2 + x(2)2 + x(2)2 ;

a) Pour le cas BFGS, qui approxime la matrice Hessienne chaque pas de calcul :

x0 = [1 -1] ;
[x, hval, exitflag, output] = fminsearch(@h,x0)

5
b) Si lon connait le gradient, on peut le dfinir explicitement

function [y,dy] = hdh(x)


y = x(1)2 x(2) + x(1) x(2)2 + x(2)2 + x(2)2 ;
dy(1) = 2 x(1) x(2) + x(2)2 + 2 x(1) ;
dy(2) = x(1)2 + 2 x(1) x(2) + 2 x(2) ;

Dans lespace de travail de Matlab, on saisit les instructions

options = optimset(GradObj,on);
x0 = [1 1] ;
[x, hval, exitflag, output] = fminsunc(@hdh,x0,options)