34
Metode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direcţiei Reamintim că metodele căutare liniară pentru rezolvarea (numerică) a problemei de optimizare xX inf f(x) constau în construirea unui şir (x k ) k de forma k k k1 k k k k n t ,t 0 pas de deplasare x x tv v direcţie de deplasare + = + R R (LS) cu x 0 X dat. Şirul (x k ) k trebuie să verifice condiţia : f(x k+1 ) < f(x k ), pentru orice k0. şi să aibă un punct limită un x X care să fie punct staţionar pentru f. În general, în funcţie de ordinul (I sau II) al metodei de căutare liniară folosită, alegerea unei direcţii de deplasare v k se face pe baza unor prescripţii generale justificate apriori în cazul pătratic (cazul în care funcţia obiectiv f:R n R este de forma f(x) = 1 2 <x,Cx> + <x, d> cu CM n,n (R) o matrice simetrică şi dR n un vector fixat; în această situaţie funcţia f este convexă dacă şi numai dacă C este pozitiv definită) şi fundamentate pe baza analizei convergenţei şi caracteristicilor numerice ale algoritmului rezultat. VII.3.1. Metoda gradientului (metoda celei mai rapide descreşteri) Metoda gradientului presupune alegerea drept direcţie de deplasare pentru construcţia termenului x k+1 = x k + t k v k a vectorului v k = - f(x k ) pentru orice k 0. Evident dacă f(x k ) 0, atunci v k = - f(x k ) este direcţie descendentă în x k , deoarece <v k , f(x k )> = - <∇f(x k ), f(x k )> = - ||∇f(x k )|| 2 < 0. (iar în cazul în care f(x k ) = 0, algoritmul se opreşte deoarece s-a identificat un punct staţionar al lui f, x = x k ).

VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

1

VII.3. Proceduri de alegere a direcţiei

Reamintim că metodele căutare liniară pentru rezolvarea (numerică) a

problemei de optimizare

x Xinf f (x)∈

constau în construirea unui şir (xk)k de forma

k kk 1 k kk k n

t , t 0 pas dedeplasarex x t v

v direcţiededeplasare+

∈ ≥ →= +

∈ →

R

R (LS)

cu x0 ∈ X dat. Şirul (xk)k trebuie să verifice condiţia :

f(xk+1) < f(xk), pentru orice k≥0.

şi să aibă un punct limită un x ∈X care să fie punct staţionar pentru f. În general,

în funcţie de ordinul (I sau II) al metodei de căutare liniară folosită, alegerea unei

direcţii de deplasare vk se face pe baza unor prescripţii generale justificate apriori

în cazul pătratic (cazul în care funcţia obiectiv f:Rn→R este de forma f(x) =

1

2<x,Cx> + <x, d> cu C∈Mn,n(R) o matrice simetrică şi d∈R

n un vector fixat; în

această situaţie funcţia f este convexă dacă şi numai dacă C este pozitiv definită)

şi fundamentate pe baza analizei convergenţei şi caracteristicilor numerice ale

algoritmului rezultat.

VII.3.1. Metoda gradientului (metoda celei mai rapide

descreşteri)

Metoda gradientului presupune alegerea drept direcţie de deplasare pentru

construcţia termenului xk+1 = xk + tkvk a vectorului vk = - ∇f(xk) pentru orice k ≥ 0.

Evident dacă ∇f(xk) ≠ 0, atunci vk = - ∇f(xk) este direcţie descendentă în xk,

deoarece

<vk, ∇f(xk)> = - <∇f(xk), ∇f(xk)> = - ||∇f(xk)||2 < 0.

(iar în cazul în care ∇f(xk) = 0, algoritmul se opreşte deoarece s-a identificat un

punct staţionar al lui f, x = xk).

Page 2: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

2

Să observăm că viteza de variaţie a unei funcţii diferenţiabile f în xk, într-o

direcţie v cu ||v|| = ||∇f(xk)|| ≠ 0 este dată de derivata în xk după direcţia v, adică

t 0lim

( ) ( )k kf x tv f x

t

+ − = ( )kf

xv

∂ = <v, ∇f(xk)>

Maximizarea în raport cu v a ( ) ( )k k

t 0

f x tv f xlim

t→

+ − =-

t 0lim

( ) ( )k kf x tv f x

t

+ −

este echivalentă cu minimizarea expresiei <v, ∇f(xk)>. Denumirea de metoda celei

mai rapide descreşteri este justificată de faptul că vk = -∇f(xk) reprezintă soluţia

optimă a problemei de minimizare

( )k

v Vk

inf v, f x∈

< ∇ > ,

unde Vk = {v∈Rn : ||v|| = ||∇f(xk)||}= {v∈R

n : ||v||2 = ||∇f(xk)||2}.

Într-adevăr, funcţia Lagrange asociată problemei de minimizare este L:Rn×R →R,

L(v, λ) = <v, ∇f(xk)> - λ(||v||2 - ||∇f(xk)||2) = <v, ∇f(xk)> - λ(<v, v> - ||∇f(xk)||2)

Dacă vk este soluţie optimă, atunci există λ ∈R astfel încât

1. ∇vL(vk, λ)=0

2. ∇λL(vk, λ) = 0 <=> vk ∈ Vk <=> ||v|| = ||∇f(xk)||

3. <u, HvL(vk, λ)u> ≥ 0 pentru orice u ∈{u ∈Rn : <vk, u> = 0}

Ţinând cont că 0 =∇xL(vk, λ) = ∇f(xk) - 2λvk rezultă că 2λvk =∇f(xk), de unde

|λ| = ( )k

k

f x1

2 v

∇ =

1

2.

Cum HvL(vk, λ) = diag(-2λ, -2λ, ..., -2λ), rezultă că pentru a fi îndeplinită condiţia

3 este necesar şi suficient ca λ ≤ 0 şi ca urmare:

λ = - 1

2.

Aşadar vk = 1

2λ∇f(xk) = -∇f(xk). Cum <u, HvL(vk, -1/2)u> > 0 pentru orice u≠0,

rezultă că vk=-∇f(xk) este soluţie optimă locală. Deoarece problema admite soluţie

optimă globală (Vk fiind compactă), rezultă de fapt că vk=-∇f(xk) este soluţie

optimă globală.

Page 3: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

3

Teoremă 24 (convergenţa metodei gradientului – în cazul alegerii

optimale a pasului de deplasare) Fie f: Rn → R o funcţie de clasă C1 şi fie x0∈

Rn. Presupunem că mulţimea D = {x∈ R

n : f(x) ≤ f(x0)} este compactă. Se

construieşte şirul definit prin

xk+1 = xk – tk∇f(xk), k≥0

