Upload
others
View
22
Download
0
Embed Size (px)
Citation preview
Metode de Optimizare – Curs 14
1
VII.3.5. Metode Newton modificate
În ultimul algoritm prezentat în cursul trecut în situaţia în care hessiana
Hf(xk) nu era pozitiv definită se folosea drept direcţie de deplasare vk = -∇f(xk)
specifică metodei gradientului. Altă variantă este modificarea ad-hoc a matricei
Hf(xk). Mai precis, folosirea unei direcţii de forma Bk = Hf(xk) + Ek unde Ek este o
matrice aleasă astfel încât Hf(xk) + Ek să fie „suficient de pozitiv definită” (Ek = 0
dacă Hf(xk) este „suficient de pozitiv definită”). Metodele de acest tip poartă
numele de metode Newton modificate (sau metode Newton cu modificarea
hessianei).
Algoritmul asociat metodelor de tip Newton modificate este schiţat mai
jos (se presupune x0 dat) k: = 0;
cât timp ||∇f(xk)|| ≠0 execută
pasul 1: * se calculează Bk = Hf(xk) + Ek, unde Ek este o matrice aleasă
astfel încât Hf(xk) + Ek să fie „suficient de pozitiv definită” (Ek
= 0 dacă Hf(xk) este „suficient de pozitiv definită”)
pasul 2: *se rezolvă sistemul Bkvk = -∇f(xk)
pasul 3: *se determină pasul de deplasare tk (suboptimal) asociat
direcţiei de deplasare vk;
pasul 4: xk+1 = xk + tkvk ; k: = k+1;
Pentru determinarea matricei Bk putem pleca de la descompunerea
spectrală a matricei simetrice Hf(xk), adică scrierea ei sub forma Hf(xk) = QDQt,
unde Q este o matrice ortogonală (având pe coloane vectori proprii ai lui Hf(xk))
iar D o matrice diagonală (având pe diagonala principală valorile proprii ale lui
Hf(xk)):
Se poate lua Bk = Hf(xk) + Ek = QDmQ
t, unde
λ1 0 0 … 0
0 λ2 0 … 0
0 0 0 … λn
D =
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
2
cu µi = max (ε, |λi|) pentru orice 1 ≤ i ≤ n (sau eventual, µi = max (ε, λi) pentru
orice 1 ≤ i ≤ n), ε fiind un număr pozitiv „mic” (de exemplu, ε = machε , unde
εmach este precizia maşinii). O astfel de descompunere necesită un volum mare de
calcul dacă n mare. Un volum mai mic de calcul se obţine dacă se estimează doar
cea mai mică valoare proprie λmin(Hf(xk)) a matricei Hf(xk) şi se ia
ε fiind un număr pozitiv „mic”.
Dacă matricea Hf(xk) are o valoare proprie negativă mare în modul şi
restul valorilor proprii pozitive dar mici în modul, atunci se poate întâmpla ca prin
această metodă direcţia de deplasare obţinută să fie esenţial direcţia celei mai
rapide descreşteri.
Alte metode de modificare a hessianei se bazează pe factorizări Cholesky.
Probabil cea mai simplă idee este de a determina un scalar τ >0 cu proprietatea că
Hf(xk) + τIn este „suficient de pozitiv definită”. Un algoritm pentru determinarea
lui τ (bazat pe factorizări Cholesky) este prezentat mai jos (pentru simplitate
notăm Hf(xk) = A, iar elementele de pe diagonala principală cu aii, 1≤i≤n) :
ρ > 0 dat (de exemplu, ρ = 10-3)
dacă min{aii, 1≤i≤n} > 0 atunci τ0 : = 0
altfel τ0 : = - min{aii, 1≤i≤n} + ρ
µ1 0 0 … 0
0 µ2 0 … 0
0 0 0 … µn
Dm =
max(0, ε-λmin(Hf(xk))) 0 0 … 0
0 max(0, ε-λmin(Hf(xk))) 0 … 0
0 0 0 … max(0, ε-λmin(Hf(xk)))
Ek = = max(0, ε-λmin(Hf(xk)))In
Metode de Optimizare – Curs 14
3
pentru k = 0, 1, … execută
* se încearcă factorizarea Cholesky LLt = A + τkIn
dacă factorizarea reuşeşte atunci return L şi STOP
altfel τk+1 : = max (2τk, ρ)
Prezentăm în continuare implementarea în MAPLE ale algoritmului de
mai sus. Procedura are drept parametri funcţia obiectiv f, punctul iniţial, notat x00,
şi precizia ε (criteriul de oprire este ||∇f(xk)|| < ε). Deoarece procedura foloseşte
comenzi (vector, grad, hessian, cholesky, etc.) din pachetul linalg, înainte de
utilizarea ei pachetul trebuie încărcat:
> with(linalg):
Funcţionare procedurii va fi exemplificată pentru funcţiile
> f1:=(x,y)->3*x^2+2*y^2-2*x*y-4*x+2*y-3;
:= f1 → ( ),x y + − − + − 3 x2 2 y2 2 x y 4 x 2 y 3
> f2:=(x,y)->10*(y-x^2)^2+(x-1)^2;
:= f2 → ( ),x y + 10 ( ) − y x22
( ) − x 1 2 > f4:=(x,y)->1/(x-1)^4/4+(y^2-x);
:= f4 → ( ),x y + − 14
1
( ) − x 1 4y2 x
> f6:=(x,y)->x^2*(4-2.1*x^2+x^4/3)+x*y+y^2*(-4+4*y^2);
:= f6 → ( ),x y + + x2
− + 4 2.1 x
2 13
x4 x y y2 ( )− + 4 4 y2
Implementarea unei variante a metodei Newton modificate (pasul de deplasare
este generat prin algoritmul backtracking-Armijo) :
> newton_modif:=proc(f,x00,epsilon)
> local x0,x1,g,H,g0,H0,L,y,v,n,t,z0,tinit,
beta,delta,p,pp,rho,tau,md,test,dd;
> n:=vectdim(x00); x0:=vector(n); x1:=vector(n);y:=vector(n);
>v:=vector(n);beta:=0.5;delta:=0.1;tinit:=1.;
>L:=matrix(n,n);dd:=floor(Digits/2);
> g:=grad(f(seq(x[i],i=1..n)),[seq(x[i],i=1..n)]);
> H:=hessian(f(seq(x[i],i=1..n)),[seq(x[i],i=1..n)]);
> x0:=map(evalf,x00);
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
4
> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);
> while norm(g0,2)>=epsilon do
> H0:=evalm(matrix(n,n,[seq(seq(subs(seq(x[i]=x0[i],i=1..n),
H[j,p]),j=1..n),p=1..n)]));
> rho:=0.001;
>md:=min(seq(H0[i,i],i=1..n));
>if md>0 then tau:=0. else tau:=-md+rho fi;
>test:=1;
>while test=1 do test:=0;
>for p from 1 to n do
>md:=H0[p,p]+tau -sum(L[p,i]^2,i=1..p-1);
>if mdelse L[p,p]:=md^(1/2); for pp from p+1 to n do
>L[pp,p]:=(H0[pp,p]-sum(L[pp,i]*L[p,i],i=1..p-1))/L[p,p] od
>fi
>od;
>od;
> y[1]:=-g0[1]/L[1,1];
> for p from 2 to n do
>y[p]:=(-g0[p]-sum(L[p,j]*y[j],j=1..p-1))/L[p,p] od;
> v[n]:=y[n]/L[n,n];
> for p from n-1 by -1 to 1 do
>v[p]:=(y[p]-sum(L[j,p]*v[j],j=p+1..n))/L[p,p] od;
> z0:=evalf(f(seq(x0[i],i=1..n))); t:=tinit;
>x1:=evalm(x0+t*v);
> while f(seq(x1[i],i=1..n))>z0+t*delta*sum(g0[i]*v[i],i=1..n)
> do t:=t*beta; x1:=evalm(x0+t*v);
> od;
> x0:=evalm(x1);
> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);
> od;
> RETURN(evalm(x0))
> end;
> newton_modif(f1,vector([0,0]),10^(-4));
[ ],0.6000000001 -0.2000000002
> newton_modif(f2,vector([1,0]),10^(-4));
Metode de Optimizare – Curs 14
5
[ ],1. 1.000000000
> newton_modif(f2,vector([-1,0]),10^(-4));
[ ],0.9999993870 0.9999987218
> newton_modif(f2,vector([-0.5,0.2]),10^(-4));
[ ],1.000000004 0.9999999981
> newton_modif(f3,vector([0,-1]),10^(-4));
[ ],0.4714045208 10-10 0.1 10-8
> newton_modif(f5,vector([2,3]),10^(-4));
[ ],1.565194829 0.1 10-53
> newton_modif(f4,vector([0.5,3]),10^(-4));
[ ],0.12864143 10-5 -0.1 10-62
> newton_modif(f4,vector([-0.5,0.2]),10^(-4));
[ ],0.2439499 10-7 0.1 10-18
> newton_modif(f6,vector([-1,-1]),10^(-4));
[ ],0.08984236139 -0.7126591488
> newton_modif(f6,vector([-1,1]),10^(-4));
[ ],-0.08984201229 0.7126564041
> newton_modif(f6,vector([1,1]),10^(-4));
[ ],-0.08984236139 0.7126591488
Pentru funcţiile f6 cu punctul iniţial (1, -1)t şi f2 cu punctul iniţial (0, 1)
t prezentăm
mai jos şi reprezentarea grafică (3D şi contour) a iteraţiilor:
> newton_modif(f6,vector([1,-1]),10^(-4));
[ ],0.08984201229 -0.7126564041
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
6
Număr de iteraţii: 6
> newton_modif(f2,vector([0,1]),10^(-4));
[ ],1.000000003 0.9999999948
Număr de iteraţii: 5
Deşi simplu de implementat algoritmul prezentat mai înainte poate
necesita un volum mare de calcul (în situaţia în care se încearcă factorizări
Cholesky pentru multe valori τk). Poate fi avantajos ca τ să crească la fiecare
iteraţie cu un factor mai mare, de exemplu 10 în loc de 2.
Altă strategie de modificare hessianei este de a aplica algoritmul de
factorizare Cholesky şi de a mării elementele diagonale care apar în algoritm.
Acest algoritm Cholesky modificat garantează pe de parte existenţa factorului
Metode de Optimizare – Curs 14
7
Cholesky cu elemente care nu depăşesc în modul norma hessianei, iar pe de altă
parte nu modifică hessiana dacă este „suficient de pozitiv definită”. Începem
descrierea acestei strategii prin recapitularea aşa numitei descompuneri LDLt a
unei matrice simetrice A cu minorii principali nenuli. O scriere a matricei A sub
forma A = LDLt, unde L este o matrice inferior triunghiulară cu elementele de pe
diagonala principală egale cu 1, şi D o matrice diagonală se numeşte factorizare
LDLt. Ţinând cont de relaţiile:
aij = ∑=
j
1kjkkkik LDL = ∑
−
=
1j
1kjkkkik LDL + LijDjj pentru i ≥ j =1,2,…,n.
obţinem următorul algoritm pentru calculul factorizării LDLt a unei matrice A
pentru j=1,2,...,n execută
Djj := ajj - ∑−
=
1j
1kkk
2jk DL
pentru i = j+1, j+2,...,n execută
Lij : = jjD
1(aij - ∑
−
=
1j
1kjkkkik LDL )
Algoritmul funcţionează pentru matrice simetrice cu minorii principali nenuli, în
particular pentru matrice A pozitiv definite. Legătura între factorul Cholesky M al
matricei A (A= MMt cu M =(mij)i,j o matrice inferior triunghiulară cu elementele
de pe diagonala principală pozitive) şi factorizare A = LDLt este
mij = Lij jjD pentru orice i,j.
Algoritmul de factorizare Cholelesky modificat aplicat unei matrice A presupune
date două valori ε > 0 şi η >0. Se calculează A + E = LDLt = MMt astfel încât
Djj ≥ ε şi |mij| ≤ η pentru orice i şi j.
Algoritm Cholesky modificat pentru calculul factorizării A + E = LDLt = MMt
pentru j=1,2,...,n execută
Cjj : = ajj - ∑−
=
1j
1kkk
2jk DL ; θj := max{cij, j
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
8
pentru i = j+1, j+2,...,n execută
Cij : = (aij - ∑−
=
1j
1kjkkkik LDL ); Lij : =
jjD
1Cjj;
Să verificăm că într-adevăr |mij| ≤ η pentru orice i şi j:
|mij| = |Lij| jjD =ij
jj
C
D ≤
ij
j
C η
θ ≤ η.
Pentru a reduce modificările asupra lui A se pot face permutări simetrice de linii şi
coloane (algoritmul Cholesky modificat datorat lui Gill, Murray şi Wright)
obţinându-se factorizarea PAPt + E = LDLt = MMt, unde P este matricea de
permutare.
VII.3.6. Metoda direcţiilor conjugate. Metoda gradientului
conjugat
Fie C ∈Mn,n(R) o matrice pozitiv definită. Matricea C induce un produs
scalar pe Rn, notat C :
C : = , x, y ∈ Rn.
Doi vectori x, y ∈Rn se numesc conjugaţi în raport cu C (sau C – ortogonali)
dacă = 0 (sau echivalent, C = 0).
Dacă vectorii v1, v2, ..., vk sunt nenuli conjugaţi în raport cu C doi câte doi,
atunci v1, v2, ..., vk sunt liniar independenţi (deoarece conjugarea în raport cu C
înseamnă ortogonalitate în raport cu produsul scalar C şi într-un spaţiu pre-
Hilbert orice familie de vectori nenuli ortogonali doi câte doi este liniar
independentă). În particular, dacă k = n, vectorii v1, v2, ..., vn constituie o bază în
Rn.
Lema 34. Fie f:Rn→R o funcţie definită prin f(x) = 1
2 + cu
C∈Mn,n(R) o matrice pozitiv definită şi d∈Rn un vector fixat, şi fie v0, v1, ..., vn-1
o familie de vectori nenuli conjugaţi în raport cu C doi câte doi. Atunci există şi
este unic un punct de minim global x* al lui f şi
Metode de Optimizare – Curs 14
9
x* = in 1 i
i ii 0
d, vv
Cv , v
−
=
< >− ∑ < >
.
Demonstraţie. Avem ∇f(x) = Cx + d şi Hf(x) = C pentru orice x ∈ Rn.
Deoarece C este pozitiv definită rezultă că f este convexă, deci un punct x* este
punct de minim dacă şi numai dacă x* este punct staţionar. Avem
∇f(x*) = 0 x* = -C-1d,
şi ca urmare x* = -C-1d este unicul punct de minim al lui f. Deoarece v0, v1, ..., vn-1
sunt vectori nenuli conjugaţi în raport cu C doi câte doi, ei constituie o bază în Rn.
În consecinţă, există scalarii α0, α1, ..., αn-1∈R astfel încât
-C-1d = n 1 i
ii 0
v−
=α∑
C = n 1 i j
i Ci 0
v , v−
=α < >∑
-C = αj C
- = αj
αj = j
j j
d, v
Cv , v
< >−
< >.
Aşadar x* = -C-1d = in 1 i
i ii 0
d, vv
Cv , v
−
=
< >− ∑ < >
■
Lema 35. Fie f:Rn→R o funcţie definită prin f(x) = 1
2 + cu
C∈Mn,n(R) o matrice pozitiv definită şi d∈Rn un vector fixat. Dacă vk∈Rn este un
vector nenul, atunci soluţia optimă a problemei t 0inf
≥f(xk + tvk) este
tk = ( )k k
k k
f x , v
Cv , v
< ∇ >−
< >
Demonstraţie. Pentru orice t avem
f(xk+tvk) = 1
2 t2 + t( + )
1
2 +
+1
2 +
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
10
de unde rezultă că tk =k k
k k
Cx d, v
Cv , v
< + >−
< >=
( )k kk k
f x , v
Cv , v
< ∇ >−
< >.
■
Propoziţie 36. Fie f:Rn→R o funcţie definită prin f(x) = 1
2 +
cu C∈Mn,n(R) o matrice pozitiv definită şi d∈Rn un vector fixat, şi fie v0,
v1, ..., vn-1 o familie de vectori nenuli conjugaţi în raport cu C doi câte doi. Se
construieşte şirul (xk)k:
xk+1 = xk + tkvk, x0 dat, 0≤ k ≤n-1
unde tk este pasul optimal asociat direcţiei vk, adică tk este soluţia optimă a
problemei t 0inf
≥f(xk + tvk). Atunci xn = x* unicul punct de minim al lui f.
Demonstraţie. Deoarece v0, v1, ..., vn-1 sunt vectori nenuli conjugaţi în
raport cu C doi câte doi, ei constituie o bază în Rn. În consecinţă, există scalarii α0,
α1, ..., αn-1∈R astfel încât
x0 = n 1 i
ii 0
v−
=α∑
C = n 1 i j
i Ci 0
v , v−
=α < >∑
C = αj C
= αj
αj = 0 j
j j
Cx , v
Cv , v
< >
< >.
Aşadar
x0 = 0 in 1 ii i
i 0
Cx , vv
Cv , v
−
=
< >∑
< > (36.1)
Adunând relaţiile xi+1 = xi + tivi pentru i =0..k-1, obţinem
xk = x0 + k 1 i
ii 0
t v−
=∑ . (36.2)
C = x0 +
k 1 i ki C
i 0t v , v
−
=< >∑
= (36.3)
Metode de Optimizare – Curs 14
11
Deci
= = +
( )
=36.3
+ (36.4)
Din lema 35 rezultă că tk = ( )k k
k k
f x , v
Cv , v
< ∇ >−
< > ( )
=36.4
0 k k
k k k k
Cx , v d, v
Cv , v Cv , v
< > < >− −
< > < >
pentru orice k, şi înlocuind în (36.2) k cu n şi fiecare ti, obţinem:
xn = x0 + ( )k kn 1 k
k kk 0
f x , vv
Cv , v
−
=
< ∇ > −∑ < >
= x0 + 0 i in 1 ii i i ii 0
Cx , v d, vv
Cv , v Cv , v
−
=
< > < >− − ∑ < > < >
= x0 + 0 in 1 ii i
i 0
Cx , vv
Cv , v
−
=
< >− ∑
< >+
in 1 ii ii 0
d, vv
Cv , v
−
=
< >− ∑ < >
( )
=36.1
x0 – x0 + in 1 i
i ii 0
d, vv
Cv , v
−
=
< >− ∑ < >
(36.5)
Conform lemei 34, f are unic punct de minim
x* = in 1 i
i ii 0
d, vv
Cv , v
−
=
< >− ∑ < >
,
şi în consecinţă ţinând cont şi de (36.5), rezultă xn =x*.
■
Lema 37. Fie f:Rn→R o funcţie definită prin f(x) = 1
2 + cu
C∈Mn,n(R) o matrice pozitiv definită şi d∈Rn un vector fixat, şi fie v0, v1, ..., vm-1
(m un număr natural) o familie de vectori conjugaţi în raport cu C doi câte doi. Se
construieşte şirul (xk)k:
xk+1 = xk + tkvk, x0 dat, 0≤ k ≤m
unde tk este pasul optimal asociat direcţiei vk, adică tk este soluţia optimă a
problemei t 0inf
≥f(xk + tvk). Atunci = 0 pentru orice i ∈ {0, 1, …, k}.
Demonstraţie. Vom face demonstraţia inductiv după k. Pentru k =0 avem
= = +
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
12
= + t0 + ,
şi ţinând cont că t0 = ( )0 0
0 0
f x , v
Cv , v
< ∇ >−
< >=
0 0 0
0 0 0 0
Cx , v d, v
Cv , v Cv , v
< > < >− −
< > < > (conform,
lemei 35) rezultă că = 0. Presupunem afirmaţia adevărată pentru k şi
o demonstrăm pentru k+1. Pentru i = k avem
= = +
= + tk + ,
iar din lema 35, tk = ( )k k
k k
f x , v
Cv , v
< ∇ >−
< >=
k k k
k k k k
Cx , v d, v
Cv , v Cv , v
< > < >− −
< > < > . Aşadar
= 0. Pentru i ∈ {0, 1, …, k-1}, conform ipotezei de inducţie
= 0, şi ca urmare
= =
= + tk = tkC = 0.
■
Propoziţie 38. Fie f:Rn→R o funcţie definită prin f(x) = 1
2 +
cu C∈Mn,n(R) o matrice pozitiv definită şi d∈Rn un vector fixat, şi fie v0,
v1, ..., vn-1 o familie de vectori nenuli conjugaţi în raport cu C doi câte doi. Se
construieşte şirul (xk)k:
xk+1 = xk + tkvk, x0 dat, 0≤ k ≤n-1
unde tk este pasul optimal asociat direcţiei vk, adică tk este soluţia optimă a
problemei t 0inf
≥f(xk + tvk). Atunci xk+1 este soluţie optimă a problemei
x Ak
inf∈
f(x),
unde Ak = x0 + Sp{v0, v1, …, vk} = x0 +
n 1 ii i
i 0v ,
−
=
λ λ ∈∑
R .
Demonstraţie. Adunând relaţiile xi+1 = xi + tivi pentru i =0..k, obţinem
xk+1 = x0 + k i
ii 0
t v=∑ .
Fie x ∈Ak. Atunci există λ0, λ1, ..., λn-1∈R astfel încât x = x0 +
n 1 ii
i 0v
−
=λ∑ . Avem
= ( ) ( )kk 1 i
i ii 0
f x , t v+
=< ∇ λ − >∑
Metode de Optimizare – Curs 14
13
= ( ) ( )k k 1 i
i ii 0
t f x , v+
=λ − < ∇ >∑
= 0
conform lemei 37. Deci pentru orice x∈Ak avem
f(x) – f(xk+1) ≥ = 0,
şi ca urmare xk+1 este punct de minim pentru f pe Ak.
■
În cazul metodei gradientului conjugat vectorii C- conjugaţi v0, v1, ..., vn-1
se construiesc prin ortogonalizarea relativ la produsul scalar C a sistemului de
vectori –∇f(x0), -∇f(x1), ..., ∇f(xn-1) folosind procedeul Gram-Schmidt. Astfel
v0 = -∇f(x0)
vk = -∇f(xk) + k 1 i
kii 0
v−
=λ∑
unde λki (i=0..k-1) se determină astfel încât pentru orice k şi orice j ≤ k-1,
= 0. Astfel
λki = ( )i k C
i iC
v , f x
v , v
< ∇ >
< >=
( )i ki i
Cv , f x
Cv , v
< ∇ >
< >
Conform lemei 37, pentru orice k ≥ 1 avem
= - = 0
şi pentru orice i ≥1 şi k≥ i+1
= < - vi +i 1 j
i 1, jj 0
v−
−=
λ∑ , ∇f(xk)> = 0.
Pe de altă parte
∇f(xi+1) = Cxi+1 + d = Cxi + tiCvi + d = ∇f(xi) + tiCv
i
şi ca urmare pentru orice i ∈{0, 1, …, k-2}
0 = = + ti = ti.
Aşadar = 0 şi deci λki =0 pentru orice i ∈{0, 1, …, k-2}. Deci
vk = -∇f(xk) + k 1 i
kii 0
v−
=λ∑ = -∇f(xk) + λkk-1v
k-1
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
14
= -∇f(xk) + ( )k 1 k
k 1 k 1
Cv , f x
Cv , v
−
− −
< ∇ >
< >vk-1.
Deci vk+1 = -∇f(xk+1) + βkvk, unde
βk = ( )k k 1
k k
Cv , f x
Cv , v
+< ∇ >
< >
Cum din lema 35 tk = ( )k k
k k
f x , v
Cv , v
< ∇ >−
< > şi
∇f(xk+1) = Cxk+1 + d = Cxk + tkCvk + d = ∇f(xk) + tkCv
k
=∇f(xk) ( )k k
k k
f x , v
Cv , v
< ∇ >−
< > Cvk
rezultă că Cvk = ( )
k k
k k
Cv , v
f x , v
< >
< ∇ >(∇f(xk) - ∇f(xk+1)). În consecinţă
βk = ( ) ( ) ( )
( )
k k 1 k 1
k k
f x f x , f x
f x , v
+ +< ∇ − ∇ ∇ >
< ∇ >
şi ţinând cont că vk = -∇f(xk) + βk-1vk-1, de unde = -
(conform lemei 37, = 0), rezultă
βk = ( ) ( ) ( )
( ) ( )
k 1 k k 1
k k
f x f x , f x
f x , f x
+ +< ∇ − ∇ ∇ >
< ∇ ∇ >
Deoarece = 0, βk poate fi exprimat echivalent:
βk = ( ) ( )
( ) ( )
k 1 k 1
k k
f x , f x
f x , f x
+ +< ∇ ∇ >
< ∇ ∇ >.
În virtutea condiţiei de C-ortogonalitate, în cazul funcţiilor pătratice, metoda
gradientului conjugat converge într-un număr finit de paşi k ≤ n (conform
propoziţiei 36). Deoarece formulele de calcul pentru βk nu depind explicit de
matricea C, metoda poate fi aplicată unor funcţii mai generale. Dacă funcţia f nu
este pătratică atunci cele două formule de calcul ale lui βk nu sunt echivalente.
În cazul în care
Metode de Optimizare – Curs 14
15
βk = ( ) ( )
( ) ( )
k 1 k 1
k k
f x , f x
f x , f x
+ +< ∇ ∇ >
< ∇ ∇ >.
se obţine algoritmul Fletcher-Reeves, iar în cazul în care
βk = ( ) ( ) ( )
( ) ( )
k 1 k k 1
k k
f x f x , f x
f x , f x
+ +< ∇ − ∇ ∇ >
< ∇ ∇ >
se obţine algoritmul Polak-Ribiere. Schiţăm mai jos cei doi algoritmi.
Algoritmul Fletcher-Reeves (se presupune x0 dat)
k: = 0;
v0:=∇f(x0);
cât timp ||∇f(xk)|| ≠0 execută
pasul 1: *se determină pasul de deplasare tk (optimal sau suboptimal)
asociat direcţiei de deplasare vk;
pasul 2: xk+1 = xk + tkvk ;
pasul 3: βk : = ( ) ( )
( ) ( )
k 1 k 1
k k
f x , f x
f x , f x
+ +< ∇ ∇ >
< ∇ ∇ >; vk+1:=-∇f(xk+1) + βkv
k.
k: = k+1;
Algoritmul Polak-Ribiere (se presupune x0 dat)
k: = 0;
v0:=∇f(x0);
cât timp ||∇f(xk)|| ≠0 execută
pasul 1: *se determină pasul de deplasare tk (optimal sau suboptimal)
asociat direcţiei de deplasare vk;
pasul 2: xk+1 = xk + tkvk ;
pasul 3: βk : = ( ) ( ) ( )
( ) ( )
k 1 k k 1
k k
f x f x , f x
f x , f x
+ +< ∇ − ∇ ∇ >
< ∇ ∇ >;
vk+1:=-∇f(xk+1) + βkvk.
k: = k+1;
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
16
Prezentăm în continuare implementarea în MAPLE a celor doi algoritmi de mai
sus. Procedurile au drept parametri funcţia obiectiv f, punctul iniţial, notat x00, şi
precizia ε (criteriul de oprire este ||∇f(xk)|| < ε). Procedurile folosesc comenzi din
pachetul linalg. Funcţionare procedurilor va fi exemplificată pentru funcţiile:
> f1:=(x,y)->3*x^2+2*y^2-2*x*y-4*x+2*y-3;
:= f1 → ( ),x y + − − + − 3 x2 2 y2 2 x y 4 x 2 y 3
> f2:=(x,y)->10*(y-x^2)^2+(x-1)^2;
:= f2 → ( ),x y + 10 ( ) − y x22
( ) − x 1 2 > f4:=(x,y)->1/(x-1)^4/4+(y^2-x);
:= f4 → ( ),x y + − 14
1
( ) − x 1 4y2 x
> f6:=(x,y)->x^2*(4-2.1*x^2+x^4/3)+x*y+y^2*(-4+4*y^2);
:= f6 → ( ),x y + + x2
− + 4 2.1 x
2 13
x4 x y y2 ( )− + 4 4 y2
Pentru funcţiile f6 cu punctul iniţial (1, -1)t şi f2 cu punctul iniţial (0, 1)
t vom
prezenta şi reprezentarea grafică (3D şi contour) a iteraţiilor (cele două funcţii nu
sunt funcţii convexe!).
Implementarea algoritmului Fletcher-Reeves (pasul optimal de deplasare este
obţinut prin metoda secţiunii de aur) :
> FletcherReeves:=proc(f,x00,epsilon)
> local x0,i,n,g,g0,v,beta,t1,t2,t,
y1,y2,alpha,alpha1,a,b,L,u,w,nmax,j,phi;
> n:=vectdim(x00); x0:=vector(n);v:=vector(n);
>g:=grad(f(seq(x[i],i=1..n)),[seq(x[i],i=1..n)]);
> x0:=map(evalf,x00);
> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);
>v:=evalm(-g0);
> while norm(g0,2)>=epsilon do
>phi:=t->f(seq(x0[i]+t*v[i],i=1..n));
> t1:=0.; t2:=1.; y1:=phi(t1); y2:=phi(t2);
> if y1 while y1>y2 do y1:=y2;t1:=t2;t2:=t2+1;y2:=phi(t2) od;
> a:=t1-1; b:=t2 fi;
> alpha:=evalf((5^(1/2)-1)/2);alpha1:=1-alpha;
Metode de Optimizare – Curs 14
17
> L:=b-a;u:=a+alpha1*L;w:=a+alpha*L;y1:=phi(u);
>y2:=phi(w);nmax:=ceil(ln(epsilon/(10*L))/ln(alpha));j:=0;
> while j if y1 y2:=y1;w:=u;u:=a+alpha1*L;y1:=phi(u)
> else a:=u;L:=b-a;
> y1:=y2;u:=w;w:=a+alpha*L;y2:=phi(w);
> fi;
>j:=j+1
> od;
> t:=(a+b)/2;beta:=sum(g0[i]*g0[i],i=1..n);
> x0:=evalm(x0+t*v);
> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);
>beta:=sum(g0[i]*g0[i],i=1..n)/beta;v:=evalm(-g0+beta*v);
> od;
> RETURN(evalm(x0))
> end;
> FletcherReeves(f1,vector([0,0]),10^(-4));
[ ],0.6000128098 -0.2000001602
> FletcherReeves(f2,vector([1,0]),10^(-4));
[ ],0.9999779929 0.9999537039
> FletcherReeves(f2,vector([-1,0]),10^(-4));
[ ],0.9999957029 0.9999902214
> FletcherReeves(f2,vector([-0.5,0.2]),10^(-4));
[ ],0.9999864790 0.9999713199
> FletcherReeves(f3,vector([0,-1]),10^(-4));
[ ],0.28487 10-5 -0.0000111958
> FletcherReeves(f4,vector([0.5,3]),10^(-4));
[ ],0.29674978 10-6 0.00003805865244
> FletcherReeves(f4,vector([-0.5,0.2]),10^(-4));
[ ],-0.633170353 10-5 -0.61905436 10-5
> FletcherReeves(f6,vector([-1,-1]),10^(-4));
[ ],-0.08984210733 0.7126526153
> FletcherReeves(f6,vector([-1,1]),10^(-4));
[ ],1.703604624 -0.7960833832
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
18
> FletcherReeves(f6,vector([1,1]),10^(-4));
[ ],0.08984210733 -0.7126526153
> FletcherReeves(f2,vector([0,1]),10^(-4));
[ ],0.9999789174 0.9999564617
17 iteraţii
> FletcherReeves(f6,vector([1,-1]),10^(-4));
[ ],-1.703604624 0.7960833832
1241 iteraţii
Implementarea algoritmului Polak-Ribiere (pasul optimal de deplasare este
obţinut prin metoda secţiunii de aur) :
> PolakRibiere:=proc(f,x00,epsilon)
> local x0,i,n,g,g0,g1,v,beta,t1,t2,t,y1,y2,
>alpha,alpha1,a,b,L,u,w,nmax,j,phi;
Metode de Optimizare – Curs 14
19
> n:=vectdim(x00); x0:=vector(n);v:=vector(n);
>g:=grad(f(seq(x[i],i=1..n)),[seq(x[i],i=1..n)]);
> x0:=map(evalf,x00);
> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);
>v:=evalm(-g0);
> while norm(g0,2)>=epsilon do
>phi:=t->f(seq(x0[i]+t*v[i],i=1..n));
> t1:=0.; t2:=1.; y1:=phi(t1); y2:=phi(t2);
> if y1 while y1>y2 do y1:=y2;t1:=t2;t2:=t2+1;y2:=phi(t2) od;
> a:=t1-1; b:=t2 fi;
> alpha:=evalf((5^(1/2)-1)/2);alpha1:=1-alpha;
> L:=b-a;u:=a+alpha1*L;w:=a+alpha*L;y1:=phi(u);y2:=phi(w);
>nmax:=ceil(ln(epsilon/(10*L))/ln(alpha));j:=0;
> while j if y1 y2:=y1;w:=u;u:=a+alpha1*L;y1:=phi(u)
> else a:=u;L:=b-a;
> y1:=y2;u:=w;w:=a+alpha*L;y2:=phi(w);
> fi;
>j:=j+1
> od;
> t:=(a+b)/2;
> x0:=evalm(x0+t*v);
> g1:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);
>beta:=sum((g1[i]-g0[i])*g1[i],i=1..n)/sum(g0[i]*g0[i],i=1..n);
>g0:=evalm(g1);v:=evalm(-g0+beta*v);
> od;
> RETURN(evalm(x0))
> end;
> PolakRibiere(f1,vector([0,0]),10^(-4));
[ ],0.6000173636 -0.1999812728
> PolakRibiere(f2,vector([1,0]),10^(-4));
[ ],0.9999999306 0.9999998742
> PolakRibiere(f2,vector([-1,0]),10^(-4));
[ ],0.9999998969 0.9999997969
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
20
> PolakRibiere(f2,vector([-0.5,0.2]),10^(-4));
[ ],1.000002020 1.000004631
> PolakRibiere(f3,vector([0,-1]),10^(-4));
[ ],-0.916052101 10-6 -0.366547736 10-5
> PolakRibiere(f4,vector([0.5,3]),10^(-4));
[ ],-0.1120502499 10-5 -0.00001018277
> PolakRibiere(f4,vector([-0.5,0.2]),10^(-4));
[ ],0.832527387 10-5 0.00001060187505
> PolakRibiere(f6,vector([-1,-1]),10^(-4));
[ ],-0.08984347334 0.7126526183
> PolakRibiere(f6,vector([-1,1]),10^(-4));
[ ],-1.703605085 0.7960854846
> PolakRibiere(f6,vector([1,1]),10^(-4));
[ ],0.08984347334 -0.7126526183 > PolakRibiere(f2,vector([0,1]),10^(-4));
[ ],0.9999999059 0.9999997978
9 iteraţii
> PolakRibiere(f6,vector([1,-1]),10^(-4));
[ ],1.703605085 -0.7960854846
Metode de Optimizare – Curs 14
21
14 iteraţii
Pentru a limita acumularea erorilor datorate impreciziei calculului paşilor
tk, se recomandă reiniţializarea direcţiei vk sub forma vk = -∇f(xk) după fiecare m
iteraţii, m≥n. Se obţin astfel metodele de gradient conjugat cu reiniţializare
(restart), caracterizate prin calcularea la pasul 3
kβ =
şi alegerea direcţiei de deplasare vk+1:=-∇f(xk+1) + kβ vk.
Prezentăm în continuare implementarea în MAPLE ale algoritmilor
Flecher-Revees şi Polak-Ribiere cu reiniţializare (restart) după fiecare n iteraţii (n
este numărul de variabile de care depinde funcţia obiectiv). Vom opta pentru
alegerea suboptimală a pasului. Procedurile au drept parametri funcţia obiectiv f,
punctul iniţial, notat x00, şi precizia ε (criteriul de oprire este ||∇f(xk)|| < ε).
Procedurile folosesc comenzi din pachetul linalg. Funcţionare procedurilor va fi
exemplificată pentru aceleaşi funcţii ca procedurile fără restart (FlecherReeves,
PolakRibiere)
Implementarea algoritmului Fletcher-Reeves cu restart (pasul suboptimal de
deplasare este generat prin algoritmul backtracking-Armijo) :
> FletcherReeves_r:=proc(f,x00,epsilon)
> local x1,x0,i,n,g,g0,v,beta,z0,tinit,beta_pas,delta,t, k;
0, dacă k 1
m
+ întreg
βk, în caz contrar
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
22
> n:=vectdim(x00); x0:=vector(n);x1:=vector(n);v:=vector(n);
>g:=grad(f(seq(x[i],i=1..n)),[seq(x[i],i=1..n)]);
>beta_pas:=0.5;delta:=0.1;tinit:=1.;
> x0:=map(evalf,x00);k:=0;
> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);
>v:=evalm(-g0);
> while norm(g0,2)>=epsilon do
> z0:=evalf(f(seq(x0[i],i=1..n))); t:=tinit;x1:=evalm(x0+t*v);
> while f(seq(x1[i],i=1..n))>z0+t*delta*sum(g0[i]*v[i],i=1..n)
> do t:=t*beta_pas; x1:=evalm(x0+t*v);
> od;
> beta:=sum(g0[i]*g0[i],i=1..n);
> x0:=evalm(x1);k:=k+1;
> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);
>if irem(k+1,n)=0 then beta:=0 else
>beta:=sum(g0[i]*g0[i],i=1..n)/beta fi;v:=evalm(-g0+beta*v);
> od;
> RETURN(evalm(x0))
> end;
> FletcherReeves_r(f1,vector([0,0]),10^(-4));
[ ],0.6000057569 -0.2000119450
> FletcherReeves_r(f2,vector([1,0]),10^(-4));
[ ],0.9999311774 0.9998613155
> FletcherReeves_r(f2,vector([-1,0]),10^(-4));
[ ],0.9999269533 0.9998499381
> FletcherReeves_r(f2,vector([-0.5,0.2]),10^(-4));
[ ],1.000036412 1.000076377
> FletcherReeves_r(f3,vector([0,-1]),10^(-4));
[ ],-0.876325710 10-6 -0.00001133598715
> FletcherReeves_r(f4,vector([0.5,3]),10^(-4));
[ ],0.44320465 10-5 0.00001173252907
> FletcherReeves_r(f4,vector([-0.5,0.2]),10^(-4));
[ ],0.73348991 10-5 0.
> FletcherReeves_r(f6,vector([-1,-1]),10^(-4));
[ ],-0.08984022516 0.7126573686
Metode de Optimizare – Curs 14
23
> FletcherReeves_r(f6,vector([-1,1]),10^(-4));
[ ],-0.08984151229 0.7126566759
> FletcherReeves_r(f6,vector([1,1]),10^(-4));
[ ],0.08984022516 -0.7126573686
> FletcherReeves_r(f2,vector([0,1]),10^(-4));
[ ],0.9999125593 0.9998228383
115 iteraţii
> FletcherReeves_r(f6,vector([1,-1]),10^(-4));
[ ],0.08984151229 -0.7126566759
14 iteraţii
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
24
Implementarea algoritmului Polak-Ribiere cu restart(pasul suboptimal de
deplasare este generat prin algoritmul backtracking-Armijo) :
> PolakRibiere_r:=proc(f,x00,epsilon)
> local x0,x1,i,n,g,g0,g1,v,beta,z0,tinit,beta_pas,delta,t,k;
> n:=vectdim(x00); x0:=vector(n);x1:=vector(n);v:=vector(n);
>g:=grad(f(seq(x[i],i=1..n)),[seq(x[i],i=1..n)]);
>beta_pas:=0.5;delta:=0.1;tinit:=1.;
> x0:=map(evalf,x00);k:=0;;
> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);
>v:=evalm(-g0);
> while norm(g0,2)>=epsilon do
> z0:=evalf(f(seq(x0[i],i=1..n))); t:=tinit;x1:=evalm(x0+t*v);
> while f(seq(x1[i],i=1..n))>z0+t*delta*sum(g0[i]*v[i],i=1..n)
> do t:=t*beta_pas; x1:=evalm(x0+t*v);
> od;
> x0:=evalm(x1);
> g1:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);
>k:=k+1;
>if irem(k+1,n)=0 then
>beta:=sum((g1[i]-g0[i])*g1[i],i=1..n)/sum(g0[i]*g0[i],i=1..n)
else beta:=0 fi;
>g0:=evalm(g1);v:=evalm(-g0+beta*v);
> od;
> RETURN(evalm(x0))
> end;
> PolakRibiere_r(f1,vector([0,0]),10^(-4));
[ ],0.5999894627 -0.1999927775
> PolakRibiere_r(f2,vector([1,0]),10^(-4));
[ ],0.9999408998 0.9998813146
> PolakRibiere_r(f2,vector([-1,0]),10^(-4));
[ ],0.9999400952 0.9998796744
> PolakRibiere_r(f2,vector([-0.5,0.2]),10^(-4));
[ ],0.9999424538 0.9998810721
> PolakRibiere_r(f3,vector([0,-1]),10^(-4));
Metode de Optimizare – Curs 14
25
[ ],-0.274299758 10-5 0.00002535024096
> PolakRibiere_r(f4,vector([0.5,3]),10^(-4));
[ ],-0.00001126654842 -0.3144577122 10-7
> PolakRibiere_r(f4,vector([-0.5,0.2]),10^(-4));
[ ],0.00001096961757 -0.1101010205 10-9
> PolakRibiere_r(f6,vector([-1,-1]),10^(-4));
[ ],-0.08984470254 0.7126608923
> PolakRibiere_r(f6,vector([-1,1]),10^(-4));
[ ],0.08984030100 -0.7126516985
> PolakRibiere_r(f6,vector([1,1]),10^(-4));
[ ],0.08984470254 -0.7126608923
> PolakRibiere_r(f2,vector([0,1]),10^(-4));
[ ],0.9999315557 0.9998621322
445 iteraţii
> PolakRibiere_r(f6,vector([1,-1]),10^(-4));
[ ],-0.08984030100 0.7126516985
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
26
14 iteraţii
VII.3.7. Metode cvasi-Newton (Metode de metrică variabilă)
În cazul metodelor cvasi-Newton (metode de metrică variabilă) direcţia
de deplasare se alege sub forma
vk= - Hk∇f(xk)
unde Hk este o matrice pozitiv definită reprezentând o aproximare a inversei
hessianei Hf(xk). În cele ce urmează notăm
sk = xk+1 – xk şi yk = ∇f(xk+1) - ∇f(xk) , k ≥ 0.
În cazul unei funcţii pătratice strict convexe f:Rn→R, adică a unei funcţii
de forma f(x) = 1
2 + cu C∈Mn,n(R) o matrice pozitiv definită şi
d∈Rn un vector fixat, avem ∇f(x) = Cx + d şi Hf(x) = C pentru orice x ∈ Rn. Ca
urmare:
yk = ∇f(xk+1) - ∇f(xk) = C(xk+1 - xk) = Csk, k ≥ 0
sk = C-1yk, k≥0
iar C = Hf(xj) pentru orice j. Plecând de la această observaţie se vor căuta Hk,
aproximaţii a inverselor matricelor Hf(xk), care să îndeplinească următoarele
condiţii:
Metode de Optimizare – Curs 14
27
1. si = Hk+1yi pentru orice i, 0≤i≤k (condiţia sk = Hk+1y
k se numeşte
condiţia secantei, iar implicaţia „si = Skyi pentru orice i, 0≤i≤k-1 => si
= Sk+1yi pentru orice i, 0≤i≤k-1” se numeşte proprietatea de ereditate)
2. Hk pozitiv definită
Matricele Hk vor fi determinate recursiv:
Hk+1 = Hk + Dk, k ≥0.
Algoritmul generic asociat metodelor cvasi-Newton aplicat funcţiilor
pătratice este schiţat mai jos (se presupune x0 dat şi H0 dat, de exemplu H0 = In )
k: = 0;
cât timp ||∇f(xk)|| ≠0 execută
pasul 1: vk = - Hk∇f(xk)
pasul 2: *se determină pasul de deplasare tk (optimal) asociat direcţiei
de deplasare vk;
pasul 3: xk+1 = xk + tkvk ;
pasul 4: *se alege Dk astfel încât Hk+1 = Hk + Dk să fie pozitiv definită
şi în plus, să fie îndeplinite condiţia secantei ( Hk+1yk = sk) şi
proprietatea de ereditate (Hk+1yi = si pentru orice i , 0≤i≤k-1);
k: = k+1;
Lema 39. Fie f:Rn→R o funcţie definită prin f(x) = 1
2 + , cu
C∈Mn,n(R) o matrice pozitiv definită şi d∈Rn un vector fixat, şi fie x0∈Rn. Fie k
un număr natural şi fie (xj)j şirul definit prin xj+1 = xj – tjHj∇f(x
j), 0≤ j≤ k unde
- Pentru orice 0≤j≤k, matricele Hj sunt pozitiv definite şi îndeplinesc
condiţia si = Hjyi pentru orice i, 0≤i≤j-1 cu si = xi+1 – xi şi yi = ∇f(xi+1) -
∇f(xi)
- tj este pasul optimal asociat direcţiei vj = - Hj∇f(x
j).
Atunci vectorii s0, s1, ..., sk sunt conjugaţi în raport cu C doi câte doi.
Demonstraţie. Observăm că pentru orice k ≥0
sk = xk+1 – xk = tkvk = -tkHk∇f(x
k)
iar din faptul că ∇f(x) = Cx+d deducem că
yk = ∇f(xk+1) - ∇f(xk) = Csk = tkCvk = -tkCHk∇f(x
k).
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
28
Vom face demonstraţia prin inducţie după k. Pentru k = 1, obţinem
= -t0 = -t0 = -t0
= -t0 = = +
= + t0 + ,
şi ţinând cont că t0 = ( )0 0
0 0
f x , v
Cv , v
< ∇ >−
< >=
0 0 0
0 0 0 0
Cx , v d, v
Cv , v Cv , v
< > < >− −
< > < > (conform,
lemei 35) rezultă că = 0.
Presupunem afirmaţia adevărată pentru k şi o demonstrăm pentru k+1.
Avem
= -tk+1 = -tk+1 =
= -tk+1 = -tk+1 (39. 1)
Din ipoteza de inducţie rezultă că s0, s1, ..., sk sunt conjugaţi în raport cu C doi
câte doi, şi aplicând lema 37 rezultă că = 0 pentru orice i∈{0,1,
...,k}. Mai departe din (39.1) obţinem
= -tk+1 = 0.
În consecinţă, s0, s1, ..., sk+1 sunt conjugaţi în raport cu C doi câte doi.
■
În condiţiile lemei 39 dacă la un moment dat sk = 0 (k < n) atunci de fapt
vk = 0 sau echivalent ∇f(xk) = 0. Aşadar xk este punctul de minim al lui f (fiind
punct staţionar al funcţiei convexe f). Dacă s0, s1, ..., sn-1 sunt toţi nenuli, atunci
fiind conjugaţi în raport cu C doi câte doi, rezultă că s0, s1, ..., sn-1 sunt liniar
independenţi. Atunci ţinând cont de faptul că si = Hnyi şi că yi = Csi, de unde si
=HnCsi pentru orice i=0..n-1, rezultă că Hn = C
-1. Deci vn = -Hn∇f(xn) = -C-1∇f(xn).
Atunci pasul optimal tn asociat direcţiei (Newton) vn = -C-1∇f(xn) este tn = 1. Ca
urmare
xn+1 = xn - tnHn∇f(xn) = xn-C-1(Cxn+d) = -C-1d,
Aşadar xn+1 este punctul de minim al lui f (fiind punct staţionar al funcţiei
convexe f). Deci minimul lui f este determinat în urma a cel mult n+1 iteraţii.
Aşa cum precizat matricele Hk se determină recursiv:
Hk+1 = Hk + Dk, k ≥0.
Metode de Optimizare – Curs 14
29
Prezentăm în continuare trei metode de alegere a matricei Dk. Formula de corecţie
de ordinul I presupune utilizarea pe post de Dk a unei matrice de rang 1. Mai
precis, căutăm Dk de forma Dk = akzk ( )
tkz , unde ak ∈R, ak≠0 şi zk ∈Rn.
Determinăm ak şi zk astfel încât să fie îndeplinită condiţia secantei. Din condiţia
secantei rezultă
(Hk + Dk)yk = sk
Hkyk + ak z
k ( )tkz yk = sk
Înmulţind la stânga cu ( )tky , obţinem
( )tky Hky
k + ak ( )tky zk ( )
tkz yk = ( )tky sk
+ ak ()2 =
ak =
( )
k k kk
2k k
y ,s H y
y , z
< − >
< >
Revenind la condiţia secantei Hkyk + ak z
k ( )tkz yk = sk, obţinem
zk = k
1
a k k1
z , y< >(sk - Hky
k)
de unde,
Dk = akzk ( )
tkz = ak 2k
1
a ( )2k k
1
z , y< >(sk - Hky
k) (sk - Hkyk)t
= k
1
a ( )2k k
1
z , y< >(sk - Hky
k) (sk - Hkyk)t
= ( )
2k k
k k kk
y , z
y ,s H y
< >
< − > ( )2k k
1
z , y< >(sk - Hky
k) (sk - Hkyk)t
= ( ) ( )
tk k k kk k
k k kk
s H y s H y
y ,s H y
− −
< − >
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
30
Arătăm prin inducţie după k că dacă funcţia f este pătratică (f(x) = 1
2 +
, cu C simetrică), H0 este simetrică şi dacă avem
Dk = ( ) ( )
tk k k kk k
k k kk
s H y s H y
y ,s H y
− −
< − >,
atunci este îndeplinită condiţia Hk+1yi = si pentru orice 0≤i≤k (Hk+1 = Hk + Dk).
Pentru orice k condiţia este îndeplinită pentru i = k din construcţia lui Dk (chiar
dacă funcţia f nu este pătratică). Ca urmare pentru k = 0 afirmaţia este adevărată.
Presupunem afirmaţia adevărată pentru k şi o demonstrăm pentru k +1. Pentru
orice i, 0 ≤ i ≤ k, avem
Hk+2 yi = (Hk+1 + Dk+1) y
i
= Hk+1yi +
( )( )tk 1 k 1 k 1 k 1
k 1 k 1
k 1 k 1 k 1k 1
s H y s H y
y ,s H y
+ + + ++ +
+ + ++
− −
< − >yi
= si +( )k 1 k 1k 1k 1 k 1 i
k 1 k 1 k 1 k 1k 1
s H ys H y , y
y ,s H y
+ +++ +
+ + + ++
−< − >
< − >
= si + ( )( )k 1 k 1k 1k 1 i k 1 i
k 1 k 1 k 1 k 1k 1
s H ys , y H y , y
y ,s H y
+ +++ +
+ + + ++
−< > − < >
< − >
= si + ( )( )k 1 k 1k 1k 1 i k 1 i
k 1 k 1 k 1 k 1k 1
s H ys , y y , H y
y ,s H y
+ +++ +
+ + + ++
−< > − < >
< − >
= si + ( )( )k 1 k 1k 1k 1 i k 1 ik 1 k 1 k 1
k 1
s H ys , y y , s
y ,s H y
+ +++ +
+ + ++
−< > − < >
< − >
= si + ( )( )k 1 k 1k 1k 1 i k 1 ik 1 k 1 k 1
k 1
s H ys , Cs Cs , s
y ,s H y
+ +++ +
+ + ++
−< > − < >
< − >
= si + ( )( )k 1 k 1k 1k 1 i k 1 ik 1 k 1 k 1
k 1
s H yCs , s Cs , s
y ,s H y
+ +++ +
+ + ++
−< > − < >
< − >
= si.
Actualizarea matricei Hk sub forma
Metode de Optimizare – Curs 14
31
Hk+1 = Hk + Dk cu Dk = ( ) ( )
tk k k kk k
k k kk
s H y s H y
y ,s H y
− −
< − >
Poartă denumirea de formula de corecţie de rang 1. Dacă numitorul nu este pozitiv, atunci pozitiv definirea matricei Hk+1 nu este garantată.
Formula de corecţie de rang 2 Davidon-Fletcher–Powell (formula DFP)
presupune Hk sub forma Hk+1 = Hk + Dk cu
Dk = ( )
tk k
k k
s s
s , y< >-
( )tk k
k k
k kk
H y y H
y , H y< >
Arătăm că în cazul acestei formule dacă Hk este pozitiv definită şi
> 0, atunci Hk+1 = Hk + Dk este pozitiv definită.
Lema 40. Fie Hk o matrice pozitiv definită şi sk yk∈Rn astfel încât
> 0. Atunci Hk+1 = Hk + Dk este pozitiv definită, unde
Dk = ( )
tk k
k k
s s
s , y< >-
( )tk k
k k
k kk
H y y H
y , H y< >
În plus, Hk+1yk = sk.
Demonstraţie. Să observăm mai întâi că dacă z ∈Rn este un vector nenul,
atunci matricea In -tzz
z, z< >este pozitiv semidefinită. Într-adevăr este simetrică şi
pentru orice v∈Rn avem
v> = - v> = -
t tv zz v
z, z< > =
= - ( )
2tz v
z, z< > =
( )2z, z v, v z, vz, z
< >< > − < >
< >≥0
Dacă H este matrice pozitiv definită şi dacă y ∈Rn este un vector nenul, atunci
H - tHyy H
y,Hy< > =
1
2H
1 1t2 2
nH yy H
Iy,Hy
− < >
1
2H
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
32
este pozitiv semidefinită, deoarece
1 1t2 2
nH yy H
Iy,Hy
− < >
= In -tzz
z, z< > cu z =
1
2H y.
În plus, y este vector propriu asociat matricei H = H - tHyy H
y,Hy< > asociat valorii
proprii λ = 0, iar dimensiunea subspaţiului corespunzător este 1. Atunci pentru
orice θ > 0 şi orice s cu proprietatea că ≠ 0, rezultă că H +θsst este pozitiv
definită. Înlocuind H prin Hk, y prin yk, s prin sk şi θ prin
k k
1
s , y< > se obţine că
Hk -( )
tk kk k
k kk
H y y H
y , H y< > +
( )tk k
k k
s s
s , y< > este pozitiv definită.
Avem
Hk+1yk = (Hk + Dk)y
k = (Hk + ( )
tk k
k k
s s
s , y< >-
( )tk k
k k
k kk
H y y H
y , H y< >)yk
=Hkyk +
( )
( )
tk k k
tk k
s s y
s y-
( )
( )
tk k kk k
tk kk
H y y H y
y H y
=Hkyk + sk – Hky
k = sk
■
Lema 41. Fie f:Rn→R o funcţie definită prin f(x) = 1
2 + , cu
C∈Mn,n(R) o matrice pozitiv definită şi d∈Rn un vector fixat, şi fie x0∈Rn. Fie
(xk)k şirul definit prin xk+1 = xk - tkHk∇f(x
k), unde
- şirul de matrice (Hk)k este definit prin H0 = In şi Hk+1 = Hk + Dk, cu
Dk = ( )
tk k
k k
s s
s , y< >-
( )tk k
k k
k kk
H y y H
y , H y< >, sk = xk+1 – xk şi yk = ∇f(xk+1) - ∇f(xk)
- tk este pasul optimal asociat direcţiei vk = - Hk∇f(x
k).
Atunci pentru orice k≥0, si = Hk+1yi pentru orice i ∈{0, 1, …,k}.
Demonstraţie. Observăm că pentru orice k
Metode de Optimizare – Curs 14
33
sk = xk+1 – xk = tkvk = -tkHk∇f(x
k)
iar din faptul că ∇f(x) = Cx+d deducem că
yk = ∇f(xk+1) - ∇f(xk) = Csk = tkCvk = -tkCHk∇f(x
k).
Ca urmare = > 0 pentru orice sk ≠ 0. Deci conform lemei 40,
matricele Hk sunt pozitiv definite pentru orice k cu sk ≠ 0 (evident dacă sk = 0,
atunci şi yk = 0; mai mult, în acest caz si=yi =0 pentru orice i ≥ k) .
Vom face demonstraţia prin inducţie după k. Pentru k = 0, obţinem
s0=H1y0, egalitate adevărată conform lemei 40. Presupunem că pentru orice 1≤j ≤k
si = Hjyi pentru orice i ∈{0, 1, …,j-1}
şi demonstrăm că
si = Hk+1yi pentru orice i ∈{0, 1, …,k}.
Conform lemei 39 vectorii s0, s1, ..., sk sunt conjugaţi în raport cu C doi câte doi.
Deoarece pentru orice i∈{0,1, ..., k-1}
= = 0,
= = 0,
obţinem
Hk+1yi = (Hk + Dk)y
i = (Hk + ( )
tk k
k k
s s
s , y< >-
( )tk k
k k
k kk
H y y H
y , H y< >)yi
= Hkyi +
( )tk k
k k
s s
s , y< >yi -
( )tk k
k k
k kk
H y y H
y , H y< >yi
k is ,y 0< >=
= Hkyi -
( )tk k
k k
k kk
H y y H
y , H y< >yi
i iH y sk =
= si -( )
tk k ik
k kk
H y y s
y , H y< >
k iy ,s 0< >=
= si.
Faptul că Hk+1yk = sk rezultă din lema 40.
■
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
34
Ca o consecinţă a lemei 41 (şi lemei 39) rezultă că pentru o funcţie
pătratică f strict convexă algoritmul Davidon-Fletcher–Powell ( DFP) converge la
punctul de minim al lui f după cel mult n+1 iteraţii. Convergenţa algoritmului
pentru clase de funcţii mai generale este o problemă deschisă.
Până acum am optat pentru aproximarea a inversei hessianei Hf(xk) cu o
matrice pozitiv definită Hk verificând condiţiile Hkyi = si pentru orice i ∈{0, 1, ...,
k-1} unde
si = xi+1 – xi şi yi = ∇f(xi+1) - ∇f(xi) , i ≥ 0.
Similar putem opta pentru aproximarea hessianei Hf(xk) cu o matrice
pozitiv definită Bk verificând condiţiile (Bk)-1yi = si (sau echivalent, Bks
i = yi)
pentru orice i ∈{0, 1, ..., k-1}. Se observă că în relaţiile Bksi = yi faţă de relaţiile
Hkyi = si se schimbă rolul lui si cu yi. Schimbând în formula de corecţie de rang 2
Davidon-Fletcher–Powell (formula DFP) rolul lui sk cu yk se obţine formula de
corecţie de rang 2 Broyden-Fletcher–Goldfarb-Shanno (formula BFGS)
Bk+1 = Bk + ( )
tk k
k k
y y
y ,s< >-
( )tk k
k k
k kk
B s s B
s ,B s< >
Similar cu lema 40, dacă sk yk∈Rn astfel încât > 0, atunci
Bk+1 = Bk + ( )
tk k
k k
y y
y ,s< >-
( )tk k
k k
k kk
B s s B
s ,B s< >
este pozitiv definită. În plus, Bk+1sk = yk. Dacă se folosesc actualizarea matricei Bk
atunci direcţia de deplasare se calculează că vk = - (Bk)-1∇f(xk). Pentru a inversa
matricea Bk putem recurge la aşa numita formulă Sherman-Morrison: pentru o
matrice inversabilă A∈Mn,n(R) şi doi vectori u, v∈Rn cu proprietatea că 1 +
≠0, matricea A + uvt este inversabilă şi
(A+uvt)-1 = A-1 - 1 t 1
t 1
A uv A
1 v A u
− −
−+.
Notăm (Bk)-1 = Hk şi aplicând formula Sherman-Morrison obţinem
Metode de Optimizare – Curs 14
35
( )1tk k
k k k
y yB
y ,s
−
+ < >
= Hk -( )
tk kk k
k k k kk
H y y H
y ,s y , H y< > + < >
Aplicând încă o dată formula Sherman-Morrison obţinem
Hk+1 = (Bk+1)-1
= Hk -( )
tk kk
k k
y H y1
y ,s
+ < >
( )tk k
k k
s s
y ,s< >-
( ) ( )t tk k k k
k k
k k
H y s s y H
y ,s
+
< >
sau echivalent
Hk+1 = Hk + Dk cu
Dk = ( ) ( ) ( )
t t tk k k k k kk k k
k k
s s H y s s y H
y ,s
τ − −
< >
τk = ( )
tk kk
k k
y H y1
y ,s+
< >.
Dacă Hk este matrice pozitiv definită şi dacă > 0, atunci Hk+1 = Hk
+ Dk este pozitiv definită. În plus, Hk+1yk = sk. Condiţia > 0 este
echivalentă cu > sau, deoarece sk = tkvk (tk pasul de
deplasare iar vk direcţia de deplasare) ,
> .
Această inegalitate este adevărată dacă pasul tk satisface condiţia Wolfe (17b).
Convergenţa algoritmului Broyden-Fletcher–Goldfarb-Shanno (BFGS) a
fost demonstrată de Powell în 1976.
Algoritmul Broyden-Fletcher–Goldfarb-Shanno (BFGS) (x0 dat)
k: = 0;
H0 := In;
Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007
36
cât timp ||∇f(xk)|| ≠0 execută
pasul 1: vk = - Hk∇f(xk)
pasul 2: *se determină pasul de deplasare tk suboptimal îndeplinind
condiţiile Wolfe (tk asociat direcţiei de deplasare vk)
pasul 3: xk+1 : = xk + tkvk ;
pasul 4: sk: = xk+1 – xk; yk : = ∇f(xk+1) - ∇f(xk);
τk := ( )
tk kk
k k
y H y1
y ,s+
< >.
Dk := ( ) ( ) ( )
t t tk k k k k kk k k
k k
s s H y s s y H
y ,s
τ − −
< >
Hk+1 : = Hk + Dk;
k: = k+1;