Documente Academic
Documente Profesional
Documente Cultură
-Tema de casa-
Introducere
Metodele de optimizare sunt n general metode de descretere, ce
determin minimul unei funcii U de n variabile reale care se numete funcie
scop sau funcie obiectiv. De aici i denumirea lor de metode de minimizare a
funciilor de mai multe variabile. Evident, problema gsirii maximului revine la
minimizarea funciei cu semn schimbat. Metodele de descretere au
convergena global, adic permit gsirea soluiei chiar dac punctul de plecare
este ndeprtat de soluie.
Metodele de optimizare au un domeniu de aplicabilitate foarte larg. Pe de
o parte, majoritatea fenomenelor naturii sau economice reprezint
compromisuri ntre cauze contradictorii, i ca atare multe din problemele
ingineriei, economiei, matematicii, statisticii, medicinei, dar mai cu seam
procesele decizionale se pot formula ca probleme de optimizare. Pe de alt
parte, majoritatea metodelor numerice pot fi reformulate ca probleme de
optimizare. Aceste reformulri duc uneori la obinerea unor metode
performante, cum ar fi cele pentru rezolvarea sistemelor de ecuaii liniare, i
cele pentru rezolvarea sistemelor de ecuaii neliniare
Metodele de gradient conjugat reprezint o contribuie important n
panoplia metodelor de optimizare fr restricii de mari dimensiuni. Algoritmii
asociai acestor metode sunt caracterizai de cerine modeste de memorie i au
proprieti foarte bune de convergen global. Popularitatea lor este datorat n
parte simplitii expresiei lor algebrice, implementrii foarte rapide i uoare n
programe de calcul, precum i eficienei lor n rezolvarea problemelor cu un
numr mare de variabile.
Metodele de gradient conjugat au fost proiectate de Magnus Hestenes
(1906-1991) i Eduard Stiefel (1909-1978) n lucrarea Methods of conjugate
gradients for solving linear systems, J. Research Nat. Bur. Standards Sec. B. 48,
409-436 (1952) n care au prezentat un algoritm pentru rezolvarea sistemelor
algebrice liniare, cu matricea simetric i pozitiv definit. n 1964, metoda a
fost extins de Fletcher i Reeves la probleme de optimizare neliniar fr
restricii. De atunci, un numr foarte mare de algoritmi de gradient conjugat au
fost elaborai. Chiar dac algoritmii de gradient conjugat au peste 50 de ani de
existen, totui acetia continu s fie de un considerabil interes n particular
datorit proprietilor lor de convergen i eficienei n rezolvarea problemelor
de optimizare de mari dimensiuni.
Consideraii teoretice
Metodele de gradient.
Aceste metode sunt tipic de ordinul I i sunt caracterizate prin
alegerea n fiecare punct curent vk a unei direcii de deplasare dk opus
gradientului local:
dk = -gk
(1)
k
k k
Dezvoltnd n serie Taylor funcia f v s d n vecintatea
punctului vk i reinnd doar termenii de ordinul nti, se obine:
f vk s k d k f vk g k s k d k
(2)
ns,
k T
s k d k s k g k d k s k g k , d k
(3)
egalitatea avnd loc numai n cazul (1). Prin urmare, pentru orice pas s k >0
alegerea direciei de cutare conform relaiei (1) asigur local
descreterea maxim posibil a funciei obiectiv f.
minim v prin
metoda
n
0
0
n
1. Se iniializeaz k = 0.
2. Se calculeaz gk = f v (vk ) .
3. Se determin pasul sk .
4. Se calculeaz vk+1 = vk + sk dk , se actualizeaz k prin nlocuirea lui k cu k+1
i se revine la pasul 2.
(4)
cu d0 = - g0, iar parametrul scalar k este specific metodei i contribuie la
accelerarea vitezei de convergen.
Parametrul k are urmtoarele expresii posibile care conduc la diverse
variante de metode de gradient conjugat:
k T
gk
g g g
g g
k 1 T
k T
g k 1
k 1
k 1 T
k 1
g g g
g g d
k T
k 1 T
k 1
k 1
0
Dac || g || = 0 , atunci v v i algoritmul este oprit.
k
3. Se determin pasul optimal s s
k 1
% Actualizare v si d:
aaa=d1;
d=aaa';
v=v1;
% Formula specifica metodei Fletcher-Reeves:
betta=(df'*df)/(dfa'*dfa);
d1=-df+betta*d;
end
% Solutia:
sol=v1; % valoarea optimala a variabilei v
% Numarul de iteratii este in variabila nriter
gradi=df; % gradientul functiei obiectiv in punctul v optimal
disp('Numarul de iteratii='); disp(nriter);
disp('Solutia optimala='); disp(v1);
disp('Gradientul in solutia optimala='); disp(df);
Observaii:
1. Funcia fmincg necesit definirea de ctre utilizator a trei funcii Matlab.
2. n cadrul acestei funcii a fost utilizat funcia Matlab fminbnd pentru
rezolvarea problemei de optimizare unidimensional avnd ca soluie valoarea
optimal a pasului de cutare. Aceast funcie este nsoit de funcia Matlab
optimset, prezentat, prin care sunt stabilite valorile unor parametri afereni
funciei fminbnd.
3. n cazul problemelor de optimizare la care funcia obiectiv este complicat
trebuie modificat corespunztor funcia de cutare liniar a pasului
optimal.
2
2
v v1v2 R 2
T
Soluie:
--Pentru nceput, este creat un fiier funcie, cu numele f91.m, pentru definirea
funciei obiectiv:
****************************************************************
**********
function f=f91(v)
% Expresia functiei obiectiv:
f=0.5*(v(1)^4-16*v(1)^2+5*v(1))+0.5*(v(2)^416*v(2)^2+5*v(2));
****************************************************************
**********
--Apoi, este creat fiierul funcie gradf91.m, destinat definirii gradientului
funciei obiectiv:
****************************************************************
**********
function gradf=gradf91(v)
% Expresia gradientului functiei obiectiv:
gradf=zeros(size(v));
gradf(1)=0.5*(4*v(1)^3-32*v(1)+5);
gradf(2)=0.5*(4*v(2)^3-32*v(2)+5);
****************************************************************
**********
--n continuare este creat i al treilea fiier funcie, numele fiierului fiind
f191.m, pentru definirea funciei de cutare liniar utilizat n obinerea valorii
optimale a pasului de cutare:
****************************************************************
**********
function pasn=f191(pas)
% Expresia functiei de cautare liniara utilizata in obtinerea valorii optimale a
pasului de cautare:
global p1 d1;
q1=p1+pas*d1;
pasn=feval('f91',q1);
****************************************************************
**********
--n final, este executat urmtoarea secven de program Matlab care apeleaz
funcia fmingc, rezultatele fiind prezentate imediat:
global p1 d1;
v0=[.6 .6];
x1=fmingc('f91','gradf91','f191',v0,.000005);
Rezultatul este afiat:
>> Numarul de iteratii=
2
Solutia optimala=
-2.9035
-2.9035
Gradientul in solutia optimala=
1.0e-006 *
-0.3815
-0.3815
P0 P1 P2 P3 x
P0
P1
P2
P3
Comunicarea colectiv
Operaiile colective implic un grup de procese. Pentru execuie, operaia
colectiv trebuie apelat de toate procesele, cu argumente corespondente.
de
timeN=toc;
fprintf('Time for %d threads = %3.3f sec\n', numThreads, timeN);
% Setarea parametrilor
numRuns = 10;
% Numarul de rulari medii
dataSize = 500;
% Marimea datelor de test
x=rand(dataSize,dataSize); % Matrice aleatoare patratica
% Inmultirea matricilor (*)
func=1; % Initializarea functiei counter
tic;
for i = 1:numRuns
y=x*x;
% Apelarea functiei
end
meanTime(func)=toc/numRuns; % Imparte timpul cu numarul de rulari
names{func}='inmult.';
% Memoreaza string care descrie functia
func=func+1;
% Incrementeaza functia counter
% Impartirea matricilor (\)
tic;
for i = 1:numRuns
y=x\x(:,1);
% Apelarea functiei
end
meanTime(func)=toc/numRuns; % Imparte timpul cu numarul de rulari
names{func}='impart.';
% Memoreaza string care descrie functia
func=func+1;
% Incrementeaza functia counter
% Functia sinus cu argumentul in radiani
tic;
for i = 1:numRuns
y=sin(x);
% Apelarea functiei
end
meanTime(func)=toc/numRuns; % Imparte timpul cu numarul de rulari
names{func}='sinus';
% Memoreaza string care descrie functia
func=func+1;
% Incrementeaza functia counter
% Ridicarea la putere a elementelor unui vector/matrice
tic;
for i = 1:numRuns
y=x.^x;
% Apelarea functiei
end
meanTime(func)=toc/numRuns; % Imparte timpul cu numarul de rulari
names{func}='.^';
% Memoreaza string care descrie functia
func=func+1;
% radacina patratica
for i = 1:numRuns
y=sqrt(x);
% Apelarea functiei
end
meanTime(func)=toc/numRuns; % Imparte timpul cu numarul de rulari
names{func}='sqrt';
% Memoreaza string care descrie functia
func=func+1;
% Incrementeaza functia counter
% Inmultirea element cu element (.*)
tic;
for i = 1:numRuns
y=x.*x;
% Apelarea functiei
end
meanTime(func)=toc/numRuns; % Imparte timpul cu numarul de rulari
names{func}='.*';
% Memoreaza string care descrie functia
func=func+1;
% Incrementeaza functia counter
****************************************************************
**********
Apelm funcia. Setm numrul de threads i timpul.
maxNumCompThreads(1);
% Setarea numarului de threads
[time1thread functionNames]=runAndTimeOps; % Timpii operatiunilor
Setm numrul de threads la numThreads i timpul din nou:
maxNumCompThreads(numThreads);
% Setarea numarului de threads
[timeNthreads functionNames]=runAndTimeOps; % Timpii operatiunilor
Restabilim numrul de threads avute nainte de rularea exemplului:
maxNumCompThreads(oldstate);%reinitializeaza numarul de calcule cu
valorile precedente
Calculm nbuntirile de performan:
speedup=time1thread./timeNthreads;
Concluzie
De mai bine de 50 de ani, algoritmii de gradient conjugat au fost obiectul unor
cercetri i analize teoretice i computaionale intensive. i n prezent, aceti
algoritmi continu s reprezinte o component important a metodelor de
optimizare fr restricii, dovedindu-i caracterul lor de inepuizabilitate. n
aceast lucrare, am prezentat cteva probleme deschise, care constituie subiecte
de meditaie i cercetare pentru proiectarea i implementarea n programe de
calcul de noi algoritmi eficieni de gradient conjugat.