unde tk este pasul de deplasare optimal asociat direcţiei vk = -∇f(xk), adică tk este

soluţia optimă a problemei

t 0inf

≥f(xk + tvk).

Atunci orice punct limită x al şirului (xk)k este punct staţionar pentru f (adică

∇f( x ) = 0).

Demonstraţie. Fie x un punct limită al şirului (xk)k. Atunci există un

subşir (k jx )j al şirului (xk)k cu proprietatea că x =

jlim→∞

k jx . Limita x ∈D deoarece

xk∈D pentru orice k iar D este o mulţime compactă. Presupunem prin absurd că

∇f( x )≠0. Pentru orice j ≥ 0 avem

f(k j 1x + ) ≤ f(

k 1jx+

) ≤ f(k jx - t∇f(

k jx ))

pentru orice t ≥ 0. Trecând la limită cu j → ∞ şi ţinând cont că f şi∇f sunt funcţii

continue obţinem

jlim→∞

f(k j 1x + ) ≤

jlim→∞

f(k jx - t∇f(

k jx ))

f(jlim→∞

k j 1x + ) ≤ f(jlim→∞

(k jx - t∇f(

k jx )))

f( x ) ≤ f( x - t∇f( x ))

0 ≤ f( x - t∇f( x ))-f( x )

0 ≤ ( )( ) ( )f x t f x f x

t

− ∇ −

pentru orice t > 0. Trecând la limită după t → 0 ( t > 0) obţinem

Page 4: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

4

0 ≤ ( )( )

( )fx

f x

∂ −∇ = <∇f( x ), -∇f( x )> = - ||∇f( x )||2.

||∇f( x )||2 ≤ 0

de unde rezultă că ||∇f( x )|| = 0, ceea ce contrazice presupunerea ∇f( x )≠0. Deci

x este punct staţionar pentru f.

Teoremă 25 (convergenţa metodei gradientului – în cazul generării

pasului de deplasare prin algoritmul backtracking-Armijo) Fie f: Rn → R o

funcţie de clasă C1 având gradientul ∇f Lipschitz continuu şi fie x0∈X. Se

construieşte şirul definit prin

xk+1 = xk + tkvk, k≥0

unde vk = -∇f(xk), iar tk este pasul de deplasare obţinut aplicând algoritmul

backtracking-Armijo. Atunci are loc una următoarele trei situaţii:

1. ∇f(xk) = 0 pentru un anumit k ≥ 0

2. ( )k

kinf f x = - ∞

3. ( )k

klim f x

→∞∇ = 0

Demonstraţie. Presupunem că ( )k

kinf f x >-∞ şi că ∇f(xk)≠0 pentru orice

k≥0. Presupunem prin absurd că şirul (∇f(xk))k nu converge la 0. Atunci există ε

> 0 astfel încât pentru orice j∈N există kj ≥ j astfel încât

||∇f(k jx )|| ≥ ε.

Ca urmare pentru orice j ≥ 0 avem

( ) ( )2

k kj jmin f x , f x

∇ ∇

≥ min (ε, ε2) > 0

Aşadar şirul ( ) ( ){ }2k k

k

min f x , f x ∇ ∇

nu converge la 0.

Pe de altă parte din teorema 15, deoarece direcţia de deplasare vk = -

∇f(xk), rezultă că

Page 5: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

5

0 = ( )( )k k

k k

kk

v , f xlim min v , f x ,

v→∞

< ∇ > < ∇ >

= ( ) ( ){ }2k k

klim min f x , f x

→∞∇ ∇ .

ceea ce contrazice faptul că şirul ( ) ( ){ }2k k

k

min f x , f x ∇ ∇

nu converge la 0.

În consecinţă presupunerea este falsă şi deci ( )k

klim f x

→∞∇ = 0.

Teoremă 26 (convergenţa metodei gradientului – în cazul în care paşii

de deplasare satisfac condiţiile Wolfe) Fie f: Rn → R o funcţie de clasă C1

având gradientul ∇f Lipschitz continuu şi fie x0∈X. Se construieşte şirul definit

prin

xk+1 = xk + tkvk, k≥0

unde vk = -∇f(xk), iar pasul de deplasare tk îndeplineşte condiţiile Wolfe (17a, 17b)

pentru orice k≥0. Atunci are loc una următoarele trei situaţii:

1. ∇f(xk) = 0 pentru un anumit k ≥ 0

2. ( )k

kinf f x = - ∞

3. ( )k

klim f x

→∞∇ = 0

Demonstraţie. Presupunem că ( )k

kinf f x >-∞ şi că ∇f(xk)≠0 pentru orice

k≥0. Conform teoremei 20, klim

→∞( ) ( )

22 k

kcos f xθ ∇ =0, unde

cos(θk) = ( )

( )

k k

k k

f x ,v

f x v

− < ∇ >

∇ =

( ) ( )( ) ( )

k k

k k

f x , f x

f x f x

< ∇ ∇ >

∇ ∇=1.

Deci , klim

→∞( )

2kf x∇ =0 sau echivalent

klim

→∞( )kf x∇ =0.

Algoritmul asociat metodei gradientului este schiţat mai jos (se

presupune x0 dat):

Page 6: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

6

k: = 0;

cât timp ||∇f(xk)|| ≠0 execută

pasul 1: *se calculează ∇f(xk);

pasul 2: *se determină pasul de deplasare tk (optimal sau suboptimal)

asociat direcţiei de deplasare -∇f(xk);

pasul 3: xk+1 = xk - tk∇f(xk); k: = k+1;

Prezentăm în continuare implementările în MAPLE ale algoritmului de

mai sus asociate diverselor metode de determinare a pasului tk. Procedurile au

drept parametrii funcţia obiectiv f, punctul iniţial, notat x00, şi precizia ε (criteriul

de oprire este ||∇f(xk)|| < ε). Procedurile folosesc comenzi (vector, grad, etc.) din

pachetul linalg. Ca urmare înainte de utilizarea procedurilor acesta trebuie

încărcat:

> with(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

> f3:=(x,y)->9*x^2-x*y+y^2;

:= f3 → ( ),x y − + 9 x2 x y y2

De asemenea în fiecare caz în parte vom asocia reprezentarea grafică (3D şi

contour).

Implementare metoda gradientului cu determinarea optimală a pasului folosind

metoda secţiunii de aur:

> gradient_gold:=proc(f,x00,epsilon)

> local x0,x1,n,g,g0,t1,t2,t,y1,y2,alpha,beta,

a,b,L,u,v,nmax,j,phi;

> n:=vectdim(x00); x0:=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)]);

> while norm(g0,2)>=epsilon do

>phi:=t->f(seq(x0[i]-g0[i]*t,i=1..n));

Page 7: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

