Documente Academic
Documente Profesional
Documente Cultură
113
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
114
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
Altfel spus, comanda optimală este acea funcţie de comandă admisibilă care
minimizează funcţia obiectiv J.
În cazul sistemelor discrete, în care comanda optimală este reprezentată
de un şir de vectori {uˆ k 0 , uˆ k 0 +1 , ! , uˆ kf −1 } aplicat secvenţial la intrarea
115
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
116
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
117
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
-
metodele de căutare aleatoare care includ cele bazate pe algoritmi
genetici, cele de călire simulată (simulated annealing), etc.
Deşi sunt relativ simple şi uşor de implementat, metodele de ordinul
zero nu sunt utilizate în problemele de conducere (decizie) optimală datorită
incapacităţii de explorare a structurii particulare a acestor clase de probleme de
optimizare.
B. Metodele de ordinul I (de căutare liniară). Aceste metode necesită calculul
valorii FO şi al gradientului acesteia în punctul curent vk. Din această categorie
fac parte:
- metodele de gradient,
- metodele de gradient conjugat,
- metodele de metrică variabilă.
Metodele de căutare liniară realizează un compromis favorabil între
simplitate şi eficienţă, fiind utilizate cel mai des în practică.
C. Metodele de ordinul II (de tip Newton). Aceste metode necesită calculul
valorii FO, al gradientului şi hessianului acesteia precum şi inversarea
hessianului în punctul curent vk.
Observaţie: Derivata a doua a unei funcţii reale f de variabilă vectorială
v, calculată în punctul v*, are forma unei matrici pătratice numită matricea lui
Hess (hessian):
∂2 f ∂2 f ∂2 f
"
∂v1
2 ∂v1∂v 2 ∂v1 ∂v n
∂2 f ∂2 f ∂2 f
, v = [v1 ! vn ] .
* " T
f vv ( v ) = ∂v 2 ∂v1 ∂v 22 ∂v 2 ∂v n v2 (9.2.8)
"
2
∂ f ∂2 f ∂2 f
"
∂v n ∂v1 ∂v n ∂v 2 ∂v n2 v = v *
Deşi sunt relativ complicate, metodele de tip Newton asigură o viteză
de convergenţă ridicată şi o precizie ridicată de găsire a punctului de optim, v̂ .
Observaţie: În cele ce urmează vor fi utilizate notaţiile consacrate:
k k +1
f = f ( v k ), f = f ( v k + s k d k ), g k = f v ( v k ), G k = f vv ( v k ) . (9.2.9)
118
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
f ( v k + sˆ k d k ) = min f ( v k + s ⋅ d k ) . (9.3.3)
s ≥0
119
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
8. Se calculează Li = bi – ai.
a i + bi
Dacă Li ≤ ε, atunci se calculează sˆ k = şi algoritmul este terminat.
2
Altfel, se trece la pasul 9.
9. Se calculează ui = ai + F·Li, vi = ai + G·Li, f1(ui), f1(vi).
10. Dacă f1(ui) < f1(vi), atunci se actualizează limitele intervalului de căutare:
ai+1 = ai, bi+1 = vi, apoi se înlocuieşte i cu i + 1 şi se revine la pasul 8.
Altfel, se actualizează limitele intervalului de căutare conform altei
formule: ai+1 = ui, bi+1 = bi, apoi se înlocuieşte i cu i + 1 şi se revine la pasul 8.
Observaţii: 1. La fiecare iteraţie i este de fapt necesară o singură
evaluare a funcţiei f.
2. Urmărind paşii algoritmului, se constată că Li+1 = G·Li, deci lungimea
intervalului scade în progresie aritmetică având raţia G specifică metodei
secţiunii de aur.
A.2. Metode de interpolare. În ipoteza că funcţia f1 este netedă, cele mai
eficiente metode se bazează pe aproximarea lui f1 cu o funcţie f* relativ simplă,
iar minimul acestei funcţii poate fi calculat mai uşor decât minimul lui f1 şi
poate fi utilizat iterativ ca o estimaţie a minimului funcţiei f1. De regulă, f1 este
aleasă o funcţie polinomială de grad mic (doi sau trei), iar metoda de
minimizare este numită metoda interpolării polinomiale (pătratice, respectiv
cubice).
Este preferată interpolarea pătratică atunci când sunt disponibile doar
valorile funcţiei sau atunci când este complicată evaluarea derivatei
direcţionale a funcţiei f1, conform formulei obţinute din (9.3.4):
'
f 1 (s) = f v T ( v k + s ⋅ d k ) ⋅ d k . (9.3.8)
În această situaţie funcţia f* are expresia:
f * ( s) = c 2 s 2 + c1 s + c 0 , c 2 > 0 , (9.3.9)
cu abscisa punctului de minim:
c1
sˆ * = − . (9.3.10)
2c 2
120
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
121
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
122
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
B k +1
n m
|| A || F = ∑ ∑ a ij 2 . (9.3.25)
i =1 j =1
123
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
H k +1 y k = t k . (9.3.30)
Problema principală în implementarea algoritmilor dedicaţi metodelor
cvasi-Newton constă în păstrarea pozitivităţii matricelor Bk sau Hk.
Algoritmul de calcul al punctului de minim v̂ al funcţiei obiectiv f prin metoda
cvasi-Newton cu pas variabil este alcătuit din următorii paşi:
0. Se alege un punct iniţial v0 ∈ Rn.
1. Se iniţializează k = 0.
2. Se calculează g k = f v ( v k ) .
Dacă || g k ||= 0 , atunci vˆ = v k şi algoritmul este oprit.
Altfel, se trece la pasul 3.
3. Se calculează Bk cu una din metodele cunoscute.
Dacă Bk > 0, atunci se trece la pasul 4.
Altfel, se calculează d k = −g k şi urmează salt la pasul 5.
4. Se determină direcţia dk rezolvând sistemul liniar B k d k = −g k .
5. Se determină pasul sk utilizând unul din algoritmii prezentaţi în paragrafele A
sau B.
6. Se calculează v k +1 = v k + s k d k , se actualizează k prin înlocuirea lui k cu k+1
şi se revine la pasul 2.
E. Metodele de gradient. Aceste metode sunt tipic de ordinul I şi sunt
caracterizate prin alegerea în fiecare punct curent vk a unei direcţii de deplasare
dk opusă gradientului local:
d k = −g k . (9.3.31)
Dezvoltând în serie Taylor funcţia f (v k + s k d k ) în vecinătarea
k
punctului v şi reţinând doar termenii de ordinul întâi, se obţine:
f ( v k + s k d k ) ≈ f ( v k ) + (g k ) T s k d k . (9.3.32)
Însă,
(g k ) T s k d k = s k (g k ) T d k ≤ s k || g k || 2 , ∀d k , (9.3.33)
egalitatea având loc numai în cazul (9.3.31). Prin urmare, pentru orice pas sk >
0 alegerea direcţiei de căutare conform relaţiei (9.3.31) asigură local
descreşterea maximă posibilă a funcţiei obiectiv f.
Algoritmul de calcul al punctului de minim v̂ prin metoda
gradientului este prezentat în cele ce urmează:
0. Se alege un punct iniţial v0 ∈ Rn astfel încât mulţimea { v ∈ Rn | f(v) ≤ f(v0) }
să fie mărginită.
1. Se iniţializează k = 0.
2. Se calculează g k = f v ( v k ) .
Dacă || g k ||= 0 , atunci vˆ = v k şi algoritmul este oprit.
Altfel, se alege direcţia d k = −g k şi se trece la pasul 3.
3. Se determină pasul sk utilizând unul din algoritmii din paragrafele A sau B.
4. Se calculează v k +1 = v k + s k d k , se actualizează k prin înlocuirea lui k cu k+1
şi se revine la pasul 2.
F. Metodele de gradient conjugat. Aceste metode au principalul avantaj că au
o convergenţă bună, iar numărul de operaţii aritmetice necesare pe iteraţie este
relativ redus. Prin urmare, aceste metode sunt utilizabile şi în rezolvarea unor
PO de dimensiuni mari.
124
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
125
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
f (v k + s k d k ) ≈ f k
+ s k (g k ) T d k + (1 / 2)(s k ) 2 (d k ) T G k d k . (9.4.1)
Minimul FO f este obţinut dacă următoarea funcţie pătratică îşi atinge minimul
în raport cu direcţia de căutare dk:
Φ : R n → R, Φ(d k ) = s k (g k ) T d k + (1 / 2)( s k ) 2 (d k ) T G k d k . (9.4.2)
Prin anularea gradientului lui Φ în punctul staţionar d k * , se obţine ecuaţia
Newton (a se vedea relaţia (9.3.18)):
s k G k d k * = −g k . (9.4.3)
k
Dacă G este pozitiv definită, atunci minimul funcţiei pătratice Φ este
obţinut într-un singur pas din orice punct de iniţializare. Rezultă, deci, o
convergenţă locală bună a metodei Newton (concentrată pe relaţia (9.4.3)),
fapt pentru care metodele de tip Newton sunt deosebit de atractive. În plus,
datorită disponibilităţii derivatelor de ordinul întâi şi doi, metodele de tip
Newton permit verificarea condiţiilor suficiente de optimalitate.
Cu toate aceste avantaje, metodele de tip Newton în forma lor originală
k
(s = 1) au următoarele dezavantaje:
1. Dacă matricea Gk este singulară, metodele de tip Newton nu sunt
aplicabile. Această situaţie poate apare atunci când f este liniară pe anumite
porţiuni, ceea ce implică Gk = 0.
2. Dacă Gk > 0, este posibil ca direcţia Newton d k * să nu mai fie o
direcţie de descreştere, adică f ( v k + s k d k ) ≥ f ( v k ) . Deci, aproximaţia pătratică
este valabilă doar într-un domeniu limitat.
3. Dacă hessianul Gk este inversabil dar nedefinit, metodele de tip
Newton tind să conveargă atât către minim cât şi către maxime locale.
În cele ce urmează vor fi prezentate două metode care reprezintă
modificări ale metodei Newton originale. Ambele metode asigură o
convergenţă globală şi permit utilizarea unor direcţii de curbură negativă d k în
puncte de tip şa, unde d k = 0 şi Gk este nedefinită; o astfel de direcţie satisface
(9.4.4):
(d k ) T G k d k < 0 (9.4.4)
şi serveşte întotdeauna reducerii valorii lui f în lungul lui d k .
A. Metoda Newton modificată. Această metodă utilizează un hessian modificat
G k > 0 în locul unui hessian nedefinit. Direcţia de căutare poate fi obţinută
prin rezolvarea ecuaţiei (9.4.5):
s k G k d k = −g k , (9.4.5)
a cărei soluţie este o direcţie de descreştere deoarece G k > 0 .
Dacă G k > 0 , atunci se ia G k = G k .
În cazul metodelor de tip Newon lungimea sk a pasului este determinată
cu o metodă de căutare liniară din cadrul celor studiate în paragraful 9.3.
Rezolvarea ecuaţiilor (9.4.5) presupune utilizarea unei factorizări
convenabile care să permită şi verificarea pozitivităţii lui G k . Un exemplu de
astfel de factorizare este factorizarea L D LT modificată care permite
verificarea pozitivităţii lui G k şi formarea matricei:
G k = L D LT = G k + H , (9.4.6)
126
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
127
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
128
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
s ( D k ) 2 (c − A T λ k )
v k +1 = v k − , (9.5.3)
|| D k (c − A T λ k ) ||
unde prin norma matricei a fost notată cea mai mare valoare singulară a
acesteia, vectorul λ k este dat de (9.5.4):
λ k = [ A(Dk ) 2 AT ]−1 A(Dk ) 2 c , (9.5.4)
iar pasul s este ales astfel încât este satisfăcută condiţia:
D k (c − A T λ k )
s = min || k T
|| −α , supusă la (c j − A j T λ k ) > 0, j = 1, n , (9.5.5)
k
j =1, n v j (c j − A j λ )
129
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
130
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
7 1111111000 3
8 0000000001 3
9 1100001000 2
10 1111111111 1
Total: 45
131
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
132
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
133
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
În ipoteza (9.6.5):
f S > f med , (9.6.5)
adică schema S este mai performantă decât media performanţelor populaţiei,
atunci:
m(t + 1) > m(t ) , (9.6.6)
134
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
135
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
136
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
137
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
function fit=fevaluare(v)
% Functie utilizata in definirea
% functiei de evaluare (performanta)
%
% v este variabila (elementul programabil).
%
% fit este valoarea functiei de evaluare.
%
fit=v.^3+3*v.^2;
Pentru a calcula valorile funcţiei de evaluare pentru populaţia iniţială
obţinută anterior şi reprezentată sub formă de numere reale salvate în matricea
valreala, este apelată funcţia fevaluare conform următoarei secvenţe de
comenzi Matlab:
>> fit=fevaluare(valreala)
fit =
96.7298 30.5043 79.1675 43.9525 60.6764
Funcţia de evaluare totală aferentă întregii populaţii are valoarea:
>> sum(fit)
ans =
311.0304
Deci, valoarea cea mai performantă este 3.7778 cu o valoare a funcţiei
de evaluare egală cu 96.7298, care corespunde cromozomului (şirului) 1 al
populaţiei.
Pentru a selecta părinţii noii populaţii este aplicat principiul ruletei,
descris anterior, conform căruia procentajul de selecţie acordat unui anumit
cromozom este direct proporţional cu valoarea funcţiei sale de evaluare. Pentru
vectorul de funcţii de evaluare fit obţinut, calculul procentajului este efectuat
conform următoarei secvenţe de comenzi:
>> procent=fit/sum(fit)*100
procent =
31.0998 9.8075 25.4533 14.1313 19.5082
>> sum(procent)
ans =
100
Prin urmare, şansele de selecţie ca părinţi a cromozomilor 1, 2, 3, 4 şi 5
sunt egale cu procentele 31.0998, 9.8075, 25.4533, 14.1313 şi respectiv
19.5082, acestea fiind procentajele din circumferinţă exterioară a ruletei
corespunzătoare celor 5 cromozomi.
Pentru efectuarea selecţiei părinţilor noii populaţii este dezvoltată mai
întâi funcţia Matlab fitness, destinată calculului valorii funcţiei de evaluare
[P2]:
function [fit,fitsum]=fitness(cromozomi,funceval,a,b)
% Functie utilizata in calculul functiei de
% evaluare (performanta)
% a unei populatii (de cromozomi)
%
% cromozomi este matricea continand populatia
% de cromozomi,
% funceval este numele functiei Matlab
% in care este definita functia de evaluare,
% a si b sunt limitele intervalului caruia
% ii apartin valorile reale ale cromozomilor.
138
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
%
% fit este vectorul cu valorile functiei
% de evaluare pentru cromozomii populatiei,
% fitsum este suma valorilor functiei de
% evaluare, calculata pentru toti cromozomii.
%
[nrcrom lungcrom]=size(cromozomi); % dimensiuni
% populatie
for i=1:nrcrom,
v(i)=fbinreal(cromozomi(i,:),a,b);
fit(i)=feval(funceval,v(i));
end
fitsum=sum(fit);
Apoi este dezvoltată funcţia Matlab fselect, prezentată în continuare,
care implementează selecţia părinţilor noii populaţii (generaţiei următoare)
conform principiului ruletei şi apelează funcţia fitness:
function cromnoi=fselect(cromozomi,funceval,a,b)
% Functie utilizata in selectia celui mai
% bun cromozom pentru generatia urmatoare
%
% cromozomi este matricea continand populatia
% de cromozomi din care se face selectia,
% funceval este numele functiei Matlab
% in care este definita functia de evaluare
% (performanta),
% a si b sunt limitele intervalului caruia
% ii apartin valorile reale ale cromozomilor.
%
% cromnoi este matricea obtinuta continand
% cromozomii generatiei urmatoare.
%
[nrcrom lungcrom]=size(cromozomi); % dimensiuni
% populatie
fit=[ ];
%
% Calculul functiei de evaluare:
[fit,fitsum]=fitness(cromozomi,funceval,a,b);
for cromind=1:nrcrom,
sval(cromind)=sum(fit(1,1:cromind));
end
%
% Selectia conform valorilor functiei de evaluare:
parnume=[ ];
for i=1:nrcrom,
rval=floor(fitsum*rand);
if rval<sval(1),
parnume=[parnume 1];
else
for j=1:nrcrom-1,
sl=sval(j);
su=sval(j)+fit(j+1);
if (rval>=sl) & (rval<=su),
parnume=[parnume j+1];
end
end
139
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
end
end
cromnoi(1:nrcrom,:)=cromozomi(parnume,:);
Aplicând funcţia fselect, este rezolvată selecţia în vederea aplicării
pasului de reproducere şi sunt obţinuţi următorii cromozomi:
>> popselect=fselect(cromozomi,'fevaluare',2,4)
popselect =
1 0 1 1 1 1 (cromozom 3)
1 0 0 1 0 0 (cromozom 5)
1 0 1 1 1 1 (cromozom 3)
1 0 1 1 1 1 (cromozom 3)
1 0 0 1 0 0 (cromozom 5)
Poate fi observat că au fost favorizaţi în procesul de selecţie
cromozomul 3 care a fost triplicat şi cromozomul 5 care a fost duplicat.
Pentru noua populaţie, salvată în matricea popselect, funcţiile de
evaluare obţin următoarele valori:
>> [fit,fitsum]=fitness(popselect,'fevaluare',2,4)
fit =
140
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
u=u-1;
end
%
% Selectia procentajului de reprodus aleator:
while length(indrep)~=u,
i=round(rand*nrcrom);
if i==0,
i=1;
end
if ind(i)~=-1,
indrep=[indrep i];
ind(i)=-1;
end
end
%
% Efectuare incrucisare cu un singur
% punct de incrucisare:
for i=1:2:u-1,
splitpos=floor(rand*lungcrom);
if splitpos==0,
splitpos=1;
end
i1=indrep(i);
i2=indrep(i+1);
genetemp=cromozomi(i1,splitpos+1:lungcrom);
crom1(i1,splitpos+1:lungcrom)=...
cromozomi(i2,splitpos+1:lungcrom);
crom1(i2,splitpos+1:lungcrom)=genetemp;
end
Această funcţie este aplicată populaţiei din matricea popselect,
rezultatul fiind obţinut sub forma noii generaţii salvate în matricea gennoua:
>> gennoua=freprod(popselect,.6)
gennoua =
1 0 1 1 1 1 (cromozom 3)
1 0 0 1 0 1 (cromozom obţinut din
cromozomul 3 şi 5)
1 0 1 1 1 0 (cromozom obţinut din
cromozomul 3 şi 5)
1 0 1 1 1 1 (cromozom 3)
1 0 0 1 0 0 (cromozom 5)
Poate fi observat faptul că noii membri ai populaţiei (cromozomii
succesori) au fost obţinuţi din cromozomii părinţi, 3 şi 5, aplicând încrucişarea
cu un singur punct de încrucişare a = 5.
Valorile funcţiilor de evaluare pentru noua generaţie sunt:
>> [fit,fitsum]=fitness(gennoua,'fevaluare',2,4)
fit =
79.1675 62.2283 77.3545 79.1675 60.6764
fitsum =
358.5942
De data aceasta suma valorilor funcţiei de evaluare nu a mai fost
îmbunătăţită.
În final, este efectuată mutaţia înainte de a repeat acest ciclu de paşi din
cadrul AG. Mutaţia este implementată în funcţia Matlab fmutatie:
141
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
function crom1=fmutatie(cromozomi,rata)
% Functie utilizata in mutatia unei
% populatii (de cromozomi) cu o anumita rata
%
% cromozomi este matricea continand populatia
% de cromozomi supusa mutatiei,
% rata este rata (probabilitatea) mutatiei,
%
% crom1 este matricea obtinuta continand
% populatia de cromozomi ca rezulta al
% mutatiei.
%
[nrcrom lungcrom]=size(cromozomi); % dimensiuni
% populatie
crom1=cromozomi;
for i=1:nrcrom,
for j=1:lungcrom,
if rand<=rata,
if cromozomi(i,j)==1,
crom1(i,j)=0;
else
crom1(i,j)=1;
end
end
end
end
Aplicând această funcţie cu o valoare foarte mică a ratei de mutaţie,
şansele de modificare a populaţiei într-o singură generaţie vor fi foarte mici.
Acest lucru este ilustrat în continuare, pentru o rată de mutaţie de 0.005:
>> gen2=fmutatie(gennoua,.005)
gen2 =
1 0 1 1 1 1
1 0 0 1 0 1
1 0 1 1 1 0
1 0 1 1 1 1
1 0 0 1 0 0
Poate fi observat că nu a avut loc nici-o mutaţie, obţinându-se aceeaşi
populaţie, salvată în matricea gen2.
Trebuie menţionat că în pasul de reproducere pot fi aplicaţi toţi
operatorii genetici.
La acest moment s-a încheiat producerea unei noi generaţii. Apoi,
urmărind paşii AG, aceleaşi procese de selecţie şi reproducere (utilizând
operatorii genetici) vor fi repetate construindu-se noi generaţii până la
epuizarea timpului de căutare a soluţiei optimale.
Pentru implementarea unui AG este dezvoltată funcţia falggen
prezentată în continuare, care înglobează toţi paşii AG apelând funcţiile Matlab
prezentate anterior în vederea rezolvării unei probleme de maximizare:
function [valv,fmax]=falggen(fun,domeniu,biti,...
dimpop,numgenera,rata,propor)
% Functie utilizata in determinarea maximului
% unei functii utilizand algoritmi genetici
%
% fun este functia Matlab definita de utilizator
% continand expresia functiei obiectiv, functie
142
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
143
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
valv =
3.9059
fmax =
105.3556
Întrucât soluţia exactă a PO este vˆ = 4 , rezultatul obţinut este rezonabil.
Observaţie: Fiecare nouă rulare a funcţiei falggen, care implementează
un AG utilizat în rezolvarea aceleiaşi PO, poate genera rezultate diferite
datorită naturii aleatoare a procesului de aplicare a operatorilor genetici.
În concluzie, deşi sunt relativ lenţi în execuţie, algoritmii genetici pot fi
aplicaţi în rezolvarea unor PO dificile cum sunt cele care au mai multe puncte
de extreme sau cele în care este cerut un punct de optim global. Întrucât
algoritmii care implementează metodele numerice standard în rezolvarea
acestor probleme de optimizare pot conduce la eşec, timpul mai lung de
execuţie al AG este pe deplin compensat în astfel de situaţii.
Funcţiile prezentate pot fi implementate şi în alte variante. Astfel, de
exemplu, poate fi utilizată încrucişarea cu mai multe puncte de încrucişare, sau
selecţia bazată pe principiul ruletei poate fi implementată în manieră diferită
faţă de cea prezentată. De asemenea, pot fi utilizate toolbox-uri Matlab
specializate în implementarea AG pentru rezolvarea PO şi nu numai cum sunt
GAOT ori FLEXGA.
144
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
145
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
options=optimset('Display','off','TolX',.00005);
pas=fminbnd(f1,-10,10,options);
% Calculul noii valori a lui v:
v1=v+pas*d1;
% Salvarea gradientului anterior:
aaa=df;
dfa=aaa';
% Calculul noului gradient:
aaa=feval(gradf,v1);
df=aaa';
% 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
146
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
end
%
% Solutia:
sol=v1; % valoarea optimala a variabilei v
% Numarul de iteratii este in variabila nriter
gradi=df; % gradientul functiei obiectiv in punctual
% v optimal
disp('Numarul de iteratii='); disp(nriter);
disp('Solutia optimala='); disp(v1);
disp('Gradientul in solutia optimala='); disp(df);
Observaţii: 1. Funcţia fmincg necesită definirea de către utilizator a trei
funcţii Matlab.
2. În cadrul acestei funcţii a fost utilizată funcţia Matlab fminbnd
pentru rezolvarea problemei de optimizare unidimensională având ca soluţie
valoarea optimală a pasului de căutare. Această funcţie este însoţită de funcţia
Matlab optimset, prezentată anterior, prin care sunt stabilite valorile unor
parametri aferenţi funcţiei fminbnd.
3. În cazul problemelor de optimizare la care funcţia obiectiv este
complicată trebuie modificată corespunzător funcţia de căutare liniară a pasului
optimal.
Funcţia fmincg va fi aplicată în cele ce urmează în cadrul exemplului
9.1.
Exemplul 9.1: Să se rezolve prin metoda gradientului conjugat în
versiunea Fletcher-Reeves următoarea PO [P2]:
4 2 4 2
v1 − 16v1 + 5v1 v 2 − 16v 2 + 5v 2
PFR : vˆ = arg min J = f ( v ) = + ,
v 2 2
v = [v1 v 2 ]T ∈ R 2 .
Soluţie: Pentru început, este creat un fişier funcţie, cu numele f91.m,
pentru definirea FO:
function f=f91(v)
% Expresia functiei obiectiv:
%
f=0.5*(v(1)^4-16*v(1)^2+5*v(1))+...
0.5*(v(2)^4-16*v(2)^2+5*v(2));
Apoi, este creat fişierul funcţie gradf91.m, destinat definirii
gradientului funcţiei 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 fişier funcţie, numele fişierului
fiind f191.m, pentru definirea funcţiei de căutare liniară utilizată în obţinerea
valorii optimale a pasului de căutare:
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);
147
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
148
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
fractie(i)=reznorm/(v(i)*...
(cp(i)-A(:,i)'*lambda));
else
fractie(i)=inf;
end
end
pas=min(fractie)-alpha;
v1=v-pas*D2*rezdual/reznorm;
v=v1; contlista=0; B=[]; lista=[]; cb=[];
for k=1:n,
if v(k)>eps,
contlista=contlista+1;
lista=[lista k];
end
end
%
% Urmeaza partea doar pentru probleme
% nedegenerate:
if contlista==m,
for k=lista,
B=[B A(:,k)]; cb=[cb cp(k)];
end
solprimal=b'/B'; solv=solprimal;
break
end
iter=iter+1;
end
solf=cp*v;
i=1; fprintf('\nSolutia optimala=');
for j=lista,
fprintf('\nv(%1.0f)=%8.4f\',j,solv(i));
i=i+1;
end
fprintf('\nCelelalte variabile sunt ...
nule\n');
disp('Numarul de iteratii='); disp(iter);
disp('Valoarea minima a functiei obiectiv=');
disp(solf);
Funcţia fbarnes va fi aplicată în continuare în cadrul exemplului 9.2.
Exemplul 9.2: Să se rezolve prin metoda lui metoda lui Karmakar în
varianta lui Barnes următoarea problemă de programare liniară [P2]:
PREI : vˆ = arg max J = f ( v ) = 2v1 + v 2 + 4v 3 , v = [v1 v2 v 3 ]T ∈ R 3 ,
v
supusă la:
v1 + v 2 + v 3 ≤ 7 ,
v1 + 2v 2 + 3v3 ≤ 12 ,
v1 , v 2 , v 3 ≥ 0 .
Soluţie: Pentru început, problema trebuie adusă la formularea din
varianta standard (9.5.1). În acest scop sunt introduse două variabile pozitive v4
şi v5, numite variabile slabe (variabile suplimentare), care sunt adunate în
membrii stângi ai celor două RTI, câte o variabilă slabă pentru fiecare RTI.
Acest lucru va transforma cele două RTI în RTE.
În plus, trebuie schimbate semnele coeficienţilor din FO pentru
schimbarea problemei de maximizare într-una de minimizare. Rezultă varianta
standard a problemei de programare liniară:
149
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare
150