Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
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).
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ă.
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
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ă
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):
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));
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
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;
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
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)]);
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));
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);
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
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.
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 = - ∞
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ă
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:
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
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− + − −∫
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
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 =
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
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
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)]);
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
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
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
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ă
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>
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
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;
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];
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
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