7

> t1:=0.; t2:=1.; y1:=phi(t1); y2:=phi(t2);

> if y1<=y2 then a:=t1; b:=t2 else

> 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);beta:=1-alpha;

> L:=b-a;u:=a+beta*L;v:=a+alpha*L;y1:=phi(u);y2:=phi(v);

>nmax:=ceil(ln(epsilon/(10*L))/ln(alpha));j:=0;

> while j<nmax do

> if y1<y2 then b:=v;L:=b-a;

> y2:=y1;v:=u;u:=a+beta*L;y1:=phi(u)

> else a:=u;L:=b-a;

> y1:=y2;u:=v;v:=a+alpha*L;y2:=phi(v);

> fi;

> j:=j+1

> od;

> t:=(a+b)/2;

> x0:=evalm(x0-t*g0);

> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);

> od;

> RETURN(evalm(x0))

> end;

> gradient_gold(f1,vector([0,0]),10^(-4));

[ ],0.6000033271 -0.2000166075

Page 8: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

8

Număr de iteraţii: 5

> gradient_gold(f3,vector([0,-1]),10^(-4));

[ ],0.116040 10-8 -0.00003575187253

Număr de iteraţii: 38

Implementare metoda gradientului cu determinarea optimală a pasului folosind

metoda bisecţiei:

> gradient_bisect:=proc(f,x00,epsilon)

> local x0,n,g,g0,t1,t2,t,y1,y2,c,k,nmax,d1;

> n:=vectdim(x00); x0:=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)]);

> while norm(g0,2)>=epsilon do

> d1:=unapply(subs(seq(x[i]=evalm(x0-g0*tt)[i],i=1..n),-

sum(g[j]*g0[j],j=1..n)),tt);

> t1:=0.;y1:=d1(0.);t2:=t1+0.5;y2:=d1(t2);

> while y1*y2>0 do t2:=t2+0.5;y2:=d1(t2) od;

> nmax:=ceil(ln(abs(10*t2/epsilon))/ln(2)); k:=0;

>while k<nmax do

>c:=(t1+t2)/2;

>if d1(c)=0 then t1:=c;t2:=c else

>if evalf(d1(c)*d1(t1))<0 then t2:=c else t1:=c fi

> fi;

Page 9: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

9

>k:=k+1

>od;

>t:=(t1+t2)/2;

> x0:=evalm(x0-t*g0);

> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);

> od;

> RETURN(evalm(x0))

> end;

> gradient_bisect(f1,vector([0,0]),10^(-4));

[ ],0.5999972041 -0.2000048879

Număr de iteraţii: 5

> gradient_bisect(f2,vector([0,1]),10^(-4));

[ ],0.9999073962 0.9998098719

Page 10: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

10

Număr de iteraţii: 796

> gradient_bisect(f3,vector([0,-1]),10^(-4));

[ ],0.157874 10-8 -0.00003579176318

Număr de iteraţii: 38

Implementare metoda gradientului cu determinarea optimală a pasului folosind

metoda Newton:

> gradient_newt:=proc(f,x00,epsilon)

> local x0,x1,n,g,H,g0,t1,t2,t,jj,d1,d2;

> n:=vectdim(x00); x0:=vector(n);

>g:=grad(f(seq(x[i],i=1..n)),[seq(x[i],i=1..n)]);

Page 11: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

11

>H:=hessian(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)]);

> while norm(g0,2)>=epsilon do

> d1:=unapply(subs(seq(x[i]=evalm(x0-g0*tt)[i],i=1..n),-

sum(g[j]*g0[j],j=1..n)),tt);

>d2:=unapply(subs(seq(x[i]=x0[i]-

g0[i]*tt,i=1..n),sum(sum(H[j,k]*g0[j],j=1..n)*g0[k],k=1..n)),tt);

>t1:=1.;t2:=t1-d1(t1)/d2(t1);jj:=1;

>while ((t2-t1)^2>=epsilon/20) and (jj<=1000) do

>t1:=t2;t2:=t1-d1(t1)/d2(t1); jj:=jj+1 od;

>if jj>1000 then print(`Metoda Newton folosita pentru determinarea

pasului optimal nu converge`); RETURN(NULL) fi;

> t:=t2;

> x0:=evalm(x0-t*g0);

> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);

> od;

> RETURN(evalm(x0))

> end;

> gradient_newt(f1,vector([0,0]),10^(-4));

[ ],0.5999972004 -0.2000048990

Număr de iteraţii: 5

> gradient_newt(f2,vector([0,1]),10^(-4));

Page 12: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

12

[ ],0.9999081530 0.9998113778

Număr de iteraţii: 797

> gradient_newt(f3,vector([0,-1]),10^(-4));

[ ],0.4 10-13 -0.00003567952862

Număr de iteraţii: 38

Implementare metoda gradientului cu determinarea suboptimală a pasului

folosind algoritmul backtracking-Armijo:

> gradient:=proc(f,x00,epsilon)

> local x0,x1,i,n,g,g0,t,y0,tinit,beta,delta;

> tinit:=1;beta:=0.5;delta:=0.1;

> n:=vectdim(x00); x0:=vector(n); x1:=vector(n);

Page 13: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

13

> 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)]);

> while norm(g0,2)>=epsilon do

> y0:=evalf(f(seq(x0[i],i=1..n))); t:=evalf(tinit);

> x1:=evalm(x0-t*g0);

> while f(seq(x1[i],i=1..n))>y0-t*delta*sum(g0[i]^2,i=1..n)

> do t:=t*beta; x1:=evalm(x0-t*g0);

> od;

> x0:=evalm(x1);

> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);

> od;

> RETURN(eval(x0))

> end;

> gradient(f1,vector([0,0]),10^(-4));

[ ],0.6000061035 -0.2000122071

Număr de iteraţii: 11

> gradient(f2,vector([0,1]),10^(-4));

[ ],0.9999118308 0.9998214641

Page 14: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

14

Număr de iteraţii: 815

> gradient(f3,vector([0,-1]),10^(-4));

[ ],-0.1 10-13 -0.00003394957258

Număr de iteraţii: 26

VII.3.2. Direcţii cvasi-Newton

Fie Bk ∈Mn.n(R) o matrice pozitiv definită (în particular, Bk este simetrică).

Luăm drept direcţie de deplasare pentru construcţia termenului xk+1 = xk + tkvk

vectorul vk = - 1kB− ∇f(xk) pentru orice k ≥ 0. Evident dacă ∇f(xk) ≠ 0, atunci vk = -

1kB− ∇f(xk) este direcţie descendentă în xk, deoarece

<vk, ∇f(xk)> = - < 1kB− ∇f(xk), ∇f(xk)> < 0.

