Documente Academic
Documente Profesional
Documente Cultură
Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE
OPTIMIZARE
9.1. Definirea unei probleme de optimizare
În sens larg, optimizare înseamnă [D5], [I1] acțiunea de
stabilire, pe baza unui criteriu prestabilit, a celei mai bune decizii într‐
o situație dată când sunt posibile mai multe decizii, precum şi
acțiunea de implementare a deciziei stabilite precum şi a rezultatului
acesteia. În sens restrâns, optimizare înseamnă doar acțiunea de
stabilire a celei mai bune decizii (soluții), numite decizie optimală
(soluție optimală).
Enunțul unei probleme de optimizare (PO) în sens restrâns
trebuie să conțină două elemente:
A) modelul mediului la care se referă situația dată,
B) criteriul de optimizare.
Rezolvarea unei PO presupune existența unui al treilea element, şi
anume:
C) metoda de optimizare.
În cele ce urmează vor fi făcute referiri la aceste trei elemente cu
particularizări referitoare la optimizarea sistemelor dinamice.
A) Modelul mediului. Modelul mediului caracterizează procesul
cauzal din cadrul mediului la care se referă PO şi reprezintă elementul
pe baza căruia sunt estimate efectele diferitelor decizii care pot fi
luate în considerare.
Modelul mediului conține patru categorii de relații:
1) Ecuațiile procesului la care se referă PO, în diferite forme
exprimate ca modele matematice ale proceselor. În cadrul acestora
apar trei tipuri de mărimi:
a) Variabile în timp:
‐ de intrare (comandă), u ∈ U ⊆ Rm,
‐ de stare, x ∈ X ⊆ Rn,
‐ de ieşire, y ∈ Y ⊆ Rp.
b) Variabila independentă timp:
t ∈ T0f ⊆ R – pentru sisteme cu timp continuu (SC);
t ∈ T0f = {tk0, tk0+1, …, tkf} = {tk | k = k0, …, kf ⊂ Z} ⊂ R
– pentru sisteme cu timp discret (SD).
160
Rezolvarea numerică a problemelor de optimizare
161
Rezolvarea numerică a problemelor de optimizare
162
Rezolvarea numerică a problemelor de optimizare
tf
163
Rezolvarea numerică a problemelor de optimizare
164
Rezolvarea numerică a problemelor de optimizare
165
Rezolvarea numerică a problemelor de optimizare
v k ← v k + s k d k , k = k + 1 şi se trece la etapa 1.
Pentru convergența algoritmului către un minim local v* al
funcției obiectiv f trebuie impuse condiții atât asupra lui f cât şi
asupra alegerii lui dk şi sk. Condițiile impuse funcției obiectiv sunt:
a) f este de clasă C2 (de două ori continuu diferențiabilă),
b) mulțimea { v0 ∈ Rn | f(v) ≤ f(v0) } este închisă şi mărginită.
Referitor la alegerea lui dk şi sk, trebuie satisfăcută condiția
(9.2.5). În plus, trebuie asigurată la fiecare iterație o „descreştere
suficientă” a lui f, iar dk nu trebuie să fie ortogonală pe gradientul
fv(vk). În aceste condiții, gradienții obținuți la iterațiile procedurii
satisfac condiția:
lim || f
k →∞
v ( v k ) ||= 0 . (9.2.6)
166
Rezolvarea numerică a problemelor de optimizare
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 ⎤
⎢ L ⎥
⎢ ∂v1
2 ∂v1 ∂v 2 ∂v1 ∂v n ⎥
⎢ ∂ f2
∂2 f ∂2 f ⎥
⎢ ⎥
, v = [v1 K v n ]T .
* L
f vv ( v ) = ⎢ ∂v 2 ∂v1 ∂v 22 ∂v 2 ∂v n ⎥ v2
⎢ L ⎥
⎢ 2 ⎥
⎢ ∂ f ∂2 f ∂2 f ⎥
L
⎢ ∂v n ∂v1 ∂v n ∂v 2 ∂v n2 ⎥⎦ v = v*
⎣
(9.2.8)
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:
f k
= f ( v k ), f k +1 = f ( v k + s k d k ), g k = f v ( v k ), G k = f vv ( v k ) .
(9.2.8)
167
Rezolvarea numerică a problemelor de optimizare
168
Rezolvarea numerică a problemelor de optimizare
- metoda şirului lui Fibonacci – asigură realizarea unei lungimi
minime Li a intervalului în care se află ŝ k pentru fiecare i dat.
În continuare va fi prezentată metoda secțiunii de aur, care
asigură avantajele de precizie satisfăcătoare, simplitate şi stabilitate
în raport cu erorile de rotunjire.
Se presupune că funcția f1 este convexă. Algoritmul metodei
secțiunii de aur construieşte într‐un număr finit de paşi un interval
(de lungime cel mult egală cu ε) care conține punctul de minim ŝ k .
Pornind de la o aproximație inițială de forma [0, c], în etapele 1 – 6
este determinat un interval inițial [a 0 , b0 ] care conține pe ŝ k . Apoi
acest interval este contractat progresiv până la satisfacerea condiției
de precizie Li ≤ ε, unde Li reprezintă lungimea intervalului [ai, bi], Li =
bi – ai, care conține pe ŝ k . În final este obținut punctul de minim ca
medie aritmetică a limitelor intervalului de căutare:
a i + bi
sˆ k = s = . (9.3.6)
2
Considerând că sunt date numerele c > 0 şi ε > 0 şi definind:
3− 5 −1+ 5
F= , G = 1− F = , (9.3.7)
2 2
algoritmul metodei secțiunii de aur constă în următorii paşi:
1. Se calculează f1(c).
2. Dacă f1(c) ≥ 0, atunci a0 = 0, b0 = 0 şi urmează salt la pasul 7.
3. Se inițializează j = 1, d1 = c.
4. Se calculează dj+1 = dj + c.
5. Se calculează f1(dj+1).
6. Dacă f1(dj+1) ≥ f1(dj), atunci se inițializează limitele actuale ale
intervalului de căutare a0 = dj, b0 = dj+1 şi urmează salt la pasul 7.
Altfel, se înlocuieşte j cu j + 1 şi se revine la pasul 4.
7. Se inițializează i = 0.
8. Se calculează Li = bi – ai.
a i + bi
Dacă Li ≤ ε, atunci se calculează sˆ k = şi algoritmul este
2
terminat.
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.
169
Rezolvarea numerică a problemelor de optimizare
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):
' T
f 1 ( s ) = f v ( 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
Pentru determinarea coeficienților din (9.3.9) sunt necesare
trei valori calculate pentru abscisele sk, sk−1 şi sk−2, astfel că expresia
explicită a minimului devine:
sˆ * = { f * ( s k − 2 )[( s k ) 2 − ( s k −1 ) 2 ] + f * ( s k −1 )[( s k − 2 ) 2 − ( s k ) 2 ] +
+ f * ( s k )[( s k −1 ) 2 − ( s k − 2 ) 2 ]} /{ f * ( s k − 2 )( s k − s k −1 ) +
+ f * ( s k −1 )( s k − 2 − s k ) + f * ( s k )( s k −1 − s k − 2 )}.
(9.3.11)
Această valoare va fi considerată ca o nouă aproximare, sk+1, a
minimului funcției f1 şi algoritmul este repetat până la convergență.
170
Rezolvarea numerică a problemelor de optimizare
171
Rezolvarea numerică a problemelor de optimizare
T
3. Dacă f v ( v k + s k d k ) ⋅ d k > 0 , atunci se determină o nouă
valoare a lui sk utilizând, de exemplu, interpolarea cubică şi urmează
salt la pasul 2.
Altfel, se trece la pasul 4.
T
4. Cazul f v ( v k + s k d k ) ⋅ d k < 0 .
Se înlocuieşte v k cu ( v k + s k d k ) şi se actualizează valoarea lui sk cu
o formulă de extrapolare, prin înlocuire cu c∙sk, în care 2 < c < 10.
Urmează salt la pasul 2.
5. Dacă valoarea curentă sk satisface (9.3.13), atunci sˆ k = s k şi
algoritmul este terminat.
Observații: 1. În algoritmul prezentat sunt repetate
intepolarea şi extrapolarea până la satisfacerea simultană a ambelor
condiții, (9.3.12) şi (9.3.13).
2. O alegere a unei valori mici pentru μ (de exemplu, μ = 10−4)
conduce în majoritatea cazurilor la satisfacerea condiției (9.3.13)
atunci când (9.3.12) este deja satisfăcută.
C. Metoda Armijo. Această metodă se bazează în principal pe
condiția de descreştere suficientă exprimată sub forma relației
(9.3.13), echivalentă cu:
k +1
f − f k ≤ µ ⋅ s k (g k ) T d k . (9.3.15)
Condiția (9.3.15) poate fi interpretată grafic (fig.9.1) prin
necesitatea ca în planul <s, f> diferența f k +1 − f k (notată cu (1)) să
fie situată sub dreapta de ecuație f = µ ⋅ s k (g k ) T d k (notată cu (2)).
În fig.9.1 au fost marcate mulțimile de valori acceptabile pentru sk.
Algoritmul metodei Armijo constă în paşii prezentați în
continuare:
1. Se efectuează inițializarea: sk = s > 0. Se alege β, 0 < β < 1.
2. Dacă valoarea curentă a lui sk satisface (9.3.13), atunci sˆ k = s k şi
algoritmul este terminat.
Altfel, se trece la pasul 3.
3. Se actualizează valoarea lui sk prin înlocuire cu β∙sk şi urmează salt
la pasul 2.
172
Rezolvarea numerică a problemelor de optimizare
Fig.9.1. Punerea problemei în cazul metodei Armijo.
D. Metodele cvasi‐Newton. Prin dezvoltarea în serie Taylor a funcției
f ( v k + s k d k ) în vecinătarea punctului v k şi reținerea doar a
termenilor de ordinul întâi şi doi, rezultă:
f ( v k + s k d k ) ≈ f k + (g k ) T s k d k + (1 / 2)( s k d k ) T G k ( s k d k ) =
= f k + (g k ) T s k d k + (1 / 2)( s k ) 2 (d k ) T G k d k .
(9.3.16)
Minimul expresiei (9.3.16) poate fi obținut dacă următoarea
funcție de variabilă independentă dk (direcția de căutare):
Φ : R n → R, Φ (d k ) = (g k ) T s k d k + (1 / 2)( s k ) 2 (d k ) T G k d k ,
(9.3.17)
îşi atinge minimul. Anulând gradientul lui Φ, se obține punctul
staționar d k * care satisface următorul sistem de ecuații liniare:
Φ d k * (d k * ) = s k g k + ( s k ) 2 G k d k * = 0 ⇒ s k G k d k * = −g k .
(9.3.18)
În acest context, o metodă de minimizare cu direcția de căutare
optimală d k * definită de (9.3.18) este numită metodă Newton,
soluția d k * este numită direcție Newton, iar sistemul de ecuații
liniare (9.3.18) este numit ecuație Newton.
Metodele cvasi‐Newton construiesc iterativ o aproximare Bk,
pozitiv definită, cu notația Bk > 0, a matricei hessian Gk, fără a calcula
explicit pe Gk. Direcția de căutare d k este determinată ca soluție a
unui sistem analog lui (9.3.18):
s k B k d k = −g k , (9.3.19)
în care pasul de căutare sk este determinat cu una din metodele de
căutare liniară descrise la punctele A, B şi C.
173
Rezolvarea numerică a problemelor de optimizare
Se introduce notația:
k +1
t =vk
− v k = s k d k , (9.3.20)
k
pentru vectorul care exprimă modificarea în v la iterația k. Pentru
modificări mici în vk poate fi scrisă următoarea relație aproximativă:
f v ( v k +1 ) − f v ( v k ) ≈ f vv ( v k +1 )( v k +1 − v k ) . (9.3.21)
Notând:
y k = f v ( v k +1 ) − f v ( v k ) = g k +1 − g k (9.3.22)
k+1
şi ținând seama de faptul că B este o aproximație pentru hessianul
f vv ( v k +1 ) , relația (9.3.21) se transformă în ecuația cvasi‐Newton:
n m
∑∑a
2
|| A || F = ij . (9.3.25)
i =1 j =1
ˆ k +1 este dată de formula Powell‐simetrică‐Broyden:
Atunci B
1
Bˆ k +1 = B k + k T k
[(y k − B k t k )(t k ) T + t k (y k − B k t k ) T ] −
(t ) t
(y k − B k t k ) T t k k k T
− t (t ) .
[(t k ) T t k ] 2
(9.3.26)
Prin utilizarea unor alte variante de norme Frobenius
ponderate rezultă două formule cunoscute:
‐ formula Davidon‐Fletcher‐Powell:
174
Rezolvarea numerică a problemelor de optimizare
1
Bˆ k +1 = B k + [(y k − B k t k )(y k ) T + y k (y k − B k t k ) T ] −
k T
k
(y ) t
;
(y k − B k t k ) T t k k k T
− y (y ) ;
[(y k ) T t k ] 2
(9.3.27)
‐ formula Broyden‐Fletcher‐Goldfarb‐Shanno:
1 1
Bˆ k +1 = B k + T kk
y k (y k ) T − k T k k B k t k (t k ) T B k ;
(y ) t (t ) B t
(9.3.28)
ambele au proprietatea că dacă B > 0 şi (y ) t k > 0 , atunci
k k T
Bˆ k +1 > 0 .
Determinarea direcției de căutare dk presupune rezolvarea
unui sistem de ecuații liniare la fiecare iterație. De aceea, primele
versiuni ale metodelor cvasi‐Newton au fost formulate în funcție de
inversa hessianului, Hk = (Gk)−1. În aceste condiții, direcția de căutare
este obținută prin rescrierea ecuației (9.3.18):
d k = −( s k ) −1 H k g k , (9.3.29)
iar condiția cvasi‐Newton (9.3.23) devine:
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.
175
Rezolvarea numerică a problemelor de optimizare
176
Rezolvarea numerică a problemelor de optimizare
177
Rezolvarea numerică a problemelor de optimizare
Apoi, se actualizează k prin înlocuirea lui k cu k+1 şi se revine la pasul
3.
Metoda gradientului conjugat poate fi folosită şi în rezolvarea
sistemelor de ecuații liniare (de exemplu, [P2]).
178
Rezolvarea numerică a problemelor de optimizare
179
Rezolvarea numerică a problemelor de optimizare
9.5. Rezolvarea numerică a problemelor de programare liniară
Problemele de programare liniară sunt probleme de
optimizare cu restricții de tip egalitate şi de tip inegalitate (probleme
cu restricții de tip egalitate şi de tip inegalitate, PREI), cu aplicații în
multe domenii şi considerate ca parte a problemelor de cercetare
180
Rezolvarea numerică a problemelor de optimizare
c = [c1
T
c2 ... c n ] .
Observații: 1. Denumirea de liniară acordată problemei de
optimizare este datorată faptului că FO este liniară şi restricțiile de tip
egalitate reprezintă un sistem de ecuații liniare.
2. Importanța PO (9.5.1) rezidă în faptul că ea corespunde
scopului general de optimizare a utilizării unor resurse rare în
condițiile îndeplinirii unui anumit obiectiv.
3. În afară de forma standard a problemei de programare
liniară, în practică sunt întâlnite şi alte forme care pot fi aduse la
forma (9.5.1) fără dificultăți majore. De exemplu, dacă restricțiile
sunt doar de tip inegalitate într‐o formulare inițială a problemei,
acestea pot fi transformate în restricții de tip egalitate prin adunarea
sau scăderea unor variabile (elemente programabile) suplimentare
aferente problemei. Pe de altă parte, dacă obiectivul este de
maximizare a FO J, atunci PO se transformă într‐o problemă de
minimizare prin schimbarea semnului matricei c.
Toate metodele de rezolvare numerică a problemelor de
programare liniară sunt bazate pe faptul că soluția problemei se află
pe frontiera mulțimii soluțiilor admisibile. Una din cele mai vechi
metode este metoda simplex rezolvată cu algoritmul lui Dantzig (de
exemplu, [P5]), care prezintă dezavantajul creşterii complexității pe
măsura creşterii numărului variabilelor asociate problemei. De
remarcat că pentru un număr de două variabile problemele de
programare liniară pot fi rezolvate convenabil prin metode grafo‐
analitice utilizând interpretări specifice geometriei analitice.
În continuare vor fi prezentate aspecte privind metoda lui
Karmakar în varianta lui Barnes, referită în [P2]. Metoda transformă
problema de optimizare într‐o formă mai convenabilă şi apoi
efectuează căutarea în interiorul mulțimii soluțiilor admisibile
utilizând o direcție de căutare către frontiera acestei regiuni. Întrucât
această metodă utilizează puncte interioare, este des cunoscută sub
181
Rezolvarea numerică a problemelor de optimizare
1. Se inițializează Dk = diag(vk), cu vk = [v1k v2k ... vnk]T, şi se calculează
un punct îmbunătățit (din punctul de vedere al reducerii valorii FO)
cu formula:
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:
λ 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 || || −α ,
j =1, n v j k (c j − A j T λ k )
T
supusă la (c j − A j λ k ) > 0, j = 1, n , (9.5.5)
în care Aj este a j‐a coloană a matricei A şi α este o constantă de
valoare oricât de mică.
Trebuie remarcat faptul că vectorul λ k reprezintă o valoare
aproximativă a soluției problemei duale (descrisă în continuare).
2. Dacă valorile FO obținute prin problema primală şi cea duală sunt
aproximativ egale, atunci vˆ = v k +1 şi algoritmul este oprit.
Altfel, se înlocuieşte k cu k + 1 şi se revine la pasul 1.
182
Rezolvarea numerică a problemelor de optimizare
183
Rezolvarea numerică a problemelor de optimizare
binare pot reprezenta valorile codate ale unei sau unor variabile de
interes.
1100010101
0000100010
1000000001
0001100010
1101110101
0001000100
1111111000
0000000001
1100001000
1111111111
Fig.9.2. Exemplu de populație inițială.
Populația inițială este generată aleator, iar pentru
caracterizarea acesteia poate fi utilizată terminologia specifică
geneticii. Astfel, fiecare şir în cadrul populației corespunde unui
cromozom şi fiecare bit (element binar) al şirului corespunde unei
gene.
Priviți din punctul de vedere al problemelor de optimizare,
cromozomii reprezintă variabilele problemei. Cromozomii reprezintă
elemente ale unei structuri funcționale numite genom. Fiecare
genom îşi începe ciclul de viață ca o mulțime de cromozomi generați
aleator. Colecția genomilor alcătuieşte populația.
Un AG efectuează operații specifice în cadrul unui proces de
reproducere guvernat de către operatori genetici. Soluțiile noi sunt
create prin selecția şi recombinarea cromozomilor existenți, în
vederea optimizării unei funcții de evaluare (funcție de performanță,
“fitness”), aleasă pentru fiecare problemă în parte. De exemplu, dacă
problema de rezolvat este o problemă de optimizare, funcția de
evaluare ar putea fi funcția obiectiv sau inversul acesteia.
Semnificația funcției respective este irelevantă pentru algoritm, ceea
ce contează fiind doar valoarea sa.
În tabelul 9.1 [P1] este prezentată o populație formată din 10
cromozomi, fiecare codat cu câte 10 biți, precum şi valorile succesive
ale funcției de evaluare.
Plecând de la populația inițială, trebuie dezvoltată o
populație nouă, fiecare populație nouă generată prin reproducere
înlocuind generația anterioară. În acest proces funcția de evaluare
globală se va îndrepta spre optim şi va oferi soluții din ce în ce mai
bune ale problemei. Procesul este analog teoriei neo‐darwiniste a
evoluției în biologie, care afirmă că organismele (sistemele) adaptate
184
Rezolvarea numerică a problemelor de optimizare
continuu la schimbările de mediu au şansele cele mai mari de
supraviețuire.
Tabelul 9.1. Exemplu de populație şi funcția de evaluare aferentă.
Nr. Cromozomi Funcție de
crt. evaluare
1 1100010101 9
2 0000100010 7
3 1000000001 6
4 0001100010 5
5 1101110101 5
6 0001000100 4
7 1111111000 3
8 0000000001 3
9 1100001000 2
10 1111111111 1
Total: 45
Cei mai des folosiți operatori genetici în dezvoltarea noilor
populații sunt selecția, încrucişarea, inversiunea şi mutația. Aceşti
operatori vor fi descrişi în cele ce urmează. Trebuie remarcat că
operatorii genetici acționează asupra genomilor şi, în particular,
asupra cromozomilor.
1. Selecția. Operatorul de selecție (naturală) este destinat alegerii
unui set de cromozomi (şiruri) din populație pentru a‐i (a le)
reproduce. Membrii populației sunt aleşi pentru reproducere pe baza
valorii funcției lor de evaluare, iar membrilor populației le este
acordată o probabilitate de reproducere proporțională cu valoarea
funcției lor de evaluare fiind preferați cei cu o valoare cât mai mare a
funcției de evaluare.
Există trei tehnici de selecție:
• Selecția pe baza principiului ruletei, care modelează
mecanismul selecției naturale, în care cromozomii cu o
funcție de evaluare mai mare au o şansă mai mare de a fi
aleşi. Situația este prezentată în fig.9.3 în legătură cu
populația din fig.9.2; de exemplu, cromozomul 1 are
probabilitatea de 20 % (9 / 45) de a fi selectat.
• Selecția pe baza rangului, în care probabilitatea de a fi ales
este o funcție liniară de locul ocupat de individ (cromozom)
în cadrul populației. Avantajul constă în faptul că nu este
185
Rezolvarea numerică a problemelor de optimizare
Fig.9.3. Aplicarea principiului ruletei relativ la populația din fig.9.2.
2. Încrucişarea. Acest operator creează noi membri (urmaşi,
succesori) ai populației prin schimbul unor gene provenind din doi
cromozomi‐părinte (două şiruri‐părinte) c1 şi c2 selectate / selectați în
prealabil pe baza funcției lor de evaluare.
Există mai multe variante de implementare a operatorului de
încrucişare, utilizând un singur punct de încrucişare sau mai multe.
Punctele de încrucişare sunt alese aleator. În cele ce urmează sunt
prezentate două exemple de aplicare a operatorului de încrucişare, în
care poziția bitului (genei) este considerată dinspre stânga spre
dreapta.
Exemplul 9.1: Încrucişarea cu un singur punct de încrucişare.
Fie a=2 punctul de încrucişare (după cel de‐al doilea bit). Se consideră
că au fost selectați cromozomii:
c1: 1 1 | 0 0 0 1 0 1 0 1, c2: 0 0 | 0 0 1 0 0 0 1 0.
În urma aplicării operatorului de încrucişare rezultă succesorii:
u1: 1 1 | 0 0 1 0 0 0 1 0, u2: 0 0 | 0 0 0 1 0 1 0 1.
186
Rezolvarea numerică a problemelor de optimizare
Exemplul 9.2: Încrucişarea cu două puncte de încrucişare. Se
consideră că punctele de încrucişare sunt a = 2 şi a = 7 (între cea de‐a
doua şi cea de‐a şaptea genă). Se consideră că au fost selectați aceiaşi
cromozomi:
c1: 1 1 | 0 0 0 1 0 1 | 0 1, c2: 0 0 | 0 0 1 0 0 0 | 1 0.
În urma aplicării operatorului de încrucişare rezultă cromozomii din
noua generație:
u1: 1 1 | 0 0 1 0 0 0 | 0 1, u2: 0 0 | 0 0 0 1 0 1 | 1 0.
Fiecărui cromozom îi corespunde o anumită probabilitate de
încrucişare, de regulă în domeniul [0.6, 0.95].
Aplicând operatorul de încrucişare populației, este obținută o
nouă generație, fapt ilustrat din cele două exemple.
3. Inversiunea. Acest operator alege două puncte din cromozom şi
inversează ordinea genelor situate între aceste puncte, numite
puncte de inversiune şi alese aleator. Noul cromozom este obținut
concatenând genele reordonate.
De exemplu, pornind de la cromozomul:
c1: 1 | 1 0 0 | 0 1 0 1 0 1
şi schimbând ordinea genelor între punctele 2 şi 4, se obține noul
cromozom:
u1: 1 | 0 0 1 | 0 1 0 1 0 1.
4. Mutația. Procesul final de obținere a unei generații este
reprezentat de mutație, cel mai simplu operator genetic. Acest
operator basculează aleatoriu o anumită genă (un anumit bit) a / al
cromozomului. Scopul său este introducerea a noi soluții (şiruri) în
cadrul populației şi protejarea AG împotriva pierderii irevocabile şi
accidentale a informației datorită unor încrucişări nepotrivite.
Operatorul de mutație este utilizat foarte rar, motiv pentru care
această probabilitate de modificare a unui şir este menținută la un
nivel foarte scăzut, între 0.001 şi 0.01. Totuşi, operatorul de mutație
contribuie la evitarea punctelor de extrem local.
Operatorii genetici, cu încrucişarea şi mutația în rol principal,
asigură principalele diferențe dintre algoritmii genetici şi metodele
numerice de descreştere utilizate în rezolvarea problemelor de
optimizare. Pornind de la o populație inițială şi utilizând operatorii
genetici, AG dezvoltă generații noi care explorează rapid mulțimea
soluțiilor admisibile (regiunea de interes) în vederea obținerii soluției
optimale. Acest lucru subliniază avantajele utilizării AG față de
metodele menționate:
187
Rezolvarea numerică a problemelor de optimizare
• rezolvarea numerică a problemelor de optimizare dificile din
punctul de vedere al expresiilor funcției obiectiv şi
restricțiilor,
• rezolvarea numerică a PO caracterizate prin FO cu mai multe
extreme locale, maxime şi minime.
În aceste situații metodele numerice de descreştere pot localiza doar
minime (maxime) locale, iar AG pot localiza minime (maxime) globale
deşi nu este garantată obținerea lor.
În cele ce urmează vor fi prezentate pe scurt aspectele
teoretice care justifică avantajele utilizării AG, concentrate asupra
noțiunilor de scheme şi blocuri. O schemă este un şablon (formă) care
descrie o submulțime a unui cromozom având asemănari în poziții
diferite ale cromozomulului inițial. Introducând în alfabet
metasimbolul „indiferent” (*), schema asigură o modalitate
compactă de a analiza similitudinile bine definite între cromozomi.
Motivul utilizării schemelor rezidă din studiul structurii
cromozomilor generați în cadrul unui AG, situație în care pot fi
observate anumite şabloane (forme) de comportament. Adeseori
cromozomii cu valori mari ale valorii funcției de evaluare au trăsături
comune caracterizabile prin anumite combinații ale genelor (şirurilor
binare). De exemplu, acceptând un număr de 9 gene în cadrul fiecărui
cromozom, cromozomii (şirurile) cu cele mai mari valori ale funcției
de evaluare pot avea trăsătura comună caracterizată prin faptul că fie
încep cu 11 şi sunt terminați (terminate) cu 0 fie că la mijlocul
cromozomului tți cei trei biți sunt 0. Cromozomii având aceste
structuri pot fi rprezentați sub forma unor scheme, 11******0
respectiv ***000***. În plus, motivul interesului acordat schemelor
este legat de necesitatea studiului propagării acestor tipuri de
cromozomi care au structură comună şi sunt asociate cu valori mari
ale funcției de evaluare.
Lungimea unei scheme este definită ca distanța dintre cele
mai exterioare valori ale genelor specificate. În continuare sunt
considerați cromozomi de lungime l, genele fiind 0 şi 1. În acest caz,
un cromozom este un element din spațiul {0,1}l şi schema reprezintă
un element S din spatiul {0,1,*}l , adică o secvență de lungime l
constituită din simbolurile 0, 1 şi (*). Un cromozom este o instanță
(un exemplu) a (al) unei scheme dacă fiecărei poziții din cromozom
diferite de (*) îi corespunde o poziție a schemei având aceeaşi
valoare. De exemplu, schema 0*1** defineşte opt cromozomi.
În general, pentru un alfabet de cardinalitate k, există (k + 1) l
scheme, unde l este lungimea cromozomului. Deasemenea, un
188
Rezolvarea numerică a problemelor de optimizare
în care f S este funcția de performanță a schemei S la momentul t,
iar suma de la numitor reprezintă funcția de performanță totală a
populației. Funcția de performanță medie a întregii populații este
notată cu f med şi are următoarea expresie:
1 n
f med = ∑ f i .
n i =1
(9.6.3)
Utilizând f med , atunci când se aplică doar operatorul de selecție,
ecuația de evoluție a numărului de apariții ale schemei S devine:
189
Rezolvarea numerică a problemelor de optimizare
fS
m(t + 1) = m(t ) . (9.6.4)
f med
În ipoteza:
f S > f med , (9.6.5)
adică schema S este mai performantă decât media performanțelor
populației, rezultă:
m(t + 1) > m(t ) , (9.6.6)
deci numărul reprezentanților schemei creşte. Altfel spus, scheme
având performanțe peste valoarea medie a performanțelor
populației vor avea o probabilitate de reproducere mai mare şi vor
primi un număr sporit (exponențial) de reprezentanți în noua
populație.
Mutația are efect redus asupra numărului de scheme,
datorită probabilității mici de apariție.
Efectul combinat al selecției şi încrucişării asupra numărului
de scheme este exprimat prin relația:
fS ⎛ δ ⎞
m(t + 1) ≥ m(t ) ⎜1 − p c ⎟ , (9.6.7)
f med ⎝ l −1 ⎠
în care inegalitatea are loc deoarece operatorii de selecție şi
încrucişare sunt independenți.
Ordinul unei scheme este numărul de poziții specifice (0 sau
1 pentru alfabetul binar) ale schemei respective. De exemplu, schema
********1 are lungimea 1 şi ordinul 1, schema ****10*1* are
lungimea 4 şi ordinul 3, schema 10*******are lungimea 2 şi ordinul
2, schema 00****101 are lungimea 9 şi ordinul 5, iar schema
11*****00 are lungimea 9 şi ordinul 4.
Blocurile sunt scheme speciale, având valori mari ale funcției
de evaluare, ordin mic şi lungime redusă. Ele se propagă exponențial
în populație, pe parcursul generațiilor următoare, concluzie care a
primit numele de teorema schemei sau teorema fundamentală a
algoritmilor genetici [G5]: Schemele de lungime mică şi ordin redus
cu valori ale funcției de evaluare peste valorile medii sunt propagate
întrun număr care creşte exponențial de la o generație la alta. În
schimb, schemele cu valori ale funcției de evaluare sub cele medii vor
dispare prin scăderea exponențială a numărului lor de la o generație
la alta. Acest fapt reprezintă un alt avantaj al AG.
Ipoteza blocurilor afirmă că încrucişarea orientează căutarea
genetică înspre găsirea blocurilor (soluții parțiale), pe care le combină
190
Rezolvarea numerică a problemelor de optimizare
în soluții globale mai bune. Se spune că o mărime oarecare are
ordinul O(n p ) dacă ea poate fi exprimată sub forma unui polinom de
gradul p în variabila n.
Considerând o populație de n cromozomi pentru care se
calculează n valori ale funcției de evaluare întro generație, se pune
problema calculării numărului de scheme procesate eficient în fiecare
generație. Această valoare este de ordinul O(n 3 ) , schemele fiind
prelucrate în paralel. Fenomenul a primit numele de paralelism
implicit şi indică un volum de calcule mult mai mare în prelucrarea
informației conținută în scheme față de volumul de calcule efective la
nivel de şiruri.
După cum a mai fost menționat, mecanismele care leagă
algoritmul genetic de problema ce trebuie rezolvată sunt în principal
două:
• codarea problemei în termeni de cromozomi, genomi şi
populație;
• funcția de evaluare, care furnizează o măsură a calității
fiecărui cromozom în contextul problemei respective.
Codarea este realizată, de cele mai multe ori, prin şiruri de
biți, care sunt simplu de creat şi de manipulat. În plus, acest tip de
codare este robust, în sensul adaptării ei la o mare varietate de
probleme practice. Totuşi, reprezentarea cromozomilor prin numere
reale are o serie de avantaje legate de precizie.
Pe de altă parte, orice funcție de evaluare are, la intrare, şirul
de cromozomi şi returnează numere sau liste de numere ce
reprezintă performanțele realizate de cromozomi. Funcția de
evaluare are rolul mediului înconjurător din cadrul evoluției naturale.
Sintetizând aspectele prezentate anterior, un algoritm
genetic constă în parcurgerea paşilor următori:
1. Se inițializează populația de cromozomi.
2. Se evaluează fiecare cromozom din populație. Se selectează
părinții noii populații.
3. Pasul de reproducere. Se creează o nouă generație de
cromozomi prin împerecherea cromozomilor selectați
utilizând operatori genetici.
4. Se şterg membrii populației inițiale pentru a fi înlocuiți cu
noua generație.
5. Se evaluează noii cromozomi şi se inserează în noua
populație.
6. Dacă timpul de căutare s‐a terminat, algoritmul este oprit.
191
Rezolvarea numerică a problemelor de optimizare
Altfel, urmează salt la pasul 3.
Având descrise pe scurt principiile de bază ale AG, în
continuare va fi ilustrat modul de aplicare a algoritmilor genetici
considerând următoarea problemă de optimizare cu restricții de tip
egalitate (problemă cu restricții de tip egalitate, PRE):
PRE : vˆ = arg max J = x 3 + 3 x 2 , supusă la 2 ≤ v ≤ 4 . (9.6.8)
v
Din motive de simplitate, prezentarea va fi orientată pe detalii de
implementare a AG în mediul Matlab urmărind stilul din [P2].
Începutul rezolvării PO (9.6.8) este reprezentat de
transformarea problemei în vederea aplicării directe a AG. Astfel,
trebuie generată o mulțime inițială de cromozomi care să constituie
populația inițială. Alegerea unei anumite lungimi a cromozomilor,
adică a numărului de biți (gene) din fiecare şir (cromozom) determină
(în particular, limitează) precizia de obținere a soluției PO. De aceea,
trebuie acordată atenție alegerii lungimii cromozomilor.
Deasemenea, trebuie aleasă o anumită dimensiune a
populației. Şi acest parametru trebuie ales cu grijă deoarece alegerea
unei populații inițiale de dimensiune mare va contribui la creşterea
timpului necesar implementării paşilor AG. În majoritatea cazurilor
nu este necesară o populație inițială mare pentru că AG generează
automat membri noi ai polulației pe măsura procesului de căutare în
mulțimea soluțiilor admisibile.
Pentru generarea populației inițiale este dezvoltată funcția
Matlab fgeninit prezentată în continuare:
function cromozomi=fgeninit(lungime,numcrom)
% Functie utilizata in generarea populatiei
% initiale
%
% lungime este lungimea unui cromozom,
% numcrom este numarul cromozomilor.
%
% cromozomi este matricea continand cromozomii.
%
maxcrom=2^lungime; % numarul maxim de cromozomi
if numcrom>=maxcrom,
numcrom=maxcrom;
end
cromozomi=round(rand(numcrom,lungime));
Pentru generarea unei polulații inițiale formate din 5
cromozomi, fiecare conținând câte 6 gene, în continuare este apelată
192
Rezolvarea numerică a problemelor de optimizare
193
Rezolvarea numerică a problemelor de optimizare
194
Rezolvarea numerică a problemelor de optimizare
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 (de exemplu, [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.
%
% 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=...
195
Rezolvarea numerică a problemelor de optimizare
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
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:
196
Rezolvarea numerică a problemelor de optimizare
>> 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 =
79.1675 60.6764 79.1675 79.1675 60.6764
fitsum =
358.8553
Pentru noua populație poate fi observată imediat o creştere
a sumei valorilor funcției de evaluare.
În continuare trebuie aplicat pasul de reproducere populației
obținute. Acest pas va fi aplicat numai unei submulțimi a acestei
populației, în proporție de 60 % = 0.6, ceea ce în cazul de față
corespunde unui număr de 5 x 0.6 = 3 cromozomi. Însă, în pasul de
reproducere pot fi împerecheați doar cromozomi în număr par şi
numărul de cromozomi este rotunjit inferior la primul număr par,
adică 2. Prin urmare, vor fi selectați pentru împerechere doar 2
membri ai acestei populații, selectați aleator. Implementarea în
Matlab a reproducerii este efectuată în funcția Matlab freprod:
function crom1=freprod(cromozomi,propor)
% Functie utilizata in reproducerea unei
% proportii dintro populatie (de cromozomi)
%
% cromozomi este matricea continand populatia
% de cromozomi din care sunt alesi aleator cei
% supusi reproducerii,
% propor este proportia (subunitara) din
numarul
% de cromozomi supus reproducerii.
%
% crom1 este matricea obtinuta continand
% cromozomii reprodusi.
197
Rezolvarea numerică a problemelor de optimizare
%
% Initializari:
indrep=[ ];
crom1=cromozomi;
[nrcrom lungcrom]=size(cromozomi); % dimensiuni
% populatie
ind=1:nrcrom;
u=floor(nrcrom*propor);
if floor(u/2)~=u/2,
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)
198
Rezolvarea numerică a problemelor de optimizare
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:
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
199
Rezolvarea numerică a problemelor de optimizare
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 întro 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
% de o singura variabila si cu valori pozitive,
% domeniu este o matrice linie cu 2 elemente
% continand limita inferioara si cea superioara
% a variabilei (elementului programabil) v,
% biti este numarul de biti ai variabilei v,
200
Rezolvarea numerică a problemelor de optimizare
201
Rezolvarea numerică a problemelor de optimizare
cromozomi având lungimea de 8 biți şi un număr de 10 cromozomi în
populația inițială. AG este aplicat pentru 20 de generații, cu
probabilitatea (rata) mutației de 0.005 şi proporția de reproducere
egală cu 0.6 conform următoarei linii de comandă Matlab:
>>[valv,fmax]=falggen('fevaluare',[2...
>>4],8,10,...
20,.005,.6)
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ă.
Deasemenea, pot fi utilizate toolbox‐uri Matlab specializate în
implementarea AG pentru rezolvarea PO şi nu numai cum sunt GAOT
ori FLEXGA.
9.7. Algoritmi de tip Particle Swarm Optimization
Algoritmii de tip Particle Swarm Optimization (PSO) au fost
dezvoltați şi introduşi inițial de către Eberhart şi Kennedy în 1995 prin
lucrările [E1], [E2] şi [E3]. Algoritmii de tip PSO sunt algoritmi de
căutare bazați pe evoluția populației, ce simulează comportamentul
păsărilor, albinelor sau bancurilor de peşti. Aceşti algoritmi au
încercat inițial să simuleze elganța şi caracterul aleator al coregrafiei
stolurilor de păsări. Fiecare individ din cadrul stolului este
202
Rezolvarea numerică a problemelor de optimizare
reprezentat de către un vector în spațiul de căutare multidimensional
ca submulțime a domeniului admis pentru variabilele PO. Acest
vector are de asemenea alocat un alt vector, ce poartă denumirea de
vector viteză, pentru determinarea următoarei mişcări a particulei.
Algoritmii de tip PSO determină, de asemenea, cum este
făcută actualizarea vitezelor particulelor. Fiecare particulă își
actualizeză viteza bazându‐se pe viteza curentă și pe cea mai bună
poziție explorată până la acel moment; și pe cea mai bună poziție
explorată de către întregul roi [E4], [S2].
Întregul proces descris anterior este repetat de un număr
predefinit de iterații în cadrul algoritmilor de tip PSO până ce se obțin
performanțele impuse / alese pentru FO.
Simlar AG, algoritmii de tip PSO folosesc o populație de soluții
potențiale. Spre deosebire de AG, algoritmii de tip PSO nu folosesc
operatori inspirați din evoluția naturală pentru a extrage (a selecta)
soluții care vor contribui la formarea indivizilor generațiilor
următoare. În locul operatorului de mutație, algoritmii de tip PSO
utilizează schimbul de informație între indivizii (particulele) populației
(stolului). Prin urmare, fiecărei particule îi este ajustată traiectoria
ținând seama de cea mai bună poziție a particulei respective întâlnită
până atunci şi de cea mai bună poziție întâlnită până atunci de cea
mai bună particulă din stol (populație) sau dintr‐o vecinătate a ei.
Fiecare particulă este un punct în spațiul de căutare.
S‐a arătat că acest model simplu se poate aplica eficient în
cadrul unor probleme de optimizare cu un grad de dificultate ridicat.
Algoritmii de tip PSO au fost dezvoltați inițial pentru a fi aplicați în
spații de căutare cu valori reale, dar unele categorii de PO sunt
definite pe spații cu valori discrete la care domeniile admise pentru
variabilele PO sunt finite. Exemple clasice pentru aceste probleme
sunt cele de combinatorică în combinație cu programarea liniară şi
cea pătratică [E4]. Kennedy şi Eberhart au introdus în 1997 o variantă
binară a algoritmilor de tip PSO. Aceşti algoritmi sunt numiți în
continuare algoritmi binari de tip PSO spre a‐i dosebi de cei inițiali,
algoritmii reali de tip PSO, şi sunt dedicați rezolvării numerice a
problemelor de optimizare discretă [K4]. În algoritmii binari de tip
PSO fiecare particulă îşi reprezintă poziția prin valori binare de 0 și 1.
Valoarea fiecărei particule poate fi modificată (sau poate suferi o
mutație) de la 1 la 0 sau invers. În algoritmii binari de tip PSO viteza
particulei este definită sub forma probabilității ca acea particulă să îşi
modifice starea în 1.
203
Rezolvarea numerică a problemelor de optimizare
204
Rezolvarea numerică a problemelor de optimizare
unul de la altul şi, bazându‐se pe cunoştințele obținute, se deplasează
pentru a obține o poziție asemănătoare cu cea mai bună poziție
proprie obținută până atunci sau spre cea mai bună poziție a
vecinilor. Indivizii din vecinătate comunică între ei. Una dintre
structurile considerate în acest context este reprezentată de aşa‐
numita aşezare în stea.
În această structură fiecare particulă poate interacționa cu
toți ceilalți indivizi formând o rețea socială conectată total. În acest
caz fiecare particulă este atrasă către cea mai bună particulă (cea mai
bună soluție) găsită de oricare membru din întregul roi. Fiecare
particulă imită cea mai bună particulă. Astfel, parametrul Pgbest , care
reprezintă cea mai bună valoare globală, este actualizat atunci când
este găsită o poziție mai bună în întregul roi.
În algoritmii reali de tip PSO trebuie parcurşi paşii următori
(de exemplu, [D5]):
1. Inițializarea roiului X i prin generarea aleatoare a particulelor în
cadrul hipercubului spațiului de căutare. Definirea constantelor
c1 , c2 şi a numărului maxim de iterații.
2. Evaluarea performanței fiecărei particule pe baza FO F folosind
poziția curentă, X i (t ) .
3. Compararea performanței fiecărui individ cu cea mai bună poziție a
sa de până acum:
Dacă F ( X i ) < F ( Pibest ) atunci F ( Pibest ) = F ( X i ), Pibest = X i .
4. Compararea performanței fiecărei particule cu cea mai bună
poziție a roiului:
Dacă F ( X i ) < F ( Pgbest ) atunci F ( Pgbest ) = F ( X i ), Pgbest = X i .
5. Modificarea vitezei particulelor conform relației (9.7.1).
6. Deplasarea fiecărei particule într‐o nouă poziție folosind relația
(9.7.2).
7. Revenirea la pasul 2. până se ajunge la numărul maxim de paşi
stabilit inițial şi care determină oprirea algoritmului.
În algoritmii binari de tip PSO cea mai bună valoare a
particulei şi cea mai bună valoare globală sunt actualizată ca şi în
algoritmii reali. Diferența majoră dintre algoritmii binari şi cei reali
constă în faptul că vitezele particulelor sunt definite ca probabilitatea
ca un bit să ia valoarea 1. Folosind această definiție viteza trebuie
205
Rezolvarea numerică a problemelor de optimizare
restricționată în intervalul [0, 1]. Astfel trebuie introdusă o scalare a
valorilor reale ale vitezei în intervalul [0, 1]. Funcția de normalizare
folosită are expresia:
1
Vij' (t ) = sig (Vij (t )) = −Vij ( t )
. (9.7.3)
1+ e
Ecuația (9.7.1) este folosită şi aici pentru actualizarea
vectorului vitezelor particulelor. Noile poziții ale particulelor rezultă
pe baza următoarei ecuații care înlocuieşte varianta (9.7.2) din cazul
algoritmilor reali:
⎧1 dacă rij < sig(Vij (t + 1))
X ij (t + 1) = ⎨ , (9.7.4)
⎩0 în rest
în care rij este o variablilă aleatoare unformă în intervalul [0, 1].
Până în prezent algoritmii de tip PSO au fost aplicați la
probleme matematice şi economice de optimizare, de optimizare
parametrică a sistemelor de reglare automată, de combinatorică,
probleme NP‐complete, etc. În [D5] este realizată o analiză a stadiului
actual al dezvoltărilor teoretice şi aplicațiilor algoritmilor de tip PSO
cu accent pe rezolvarea PO din automatică.
9.8. Aplicații în Matlab
Pentru rezolvarea numerică a problemelor de optimizare a
fost dezvoltat Optimization Toolbox [M4] în cadrul mediului Matlab.
Funcția fminunc este destinată rezolvării problemelor de
programare matematică fără restricții (PFR) în cazul în care sunt
probleme de minimizare şi este apelabilă în cel puțin două forme
având următoarele sintaxe:
vopt=fminunc(fun,v0,options)
[vopt,valf]= fminunc(fun,v0,options)
în care argumentele au semnificația:
fun funcție Matlab definită de utilizator, de o variabilă
(scalară) sau de mai multe variabile (variabilă vectorială),
care conține expresia funcției obiectiv care trebuie
minimizată;
y0 vector (matrice coloană) conținând valorile inițiale ale
variabilei (variabilelor) problemei;
options argument prin care pot fi setați anumiți parametri ai
metodei de rezolvare numerică, prin intermediul funcției
optimset.
206
Rezolvarea numerică a problemelor de optimizare
Prin aplicarea funcției fminunc se obțin:
vopt vector conținând valorile optimale ale variabilei
(elementului programabil) v;
valf scalar conținând valoarea optimală (minimă) a funcției
obiectiv.
Funcția optimet are următoarea sintaxă:
options=odeset(’param1’,val1,’param1’,val1,...)
în care ’paramj’ reprezintă numele unui parametru, iar valj
reprezintă valoarea asignată acelui parametru, j = 1, 2, ... .
Parametrii nespecificați rămân cu valorile lor implicite. În continuare
sunt definiți doi dintre aceşti parametri:
TolX precizia absolută a soluției;
TolFun precizia absolută în calculul valorii funcției obiectiv.
Trebuie remarcat faptul că executând comanda
>> optimset(@fminunc)
se va obține o structură cu numele şi valorile tuturor acestor
parametri, urmând ca apoi să fie setate imediat valorile dorite ale
parametrilor:
ans =
ActiveConstrTol: []
DerivativeCheck: 'off'
Diagnostics: 'off'
DiffMaxChange: 0.1000
DiffMinChange: [1x1 double]
Display: 'final'
GoalsExactAchieve: []
GradConstr: []
GradObj: 'off'
Hessian: 'off'
HessMult: []
HessPattern: [1x31 char]
HessUpdate: 'bfgs'
Jacobian: []
JacobMult: []
JacobPattern: []
LargeScale: 'on'
LevenbergMarquardt: []
LineSearchType: 'quadcubic'
MaxFunEvals: [1x21 char]
MaxIter: 400
MaxPCGIter: [1x33 char]
207
Rezolvarea numerică a problemelor de optimizare
MaxSQPIter: []
MeritFunction: []
MinAbsMax: []
NonlEqnAlgorithm: []
Preconditioner: []
PrecondBandWidth: 0
ShowStatusWindow: []
TolCon: []
TolFun: [1x1 double]
TolPCG: 0.1000
TolX: [1x1 double]
TypicalX: [1x25 char]
În cazul versiunilor Matlab cel puțin 6.x, alte programe
utilizate în rezolvarea problemelor de programare matematică sunt
fminsearch (pentru PFR), fmincon (pentru PREI) şi fminbnd (pentru
probleme cu restricții de tip inegalitate cu o singură variabilă).
Pentru implementarea în Matlab a algoritmului metodei
gradientului conjugat în versiunea Fletcher‐Reeves este dezvoltată
funcția fmingc utilizând informațiile din subcapitolul 9.3:
function [sol,gradi,nriter]=...
fmingc(f,gradf,f1,v,eps)
% Algoritmul de calcul al punctului de minim
% prin metoda gradientului conjugat
% in versiunea Fletcher-Reeves
% pentru o functie neliniara f(v)
% de n variabile
%
% f este functia de variabilele independente v,
% care reprezinta o functie definita de
% utilizator,
% gradf este gradientul functiei f,
% care reprezinta o functie definita de
% utilizator,
% f1 este functia de cautare liniara a pasului
% optimal, reprezentand
% deasemenea o functie definita de utilizator,
% v reprezinta o matrice coloana continand
% cele n valori initiale
% ale vectorului variabilei independente v,
% eps este precizia dorita.
%
% sol este solutia problemei de optimizare
% (valoarea optimala a lui v),
208
Rezolvarea numerică a problemelor de optimizare
209
Rezolvarea numerică a problemelor de optimizare
% 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);
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]:
PFR :
4 2 4 2
v − 16v1 + 5v1 v 2 − 16v 2 + 5v 2
vˆ = arg min J = f ( v ) = 1 + ,
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:
210
Rezolvarea numerică a problemelor de optimizare
%
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, cu numele
f191.m, destinat definirii 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);
În final, este executată următoarea secvență de program
Matlab care apelează funcția fmingc, rezultatele fiind prezentate
imediat:
global p1 d1;
v0=[.6 .6];
x1=fmingc('f91','gradf91','f191',v0,.000005);
>> Numarul de iteratii=
2
Solutia optimala=
-2.9035 -2.9035
Gradientul in solutia optimala=
1.0e-006 *
-0.3815
-0.3815
Pentru implementarea în Matlab a algoritmului de rezolvare
a problemei de programare liniară în varianta Barnes (a se vedea
subcapitolul 9.5) este dezvoltată funcția fbarnes:
function [solv,solf,lista,iter]=...
fbarnes(A,b,c,eps)
% Algoritmul Barnes de rezolvare
% a unei probleme de programare liniara
% cu functia obiectiv f(v)=c'v,
% supusa restrictiilor Av=b si v>=0
%
% A este matricea coeficientilor
% restrictiilor de tip egalitate,
% b este matricea coloana din membrul drept al
211
Rezolvarea numerică a problemelor de optimizare
212
Rezolvarea numerică a problemelor de optimizare
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
v = [v1 v2 v 3 ]T ∈ R 3 ,
supusă la:
v1 + v 2 + v3 ≤ 7 ,
v1 + 2v 2 + 3v3 ≤ 12 ,
v1 , v 2 , v3 ≥ 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
213
Rezolvarea numerică a problemelor de optimizare
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 întruna de minimizare.
Rezultă varianta standard a problemei de programare liniară:
PREI : vˆ = arg min − J = − f ( v) = −2v1 − v 2 − 4v 3 ,
v
v = [v1 v2 v3 v4 v 5 ]T ∈ R 5 ,
supusă la:
v1 + v 2 + v 3 + v 4 = 7 ,
v1 + 2v 2 + 3v 3 + v 5 = 12 ,
v1 , v 2 , v 3 , v 4 , v 5 ≥ 0 .
Cele două variabile reprezintă diferențele dintre resursele
disponibile şi cele utilizate. În cazul în care RTI ar fi fost exprimate sub
forma “mai mare sau egal cu zero”, pentru transformarea celor două
RTI în RTE trebuia efectuată scăderea variabilelor slabe din membrii
stângi ai celor două RTI.
În aceste condiții poate fi rezolvată problema de programare
liniară folosind algoritmul lui Barnes. Este executată următoarea
secvență de program Matlab care apelează funcția fbarnes, cu
rezultatele prezentate în cele ce urmează:
A=[1 1 1 1 0;1 2 3 0 1];
b=[7;12];
c=[-2;-1;-4;0;0];
[solx,solf,lista,iter]=fbarnes(A,b,c,.00005);
Solutia optimala=
v(1)= 4.5000
v(3)= 2.5000
Celelalte variabile sunt nule
Numarul de iteratii=
7
Valoarea minima a functiei obiectiv=
-19.0000
Prin urmare, a fost obținută soluția optimală vˆ = [4.5 0 2.5]T ,
valoarea maximă a FO fiind: fmax = 19.
214
Rezolvarea numerică a problemelor de optimizare
9.9. Rezumat
Enunțul unei probleme de optimizare (PO) în sens restrâns trebuie să
conțină două elemente:
A) modelul mediului la care se referă situația dată,
B) criteriul de optimizare.
Rezolvarea unei PO presupune existența unui al treilea element, şi
anume:
C) metoda de optimizare.
În general, metodele de descreştere (de relaxare) au următoarea
structură recurentă:
v k +1 = v k + s k d k , k = 0,1,... ,
în care vectorul dk ∈ Rn reprezintă direcția de deplasare (de căutare)
din punctul curent vk, iar scalarul sk > 0 este lungimea pasului de
căutare (de deplasare).
Metodele de ordinul zero necesită doar calculul valorilor FO f în
punctul vk şi, eventual, în câteva puncte vecine (de explorare).
Metodele de ordinul I (de căutare liniară) necesită calculul valorii FO
şi al gradientului acesteia în punctul curent vk.
Metodele de ordinul II (de tip Newton) necesită calculul valorii FO, al
gradientului şi hessianului acesteia precum şi inversarea hessianului
în punctul curent vk.
Metodele de căutare liniară exactă urmăresc determinarea valorii
optimale a pasului de căutare sk, notată cu ŝ k , din condiția realizării
minimului fucției obiectiv f în direcția dk. Acestea sunt de două tipuri:
metode de explorare directă, care constau în identificarea în
prealabil a unui interval [a0, b0] ⊂ R+ care conține punctul de
minim ŝ k , urmată de reducerea iterativă a lungimii acestui
interval până la alegerea unei precizii impuse ε > 0 de
localizare a lui ŝ k ;
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).
215
Rezolvarea numerică a problemelor de optimizare
216
Rezolvarea numerică a problemelor de optimizare
d k = −g k + β k d k −1 , k = 1,2,... ,
cu d 0 = −g 0 , iar parametrul scalar βk este specific metodei şi
contribuie la accelerarea vitezei de convergență.
Metodele de ordinul II, cunoscute şi sub numele de metode de tip
Newton, utilizează un model pătratic al funcției obiectiv f de forma:
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 .
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 .
Prin anularea gradientului lui Φ în punctul staționar d k * , se obține
ecuația Newton.
Definirea unei probleme de programare liniară în varianta standard
este următoarea:
PREI : vˆ = arg min J = c T v , supusă la A v = b, v ≥ 0 ,
v
a matricei linie c = [c1
T
c2 ... c n ] .
Cei mai des utilizați operatori genetici în dezvoltarea noilor populații
sunt selecția, încrucişarea, inversiunea şi mutația.
Un algoritm genetic constă în parcurgerea paşilor următori:
1. Se inițiază populația de cromozomi.
2. Se evaluează fiecare cromozom din populație. Se selectează
părinții noii populații.
3. Pasul de reproducere. Se creează o nouă generație de
cromozomi prin împerecherea cromozomilor selectați
utilizând operatori genetici.
4. Se şterg membrii populației inițiale pentru a fi înlocuiți cu
noua generație.
5. Se evaluează noii cromozomi şi se inserează în noua
populație.
6. Algoritmul este oprit dacă timpul de căutare s‐a terminat.
Altfel, urmează salt la pasul 3.
Un algoritm real de tip PSO constă în parcurgerea paşilor următori:
217
Rezolvarea numerică a problemelor de optimizare
9.10. Probleme propuse
1. Să se implementeze în Matlab algoritmul metodei secțiunii
de aur, utilizată în minimizarea unor funcții neliniare.
2. Să se implementeze în Matlab algoritmul metodei
interpolării pătratice, utilizată în minimizarea unor funcții neliniare.
3. Să se implementeze în Matlab o variantă a algoritmului
metodei protejate de căutare liniară aproximativă.
4. Să se implementeze în Matlab algoritmul de calcul al
punctului de minim prin metoda cvasi‐Newton cu pas variabil.
5. Să se implementeze în Matlab algoritmul de calcul al
punctului de minim prin metoda gradientului.
6. Să se implementeze în Matlab algoritmul metodei
gradientului conjugat în versiunea Polak‐Ribière.
7. Să se implementeze în Matlab algoritmul metodei
gradientului conjugat în versiunea Hestenes‐Stiefel.
8. Să se implementeze în Matlab algoritmul metodei regiunii
de încredere în model.
218
Rezolvarea numerică a problemelor de optimizare
9. Să se implementeze în Matlab variante ale funcției Matlab
falggen care implementează AG în rezolvarea PO în cazul unor funcții
de două, trei, patru sau mai multe variabile.
10. Să se implementeze în Matlab algoritmi reali şi binari de
tip PSO.
11. Să se rezolve următoarele probleme de optimizare fără
restricții:
PFR :
a) 1 ,
vˆ = arg max J = f ( v) =
v (v1 − 1) + (v 2 − 1) + (v3 − 1) + a
2 2 2 2
c)
PFR :
4 2 4 2
v1 − 16v1 + 5v1 v 2 − 16v 2 + 5v 2
vˆ = arg min J = f ( v) = + +
v 2 2
+ (v3 − 1) + (v 4 − 1) + (v5 − 1) ,
2 2 2
v = [v1 v2 v3 v4 v5 ]T ∈ R 5 .
12. Să se rezolve următoarele probleme de programare
liniară:
a) PREI : vˆ = arg min J = f ( v ) = 5v1 + 7v 2 + 10v 3 ,
v
v = [v1 v2 v 3 ]T ∈ R 3 ,
supusă la:
v1 + v 2 + v 3 ≤ 4 ,
v1 + 2v 2 + 4v 3 ≥ 5 ,
v1 , v 2 , v 3 ≥ 0 ;
b) PREI : vˆ = arg max J = f ( v ) = 4v1 + 5v 2 ,
v
v = [v1 v 2 ]T ∈ R 2 ,
supusă la:
v1 + v 2 ≤ 5 ,
219
Rezolvarea numerică a problemelor de optimizare
v1 + 2v 2 ≤ 7 ,
v1 + 4v 2 ≤ 10 ,
v1 , v 2 ≥ 0 ;
c) PREI : vˆ = arg max J = f ( v ) = 2v1 − 4v 2 + 4v 3 ,
v
v = [v1 v2 v 3 ]T ∈ R 3 ,
supusă la:
v1 + 2v 2 + v 3 ≤ 30 ,
v1 + v 2 = 10 ,
v1 + 2v 2 + v 3 ≥ 8 ,
v1 , v 2 , v 3 ≥ 0 .
13. Să se rezolve următoarele probleme de optimizare cu
restricții de tip inegalitate (probleme cu restricții de tip inegalitate,
PRI):
a) PRI : vˆ = arg max J = f (v) = e v + sin(6v) , v ∈ R ,
v
supusă la: 0 ≤ v ≤ 1 ;
1 1
b) PRI : vˆ = arg max J = f (v) = 10 + sin( ) ,
v (v − 0.16) + 0.1
2
v
v ∈ R \ {0} ,
supusă la: 0.01 ≤ v ≤ 0.3 ;
2 2
c) PRI : vˆ = arg max J = f ( v ) = v1 + v 2 + v1 v 2 + 2v1 ,
v
v = [v1 v 2 ]T ∈ R 2 ,
supusă la:
3
− v1 2 − v 2 2 ≥ 0 ,
2
v 2 ≤ 0 ;
2
d) PRI : vˆ = arg min J = f ( v ) = v1 + v 2 , v = [v1 v 2 ]T ∈ R 2 ,
v
supusă la:
3 2
v 2 − v1 ≥ 0 ;
2 2
e) PRI : vˆ = arg max J = f ( v ) = v1 + v 2 , v = [v1 v 2 ]T ∈ R 2 ,
v
supusă la:
v1 ≥ 0 ,
220
Rezolvarea numerică a problemelor de optimizare
v 2 ≥ 0 ,
2
1 − (v1 − 4) 2 − v 2 ≥ 0 ,
2
4 − (v1 − 1) 2 − v 2 ≥ 0 ;
f) PRI : vˆ = arg min J = f ( v ) = (v1 − 1) 2 + (v 2 − α) 2 ,
v
v = [v1 v 2 ]T ∈ R 2 ,
supusă la:
1
vi ≤ , i = 1,2 .
2
221