Page 15: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

15

(am utilizat faptul că dacă Bk este pozitiv definită, atunci şi 1kB− este pozitiv

definită). O direcţie de deplasare de forma vk = - 1kB− ∇f(xk), cu Bk o matrice

pozitiv definită, se numeşte direcţie cvasi-Newton.

Să observăm că vk = - 1kB− ∇f(xk) reprezintă soluţia problemei de

optimizare:

nv Rinf∈

f(xk) + <v, ∇f(xk)> + 1

2<v, Bkv>.

Un caz de interes particular este dat de posibilitatea ca Bk = Hf(xk) (presupunând

că hesssiana lui f în xk este pozitiv definită). În această situaţie vk = -Hf(xk)-1∇f(xk)

se numeşte direcţie Newton şi reprezintă soluţia problemei de optimizare

nv Rinf∈

f(xk) + <v, ∇f(xk)> + 1

2<v, Hf(xk)v>

(să observăm că f(xk) + <v, ∇f(xk)> + 1

2<v, Hf(xk)v> ≈ f(xk + v) ).

Teoremă 27 (convergenţa metodelor pentru care direcţia de deplasare

este de tip cvasi-Newton – în cazul generării pasului de deplasare prin

algoritmul backtracking-Armijo) Fie f:Rn→R o funcţie de clasă C1 având

gradientul ∇f Lipschitz continuu şi fie x0∈ Rn. Fie (Bk)k un şir de matrice din

Mn,n(R) pozitiv definite cu proprietatea că există două constante reale cmin şi cmax

astfel încât pentru orice valoare proprie λ(Bk) a matricei Bk şi pentru orice k să

avem

0 < cmin ≤ λ(Bk) ≤ cmax.

Se construieşte şirul definit prin

xk+1 = xk + tkvk, k≥0

unde vk = - 1kB− ∇f(xk) iar tk este pasul de deplasare obţinut aplicând algoritmul

backtracking-Armijo. Atunci are loc una dintre următoarele trei situaţii:

1. ∇f(xk) = 0 pentru un anumit k ≥ 0

2. ( )k

kinf f x = - ∞

Page 16: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

16

3. ( )k

klim f x

→∞∇ = 0

Demonstraţie. Presupunem că ( )k

kinf f x >-∞ şi că ∇f(xk)≠0 pentru orice

k≥0. Notăm cu λmin(B), respectiv λmax(B), cea mai mică respectiv cea mai mare

valoare proprie a unei matrice simetrice B∈Mn,n(R). Pentru orice vector nenul p ∈

Rn avem

λmin(B) ≤ 2

Bp,p

p

< > ≤ λmax(B)

şi în particular, pentru B=Bk

0 < cmin ≤ λmin(Bk) ≤ k2

B p, p

p

< > ≤ λmax(Bk) ≤ cmax.

Ca urmare

|<vk, ∇f(xk)>| = |< 1kB− ∇f(xk), ∇f(xk)>| ≥ λmin(

1kB− )||∇f(xk)||2

= ( )max k

1

Bλ||∇f(xk)||2 ≥

max

1

c||∇f(xk)||2. (27.1)

De asemenea

||vk||2 = || 1kB− ∇f(xk)||2 = < 1

kB− ∇f(xk), 1kB− ∇f(xk)> = < 2

kB− ∇f(xk), ∇f(xk)>

≤ λmax(2

kB− )||∇f(xk)||2 ≤( )2

min k

1

Bλ||∇f(xk)||2

≤ 2min

1

c||∇f(xk)||2 . (27.2)

de unde ţinând cont şi de (27.1) rezultă

( )k k

k

v , f x

v

< ∇ ≥ min

max

c

c||∇f(xk)||. (27.3)

Din teorema 15, deoarece direcţia de deplasare vk = - 1kB− ∇f(xk), rezultă că

0 = ( )( )k k

k k

kk

v , f xlim min v , f x ,

v→∞

< ∇ > < ∇ >

(27.4)

Din (27.1) şi (27.3) rezultă

Page 17: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

17

( )( )k k

k k

k

v , f xmin v , f x ,

v

< ∇ > < ∇ >

≥ ( ) ( )2

k kmin

max max

c1min f x , f x

c c

∇ ∇

şi ţinând cont de (27.4) obţinem

0 = ( ) ( )2

k kmin

kmax max

c1lim min f x , f x

c c→∞

∇ ∇

. (27.5)

Presupunem prin absurd că şirul (∇f(xk))k nu converge la 0. Atunci există

ε > 0 astfel încât pentru orice j∈N există kj ≥ j astfel încât

||∇f(k jx )|| ≥ ε.

Ca urmare pentru orice j ≥ 0 avem

( ) ( )2

k kj jmin

max max

c1min f x , f x

c c

∇ ∇

≥ 2 min

max max

c1min ,

c c

ε ε

> 0.

Aşadar şirul ( ) ( )2

k kmin

max max k

c1min f x , f x

c c

∇ ∇

nu converge la 0, ceea ce

contrazice (27.5). În consecinţă presupunerea este falsă şi deci ( )k

klim f x

→∞∇ = 0.

Teoremă 28 (convergenţa metodelor pentru care direcţia de deplasare

este de tip cvasi-Newton – în cazul în care paşii de deplasare satisfac

condiţiile Wolfe) Fie f:Rn→R o funcţie de clasă C1 având gradientul ∇f Lipschitz

continuu şi fie x0∈ Rn. Fie (Bk)k un şir de matrice din Mn,n(R) pozitiv definite cu

proprietatea că numerele lor de condiţionare sunt uniform mărginite (adică o

constantă c > 0 astfel încât ||Bk||2||1

kB− ||2 ≤ c pentru orice k ≥ 0 sau echivalent

( )( )

max k

min k

B

B

λ

λ≤ c pentru orice k ≥ 0, unde λmin(Bk), respectiv λmax(Bk), este cea mai

mică respectiv cea mai mare valoare proprie a lui Bk) . Se construieşte şirul definit

prin

xk+1 = xk + tkvk, k≥0

unde vk = - 1kB− ∇f(xk) iar pasul de deplasare tk satisface condiţiile Wolfe pentru

orice k≥0. Atunci are loc una dintre următoarele trei situaţii:

Page 18: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

18

1. ∇f(xk) = 0 pentru un anumit k ≥ 0

2. ( )k

kinf f x = - ∞

3. ( )k

klim f x

→∞∇ = 0

Demonstraţie. Presupunem că ( )k

kinf f x >-∞ şi că ∇f(xk)≠0 pentru orice

k≥0. Pentru orice vector nenul p ∈ Rn şi orice matrice simetrică B avem

λmin(B) ≤ 2

Bp, p

p

< >, (28.1)

unde λmin(B) este cea mai mică valoare proprie a lui B. Conform teoremei 20,

klim

→∞( ) ( )

22 k

kcos f xθ ∇ =0, unde

cos(θk) = ( )

( )

k k

k k

f x ,v

f x v

− < ∇ >

∇ =

( ) ( )( ) ( )

k 1 kk

k 1 kk

f x ,B f x

f x B f x

< ∇ ∇ >

∇ ∇≥

( )≥

28.1

( ) ( )( )

1 kmin k

1 kk

B f x

B f x

λ ∇

∇ =

( )( ) ( )

k

1 kmax k k

f x

B B f x−

λ ∇ =

=( )

( )

k

1 kk k

f x

B B f x−

∇ ≥

( )( )

k

1 kk k

f x

B B f x−

= 1

k k

1

B B−≥

1

c.

Deci avem klim

→∞( ) ( )

22 k

kcos f xθ ∇ =0 şi cos(θk) ≥ 1

c pentru orice k. Ca urmare

klim

→∞( )

2kf x∇ =0 sau echivalent

klim

→∞( )kf x∇ =0.

VII.3.3. Metoda Newton clasică

Teoremă 29 (convergenţa metodei Newton clasice) Fie X o submulţime

deschisă a lui Rn, f: X→R o funcţie de clasă C2 având hessiana Hf Lipschitz

Page 19: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

19

continuă şi fie x0∈ X. Fie x un punct de minim local al lui f cu proprietatea că

Hf( x ) este pozitiv definită (cu alte cuvinte, fie x un punct care îndeplineşte

condiţiile suficiente pentru a fi punct de minim local al lui f). Se construieşte şirul

definit prin

xk+1 = xk – Hf(xk)-1∇f(xk), k≥0

Dacă x0 este într-o vecinătate suficient de mică V a lui x , atunci

1. fiecare termen xk ∈V iar şirul (xk)k converge la x .

2. rata de convergenţă a lui (xk)k la x este pătratică, adică există o

constantă c > 0 astfel încât:

k 1

2kk

x xlimsup

x x

+

→∞

− = c.

3. rata de convergenţă a şirului (||∇f(xk)||)k la 0 este pătratică.

Demonstraţie. Punctul x fiind punct de minim local al lui f, avem

∇f( x )=0. Deoarece Hf( x ) este pozitiv definită şi Hf este continuă există r1 > 0

astfel încât pentru orice x ∈B( x , r1), Hf(x) este pozitiv definită, deci inversabilă.

De asemenea există r2 < r1 astfel încât pentru orice x∈B( x , r2) să avem || Hf(x)-1||

≤ 2||Hf( x )-1|| . Notăm r3 =

( )2 1

1min 1, r ,

2 Hf x−

γ

unde γ este constanta

Lipschitz asociată funcţiei Hf. Arătăm prin inducţie după k că dacă x0∈ B( x , r3),

atunci xk∈ B( x , r3) pentru orice k ≥ 0. Avem

||xk - Hf(xk)-1∇f(xk) - x || = ||xk - x - Hf(xk)-1∇f(xk) || =

= || Hf(xk)-1(Hf(xk)(xk - x )- (∇f(xk) -∇f( x ))) ||

≤ || Hf(xk)-1|| ||(Hf(xk)(xk - x )- (∇f(xk) -∇f( x ))) ||

≤ 2||Hf( x )-1|| ||(Hf(xk)(xk - x )- (∇f(xk) -∇f( x ))) ||. (29.1)

Pe de altă parte

||(Hf(xk)(xk - x )- (∇f(xk) -∇f( x ))) || =

= ( ) ( )( )( )( )1 k k k k

0Hf x Hf x t x x x x dt− + − −∫

Page 20: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

20

≤ ( ) ( )( )1 k k k k

0Hf x Hf x t x x x x dt− + − −∫

≤ 21 k

0t x x dtγ −∫

= 1

2γ||xk - x ||2. (29.2)

Din (29.1) şi (29.2) rezultă că

||xk+1 - x || ≤ C ||xk - x ||2

unde C = γ||Hf( x )-1||. Din inegalitatea de mai sus, rezultă că dacă xk ∈ B( x , r3),

atunci xk+1∈ B( x , 1

2r3) ⊂ B( x , r3), şirul (xk)k converge la x iar rata convergenţei

este pătratică.

Dacă notăm vk = – Hf(xk)-1∇f(xk), atunci ∇f(xk) + Hf(xk)vk = 0 şi

||∇f(xk+1)|| = ||∇f(xk+1)- ∇f(xk) - Hf(xk)vk||

= ( )( ) ( )1 k k k 1 k k k

0Hf x tv x x dt Hf x v++ − −∫

≤ ( ) ( )1 k k k k

0Hf x tv Hf x v dt+ −∫

≤ 1 2k

0t v dtγ∫

= 1

2γ||vk ||2.

= 1

2γ|| Hf(xk)-1∇f(xk)||2

≤ 1

2γ|| Hf(xk)-1||2 ||∇f(xk)||2

≤ 2γ|| Hf( x )-1||2 ||∇f(xk)||2

de unde rezultă că rata de convergenţă a şirului (||∇f(xk)||)k la 0 este pătratică.

Observaţie 30 (legătura cu metoda Newton pentru rezolvarea

ecuaţiilor neliniare). Metoda Newton pentru rezolvarea sistemelor neliniare

F(x)=0 (unde G este o submulţime deschisă a lui Rn iar F: G → Rn este o funcţie

cu proprietatea că jacobianul, notat JF(x) = ( )i

j 1 i, j n

Fx

x≤ ≤

∂ ∂

, este o matrice

Page 21: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

21

inversabilă pentru x ∈G) constă în determinarea soluţiei sistemului considerat ca

limită a şirului (xk)k, unde

xk+1 = xk – JF(xk)-1 F(xk)

cu termenul iniţial x0∈G într-o vecinătate suficient de mică a soluţiei sistemului.

Determinarea punctului de minim al funcţiei convexe diferenţiabile

f:X→R (X o submulţime deschisă a lui Rn) este echivalentă cu rezolvarea

sistemului de ecuaţii ∇f(x) = 0. Dacă notăm F = ∇f şi presupunem în plus, că f

este strict convexă, atunci JF(x) = Hf(x) este o matrice inversabilă pentru orice x.

Şirul corespunzător metodei Newton pentru rezolvarea sistemului ∇f(x) = 0 este

definit prin:

xk+1 = xk – JF(xk)-1 F(xk) = xk – Hf(xk)-1∇f(xk)

adică tocmai şirul tratat în teorema 29.

Observaţie 31. Determinarea termenului xk+1 = xk – Hf(xk)-1∇f(xk) al

şirului definit în teorema 29 presupune calculul inversei matricei Hf(xk). Pentru

micşorarea volumului de calcul putem proceda în felul următor. Observăm că

xk+1 = xk – Hf(xk)-1∇f(xk) <=> Hf(xk) (xk+1 - xk) = -∇f(xk)

Astfel în loc să inversăm matricea Hf(xk), rezolvăm sistemul de ecuaţii liniare

Hf(xk)vk = - ∇f(xk) (cu necunoscutele k1v , k

2v , ..., knv ) şi calculăm xk+1 = xk + vk.

Pentru rezolvarea acestui sistem se recomandă factorizarea Cholesky a matricei

Hf(xk), adică scrierea sub forma Hf(xk) = LLt unde L este o matrice inferior

triunghiulară cu elementele de pe diagonala principală pozitive:

Apoi sistemul Hf(xk)vk = - ∇f(xk) se rezolvă în 2 etape: se rezolvă întâi sistemul

Ly = ∇f(xk) (cu soluţia y1 =-11

1

λ ( )k

1

fx

x

∂, yi =

ii

1

λ(- ( )k

i

fx

x

∂-

i 1

ij ij 1

y−

=

λ∑ ), i=2,..,n)

şi apoi sistemul Ltvk = y (cu soluţia knv =

nn

1

λyn,

kiv =

ii

1

λ(yi-

nk

ji jj i 1

v= +

λ∑ ), i = n-

1,..,1).

λ11 0 0 … 0

λ21 λ22 0 … 0

λn1 λn2 λn3 … λnn

L =

Page 22: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

22

Factorizarea Cholesky a unei matrice pozitiv definite A=(aij)1≤i,j≤n poate fi

calculată direct rezolvând un sistem de n2 ecuaţii. Dacă L = (λij)1≤i,j≤n cu λij = 0

pentru orice j > i =1,2,…,n, atunci relaţia A = LLt este echivalentă cu

aij = ∑=

λλn

1kkjik = ∑

=

λλm

1kkjik , unde m = min(i, j).

pentru orice i,j ∈ {1, 2,…, n}. Dacă se impun condiţiile λii > 0 pentru orice i,

acest sistem este compatibil determinat. Pentru i = j = 1 obţinem

a11 = 2iiλ pentru i =1, 2, .., n.

Pentru j = 1 obţinem ai1 = λi1λ11 (i =2, .., n) iar pentru j = 2, 3, …, n, obţinem

ajj = ∑−

=

λ1j

1k

2jk + 2

jjλ

Pentru orice i ≥ j +1

aij =∑−

=

λλ1j

1kjkik + λijλij,

În consecinţă, putem scrie următorul algoritm de calcul al factorizării Cholesky

pentru o matrice A pozitiv definită:

pentru j =1,2,...,n execută

λjj : = ∑−

=

λ−1j

1k

2jkjja

pentru i = j+1, j+2,...,n execută

λij := jj

1

λ(aji - ∑

=

λλ1j

1kjkik ) ;

Matricea inferior triunghiulară L cu proprietatea că A = LLt şi că are elementele

de pe diagonala principală pozitive se numeşte factor Cholesky. Dacă matricea A

nu este pozitiv definită factorizarea Cholesky eşuează (adică dacă pentru un

anumit j avem j 1

2jj jk

k 1

a−

=

− λ∑ ≤0). Exemplificăm algoritmul de mai sus pentru

matricea simetrică

4 2 0

A = 2 4 -1

0 -1 1

Page 23: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

23

∆1 = 4, ∆2 = 4⋅4 -2⋅2 = 12 > 0, ∆3 = 8 > 0. Deci A este pozitiv definită. Calculăm

factorul Cholesky L conform algoritmului:

λ11 = 11a = 4 = 2.

λi1 = 11

1ia

λ, i = 2,3: λ21 = 1, λ31 = 0

222λ = a22 -

221λ = 4 - 1 = 3 => λ22 = 3

λ22λ32 = a32 - λ31λ21 = -1 => λ32 = -3

1= -

3

3

233λ = a33 -

231λ - 2

32λ = 1 - 3

1=

3

2 => λ33 =

3

2=

3

6.

2 0 0

L = 1 3 0

0 -3

3

3

6

Comanda cholesky(A) din pachetul linalg din Maple calculează factorul Cholesky

L pentru o matrice pozitiv definită A. Verificarea faptului că A este sau nu pozitiv

definită se poate face cu comanda definite(A, tip), unde A este o matrice

simetrică, iar tip poate fi unul dintre şirurile de caractere: 'positive_def',

'positive_semidef', 'negative_def', sau 'negative_semidef'.

> with(linalg):

> A:=matrix(3,3,[[4,2,0],[2,4,-1],[0,-1,1]]);

:= A

4 2 0

2 4 -1

0 -1 1

> definite(A, positive_def);

true

> cholesky(A);

2 0 0

1 3 0

0 −3

36

3

Page 24: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

24

Algoritmul asociat metodei Newton clasice este schiţat mai jos (se

presupune x0 dat):

k: = 0;

cât timp ||∇f(xk)|| ≠0 execută

pasul 1: *se calculează ∇f(xk) şi Hf(xk)

pasul 2: *se rezolvă sistemul Hf(xk)vk = -∇f(xk) (se recomandă

factorizarea Cholesky a matricei Hf(xk) = LLt)

pasul 3: xk+1 = xk + vk ; k: = k+1;

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)|| < ε). Procedura foloseşte comenzi

(vector, grad, hessian, cholesky, etc.) din pachetul linalg. Ca urmare înainte de

utilizarea procedurii acesta 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

În cazul funcţiei f1, care este o funcţie pătratică strict convexă, se va executa o

sigură iteraţie pentru determinarea soluţiei optime. În cazul celeilalte funcţii

hessiana Hf2(1,1) este pozitiv definită, dar aplicabilitatea metodei Newton depinde

de punctul iniţial x0.

Implementare metodei Newton clasice:

> newton:=proc(f,x00,epsilon)

> local x0,g,H,g0,H0,L,y,v,n,p,md,pp;

> n:=vectdim(x00); x0:=vector(n);y:=vector(n);

>v:=vector(n); L:=matrix(n,n);

> 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);

> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);

Page 25: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

25

> 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)]));

> for p from 1 to n do md:=H0[p,p]-sum(L[p,i]^2,i=1..p-1);

>if md<=0 then

>print(`Hessiana nu este pozitiv definita in`, evalm(x0));

>RETURN(NULL)

>else 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;

>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;

> x0:=evalm(x0+v);

> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);

> od;

> RETURN(evalm(x0))

> end;

> newton(f1,vector([0,0]),10^(-4));

[ ],0.6000000000 -0.2000000001

> newton(f2,vector([1,0]),10^(-4));

[ ],1. 1.000000000

> newton(f2,vector([0,1]),10^(-4));

,Hessiana nu este pozitiv definita in [ ],0. 1.

> newton(f2,vector([-1,0]),10^(-4));

[ ],0.9999999936 0.9999999751

Pentru funcţia f2 şi punctul iniţial (-0.5, 0.2)t prezentăm mai jos şi reprezentarea

grafică (3D şi contour) a iteraţiilor:

> newton(f2,vector([-0.5,0.2]),10^(-4));

[ ],0.9999991806 0.9999983606

Page 26: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

26

Număr de iteraţii: 6

Prezentăm în continuare o variantă a acestui algoritm pentru cazul în care

şirul construit nu converge. Introducem ca dată suplimentară de intrare numărul

maxim de termeni din şir ce urmează a fi calculaţi (Nmax).

> newton_:=proc(f,x00,epsilon,Nmax)

> local x0,g,H,g0,H0,L,y,v,n,p,k,md,pp;

> n:=vectdim(x00); x0:=vector(n);y:=vector(n);

> v:=vector(n); L:=matrix(n,n);

> 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);k:=0;

> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);

> while (norm(g0,2)>=epsilon) and (k<Nmax) 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)]));

> for p from 1 to n do md:=H0[p,p]-sum(L[p,i]^2,i=1..p-1);

>if md<=0 then print(`iteratia `, k);

>print(`Hessiana nu este pozitiv definita in`, evalm(x0));

>print(H0); RETURN(NULL)

>else 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;

> y[1]:=-g0[1]/L[1,1];

> for p from 2 to n do

Page 27: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

27

>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;

> x0:=evalm(x0+v);k:=k+1;

> g0:=vector([seq(subs(seq(x[i]=x0[i],i=1..n), g[j]),j=1..n)]);

> od;

>print(`Numar de iteratii`,k);

> RETURN(evalm(x0))

> end;

Considerăm funcţia f4: R2 \ {(1,y)t, y∈R} → R definită prin

> f4:=(x,y)->1/(x-1)^4/4+(y^2-x);

:= f4 → ( ),x y + − 14

1

( ) − x 1 4y2 x

Hessiana Hf4 este pozitiv definită în orice punct din domeniul de definiţie:

> hessian(f4(x,y),[x,y]);

5

( ) − x 1 60

0 2

Punctul (0,0)t este (singurul) punct staţionar pentru f4, deci este punct de minim

local (pentru restricţia lui f4 la mulţimea convexă {(x,y)t∈R2: x < 1}, (0,0)t este

punct de minim global):

> grad(f4(x,y),[x,y]);

,− − 1

( ) − x 1 51 2 y

Aplicăm procedura newton_ pentru diverse puncte iniţiale x0.

> newton_(f4,vector([0.5,2]),10^(-4),10);

,Numar de iteratii 7

[ ],0.12864143 10-5 -0.1 10-62

> newton_(f4,vector([1.1,0.1]),10^(-4),25);

,Numar de iteratii 25

[ ],0.1334916474 1095691723 -0.1 10-225

> newton_(f4,vector([-0.5,0.2]),10^(-4),500);

,iteratia 19

,Hessiana nu este pozitiv definita in [ ],0.3684324304 101580645204 -0.1 10-171

Page 28: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

28

0. 0

0 2

Se observă că dacă x0 = (0.5, 2)t şirul asociat metodei Newton converge la (0,0),

în timp ce pentru x0 = (1.1, 0.1)t şi x0=(-0.5, 0.2) şirurile asociate nu converg.

Faptul că procedura afişează mesajul „hessiana nu este pozitiv definită” se

datorează virgulei mobile ( ( )k4fx

x

∂ devine mic şi este asimilat cu zero).

VII.3.4. Metoda Newton cu pas variabil

Metoda Newton clasică prezentată mai înainte foloseşte drept direcţie de

deplasare aşa numita direcţie Newton vk=-Hf(xk)∇f(xk) şi pasul de deplasare tk=1

pentru orice k≥0. În general, convergenţa metodei Newton cu pasul tk = 1 este

asigurată numai pentru un domeniu relativ restrâns de puncte iniţiale x0. De aceea

având în vedere extinderea domeniului de convergenţă al metodei, în practică

paşii tk asociaţi direcţiilor se aleg prin proceduri optimale sau suboptimale.

Metoda corespunzătoare se numeşte metoda Newton cu pas variabil, rezervându-

se termenul de metodă Newton clasică doar pentru cazul în care tk = 1 pentru orice

k≥0.

Teoremă 32 (convergenţa metodei Newton cu pas variabil – în cazul

generării pasului de deplasare prin algoritmul backtracking-Armijo) Fie

f:Rn→R o funcţie de clasă C2 având hessiana Hf Lipschitz continuă şi fie x0∈ Rn.

Se construieşte şirul definit prin

xk+1 = xk – tkHf(xk)-1∇f(xk), k≥0

unde tk este pasul de deplasare asociat direcţiei vk = - Hf(xk)-1∇f(xk). Presupunem

în plus, că pentru fiecare k, Hf(xk) este pozitiv definită şi că pasul tk este obţinut

aplicând algoritmul backtracking-Armijo cu tinit = 1 şi δ < 1

2. Dacă şirul (xk)k

converge la un punct x pentru care Hf( x ) este pozitiv definită, atunci

1. există k0 astfel încât tk = 1 pentru orice k ≥ k0.

2. rata de convergenţă a lui (xk)k la x este pătratică

Page 29: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

29

Demonstraţie. Notăm λmin(Hf( x )) cea mai mică valoare proprie a lui

Hf( x ). Datorită faptului că klim

→∞xk = x , există k1 astfel încât pentru orice k ≥ k1 să

avem:

<vk, Hf(xk)vk > ≥ 1

2λmin(Hf( x ))||||vk||2.

şi ca urmare

|<vk, ∇f(xk)>| = -<vk, ∇f(vk)> =

= <vk, Hf(xk)vk >

≥ 1

2λmin(Hf( x ))||vk||2 (32.1)

Pe de altă parte

( )k k

k

v , f x

v

< ∇ =

( )k k

k

v , f x

v

− < ∇ >=

( )k k k

k

v ,Hf x v

v

< > ≥

≥ 1

2λmin(Hf( x ))|| kv || (32.2)

Din (32.1) şi (32.2) rezultă

( )( )k k

k k

k

v , f xmin v , f x ,

v

< ∇ > < ∇ >

≥ ( )( )2k kj j

min

1Hf x min v , v

2

λ

Aplicând teorema 15 obţinem

0 = ( )( )k k

k k

kk

v , f xlim min v , f x ,

v→∞

< ∇ > < ∇ >

de unde rezultă că jlim→∞

kv = 0.

Notăm γ constanta Lipschitz asociată lui Hf . Aplicând formula Taylor, rezultă că

există z = xk + θvk cu θ ∈ (0,1) astfel încât

f(xk + vk) – f(xk) - 1

2<∇f(xk), vk> =

1

2<∇f(xk), vk> +

1

2<Hf(z)vk, vk>

= 1

2<∇f(xk), vk> +

1

2<Hf(xk)vk, vk> +

1

2(<Hf(z)vk, vk> - <Hf(xk)vk, vk>)

= 1

2<∇f(xk) +Hf(xk)vk, vk> +

1

2<(Hf(z)- Hf(xk))vk, vk>

Page 30: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

30

≤ 1

2||Hf(z)- Hf(xk)|| ||vk||2 (am ţinut cont că ∇f(xk) + Hf(xk)vk = 0)

≤ 1

2γ||z- xk|| ||vk||2

=1

2γ||θvk|| ||vk||2

≤1

2γ ||vk||3 (32. 3)

Deoarece klim

→∞

kv = 0, rezultă că există k2 astfel încât pentru orice k ≥ k2 să

avem

γ||vk|| ≤ λmin(Hf( x ))(1-2δ)

Din (32.1) şi (32.3) rezultă că

f(xk + vk) – f(xk) ≤ 1

2<∇f(xk), vk> +

1

2λmin(Hf( x ))(1-2δ)||vk||2 ≤

≤ 1

2<∇f(xk), vk> + (1-2δ)

1

2<vk, Hf(xk)vk >

=1

2<∇f(xk), vk> - (1-2δ)

1

2<vk, ∇f(xk)>

=δ<∇f(xk), vk>

În consecinţă, f(xk + vk) ≤ f(xk) +δ<∇f(xk), vk>, şi deci tk = tinit=1 pentru orice

k≥max(k1, k2). Aşadar pentru orice k ≥ max(k1, k2), termenul xk+1 este definit ca

xk+1 = xk – Hf(xk)-1∇f(xk). Aplicăm mai departe teorema 29.

Următorul rezultat datorat lui Dennis şi More arată că dacă o direcţie

cvasi-Newton vk = -Bk∇f(xk) aproximează direcţia Newton într-un anumit sens,

atunci pasul tk = 1 satisface condiţiile Wolfe:

Teoremă 33. Fie f:Rn→R o funcţie de clasă C2 având hessiana Hf

Lipschitz continuă, fie x0∈ Rn şi fie (Bk)k un şir de matrice din Mn,n(R) pozitiv

definite. Se construieşte şirul definit prin

xk+1 = xk + tkvk, k≥0

Page 31: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

31

unde vk = - 1kB− ∇f(xk) iar pasul de deplasare tk satisface condiţiile Wolfe pentru

orice k≥0. Dacă şirul (xk)k converge la un punct x pentru care ∇f( x ) = 0 şi Hf( x )

este pozitiv definită şi dacă

klim

→∞

( ) ( )k k k

k

f x Hf x v

v

∇ += 0

atunci există k0 astfel încât pentru orice k ≥ k0 pasul tk = 1 satisface condiţiile

Wolfe (iar convergenţa este superliniară, adică

k 1

kk

x xlimsup

x x

+

→∞

− = 0).

O variantă a algoritmului asociat metodei Newton cu pas variabil este

schiţat mai jos (se presupune x0 dat; de asemenea dacă pentru o anumită iteraţie k

matricea Hf(xk) nu este pozitiv definită, atunci se alege drept direcţie de deplasare

vk=-∇f(xk) ):

k: = 0;

cât timp ||∇f(xk)|| ≠0 execută

pasul 1: *se calculează ∇f(xk) şi Hf(xk)

pasul 2: dacă Hf(xk) este pozitiv definită atunci

*se rezolvă sistemul Hf(xk)vk = -∇f(xk) (se recomandă

factorizarea Cholesky a matricei Hf(xk))

altfel vk : =∇f(xk)

pasul 3: *se determină pasul de deplasare tk (optimal sau suboptimal)

asociat direcţiei de deplasare vk;

pasul 4: xk+1 = xk + tkvk ; k: = k+1;

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)|| < ε). Procedura foloseşte comenzi

(vector, grad, hessian, cholesky, etc.) din pachetul linalg. Ca urmare înainte de

utilizarea procedurii acesta 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;

Page 32: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

32

:= 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 x2 1

3x4 x y y2 ( )− + 4 4 y2

Implementare metodei Newton cu pas variabil (pasul de deplasare este generat

prin algoritmul backtracking-Armijo; în situaţia în care hessiana Hf(xk) nu este

pozitiv definită se utilizează drept direcţie de deplasare -∇∇∇∇f(xk)) :

> newton_var:=proc(f,x00,epsilon)

> local x1,x0,g,H,g0,H0,L,y,v,n,p,t,z0,tinit,beta,delta,

pp,md,test;

> n:=vectdim(x00); x0:=vector(n);x1:=vector(n);

> y:=vector(n);v:=vector(n); L:=matrix(n,n);

>beta:=0.5;delta:=0.1;tinit:=1.;

> 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);

> 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)]));test:=1;

> for p from 1 to n do md:=H0[p,p]-sum(L[p,i]^2,i=1..p-1);

>if md<=0 then p:=n+1;test:=0

>else 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;

> if test=1 then 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];

Page 33: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Metode de Optimizare – Curs 13

33

> 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;

>else v:=evalm(-g0) fi;

> 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_var(f1,vector([0,0]),10^(-4));

[ ],0.6000000000 -0.2000000001

> newton_var(f2,vector([1,0]),10^(-4));

[ ],1. 1.000000000

> newton_var(f2,vector([-1,0]),10^(-4));

[ ],0.9999993870 0.9999987218

> newton_var(f4,vector([-0.5,0.2]),10^(-4));

[ ],0.2439499 10-7 0.1 10-18

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_var(f6,vector([1,-1]),10^(-4));

[ ],-0.08984201754 0.7126564383

Număr de iteraţii: 6

Page 34: VII.3. Proceduri de alegere a direc ieiMetode de Optimizare – Curs 13 1 VII.3. Proceduri de alegere a direc ţiei Reamintim c ă metodele c ăutare liniar ă pentru rezolvarea (numeric

Mădălina Roxana Buneci Metode de Optimizare – Curs - 2007

34

> newton_var(f2,vector([0,1]),10^(-4));

[ ],0.9999999666 0.9999999187

Număr de iteraţii: 9