38
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare 113 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. 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 R m , - de stare, x X R n , - de ieşire, y Y R p . b) Variabila independentă timp: t T 0f R – pentru sisteme cu timp continuu (SC); t T 0f = {t k0 , t k0+1 , …, t kf } = {t k | k = k 0 , …, k f Z} R – pentru sisteme cu timp discret (SD). Domeniul T 0f se numeşte interval de optimizare (orizont de timp). În anumite probleme orizontul de timp este finit: T 0f = [t 0 , t f ] R, cu t 0 şi t f – finite pentru SC, respectiv k 0 şi k f – finite pentru SD, iar în altele este infinit: T 0f = [t 0 ,∞) R, cu t 0 – finit pentru SC, respectiv k 0 – finit, k f – infinit pentru SD. Momentul t 0 (t k0 ) se numeşte moment iniţial şi t f (t kf ) se numeşte moment final. c) Constante în timp (parametri): - parametri constructivi (de proiectare), p c P c R qc , - parametri de acordare (funcţionali), p a P a R qa . 2) Domeniile admise pentru mărimile care apar în ecuaţiile procesului. Acestea au fost prezentate anterior, (U, X, Y, T 0f , P c , P a ). 3) Condiţiile iniţiale şi finale care se asociază capetelor (bornelor) t 0 (t k0 ) şi t f (t kf ) ale orizontului de timp pe care a fost definită PO. Aceste condiţii se referă de regulă la mărimile de stare:

Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

  • Upload
    dongoc

  • View
    249

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

113

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

Domeniul T0f se numeşte interval de optimizare (orizont de timp). În anumite probleme orizontul de timp este finit: T0f = [t0, tf] ⊂ R, cu t0 şi tf – finite pentru SC, respectiv k0 şi kf – finite pentru SD, iar în altele este infinit: T0f = [t0,∞) ⊂ R, cu t0 – finit pentru SC, respectiv k0– finit, kf – infinit pentru SD.

Momentul t0 (tk0) se numeşte moment iniţial şi tf (tkf) se numeşte moment final.

c) Constante în timp (parametri): - parametri constructivi (de proiectare), pc ∈ Pc ⊆ Rqc,

- parametri de acordare (funcţionali), pa ∈ Pa ⊆ Rqa. 2) Domeniile admise pentru mărimile care apar în ecuaţiile procesului.

Acestea au fost prezentate anterior, (U, X, Y, T0f, Pc, Pa). 3) Condiţiile iniţiale şi finale care se asociază capetelor (bornelor) t0

(tk0) şi tf (tkf) ale orizontului de timp pe care a fost definită PO. Aceste condiţii se referă de regulă la mărimile de stare:

Page 2: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

114

x(t0) = x0, x(tf) = xf şi, mai rar, la mărimile de ieşire:

y(t0) = y0, y(tf) = yf, domeniile corespunzătoare având expresiile:

x0 ∈ X0 ⊆ X, xf ∈ Xf ⊆ X, respectiv: y0 ∈ Y0 ⊆ Y, yf ∈ Yf ⊆ Y

şi purtând denumirile: - X0, Y0 – varietate (domeniu) iniţial (de lansare), - Xf, Yf – varietate (domeniu) final (ţintă). 4) Condiţiile suplimentare impuse mărimilor care apar în ecuaţiile

procesului. Aceste condiţii sunt datorate particularităţilor situaţiei în care se află mediul considerat. Ele pot fi exprimate printr-un sistem de ecuaţii algebrice şi / sau diferenţiale (cu diferenţe) şi / sau inecuaţii algebrice şi / sau integrale şi / sau diferenţiale (cu diferenţe), valabil pe întregul orizont de timp T0f sau numai la anumite momente ale acestuia.

În cazul utilizării unor ecuaţii, condiţiile suplimentare sunt numite restricţii de tip egalitate (RTE). Pe de altă parte, în cazul utilizării unor inecuaţii, condiţiile suplimentare sunt numite restriţii de tip inegalitate (RTI).

Se numeşte proces admisibil sau traiectorie globală admisibilă orice soluţie a sistemelor de ecuaţii ale procesului menţionate la punctul 1), care aparţine integral domeniilor admise şi care satisface condiţiile iniţiale, finale şi suplimentare impuse. Se notează cu Π0f mulţimea proceselor admisibile, care are expresia (9.1.1):

Π0f = {{x(t), u(t), …, pa} | x ∈ X, u ∈ U, …, pa ∈ Pa, ∀ t ∈ T0f; x0 ∈ X0, …, yf ∈ Yf; g(x, ..., pa) = 0, h(x, ..., pa) ≥ 0, ∀ t ∈ T0f; (9.1.1) g0(x0, ..., y0) = 0, gf(xf, ..., yf) = 0},

în care cu g(x, ..., pa) = 0, g0(x0, ..., y0) = 0 şi gf(xf, ..., yf) = 0 au fost exprimate RTE, iar cu h(x, ..., pa) ≥ 0 au fost exprimate RTI. B) Criteriul de optimizare. Criteriul de optimizare este exprimat în general prin funcţia obiectiv (numită şi funcţie criteriu sau funcţie cost şi abreviată FO) şi reflectă atitudinea faţă de FO, imprimată de problema de optimizare (PO).

FO serveşte la evaluarea numerică a diferitelor decizii, iar atitudinea faţă de FO trebuie să specifice sensul de variaţie dorit al FO, minimizare sau maximizare.

Funcţia obiectiv este de regulă o funcţională notată cu J: RJ f →Π 0: , (9.1.2)

care asociază fiecărui proces admisibil fatt 0},),(),({ Π⊂=Π pux ! un număr real prin care este apreciată calitatea absolută a procesului Π în raport cu mulţimea f0Π .

Pentru sistemele cu timp continuu, forma generală a FO este (9.1.3):

∫+θ=

=

ft

tff

acff

dttttEtt

ttttJ

0

. )),(),((),,,(

),),(),(,,,,(

00

00

uxxx

ppuxxx

(9.1.3)

Termenul θ , numit componentă de tip Mayer, evaluează calitatea capetelor traiectoriei.

Page 3: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

115

Termenul integral, numit componentă de tip Lagrange, evaluează parcursul traiectoriei pe care evoluează procesul considerat. În consecinţă, se vorbeşte de criteriu de tip Mayer, corespunzător FO (9.1.4):

),,,( 00 ffttJ xxθ= , (9.1.4)

care “penalizează” capetelor traiectoriei şi de criteriu de tip Lagrange, corespunzător FO (9.1.5):

∫=ft

tdttttEJ

0

)),(),(( ux , (9.1.5)

care “penalizează” parcursul traiectoriei şi de criteriu de tip Bolza, corespunzător FO (9.1.3), care “penalizează” traiectoria în ansamblu.

Pentru sistemele cu timp discret, forma generală a FO (de tip Bolza) este:

, ),(),,,(

),,,,,,,(1

00

00

0

∑−

=+θ=

=fk

kkkkkkfkfkh

ackkkfkfkk

Ett

ttJ

uxxx

ppuxxx

(9.1.6)

aspectele de terminologie de la cazul cu timp continuu fiind valabile şi în cazul cu timp discret.

O funcţie obiectiv discretă poate fi obţinută dintr-o FO continuă prin discretizare.

În funcţie de precizarea sau nu a orizontului de timp, există probleme de optimizare dinamică (POD), pentru care precizarea orizontului de timp e fundamentală şi probleme de optimizare staţionară (POS), pentru care precizarea orizontului de timp nu e necesară nici pentru modelul mediului şi nici pentru FO şi în care interesează doar regimul staţionar al sistemului dinamic. În cazul POS, FO au expresia (9.1.7):

),( uxθ=J . (9.1.7)

C) Metoda de optimizare. Metoda de optimizare reprezintă ansamblul de mijloace utilizate pentru determinarea deciziei optimale pe baza modelului mediului şi a FO.

Considerând o problemă de optimizare pentru care singura variabilă (singurul element programabil) este reprezentată (reprezentat) de comanda u(t) (pentru SC) sau uk (pentru SD), adică o problemă de conducere optimală, se zice comandă (decizie) optimală acea funcţie de comandă Ut ∈)(u sau

1, , ,ˆ 00 −=∈∀∈ ffk kkkTtUu , care extremizează FO J în sensul cerut de criteriul de optimizare.

Mulţimea U reprezintă mulţimea comenzilor admisibile, adică mulţimea funcţiilor de comandă care apar în mulţimea f0Π a proceselor admisibile. Dacă mulţimea U este compactă, în cazul minimizării poate fi exprimat rezultatul:

UJ ∈= uuuu

),(min argˆ . (9.1.8)

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 }ˆ,,ˆ,ˆ{ 1100 −+ kfkk uuu ! aplicat secvenţial la intrarea

Page 4: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

116

procesului condus, este vorba despre probleme de optimizare în mai mulţi paşi.

În particular, există probleme de optimizare într-un singur pas, care din punct de vedere matematic nu se deosebesc de POS. Acestea sunt cunoscute şi sub numele de probleme de programare matematică, liniară, neliniară (pătratică, convexă).

Pentru PO cu mai multe variabile / elemente programabile (de exemplu, tf, xf şi u) elementele programabile optimale sunt definite similar.

Din punct de vedere al implementării comenzii optimale există probleme de conducere optimală în circuit deschis şi în circuit închis, situaţii în care se vorbeşte despre funcţii de comandă (decizie) optimală (independente de starea / ieşirea procesului condus) respectiv de legi de comandă (decizie) optimală, ),(ˆˆ xuu t= sau )(ˆˆ kk xuu = .

Observaţii: 1. Orice problemă de maximizare poate fi transformată într-o

problemă de minimizare prin schimbarea semnului FO. 2. Într-o PO valoarea FO e mai puţin importantă, contează doar ca

valoarea sa să fie minimă. Enunţul unei PO poate fi exprimat sub următoarea formă generală:

)( min argˆ:A vvv

BJ == , supusă la RTE, RTI, (9.1.9)

în care v este soluţia optimală, v reprezintă variabilele problemei (elementele programabile, exprimate sub formă vectorială), A este înlocuită cu denumirea PO, B este înlocuită cu expresia FO şi v trebuie să aparţină mulţimii soluţiilor admisibile, ceea ce înseamnă că trebuie să verifice RTE şi RTI.

În paragrafele următoare vor fi prezentaţi algoritmi de rezolvare numerică a unor clase de probleme de optimizare.

9.2. Aspecte introductive privind rezolvarea numerică a problemelor de programare matematică fără restricţii

Poblemele de optimizare fără restricţii (probleme fără restricţii, PFR) au următoarea formă generală:

nRfJ ∈== vvvv

),( min argˆ:PFR . (9.2.1)

Pentru rezolvarea PFR (9.2.1) vor fi considerate numai metodele numerice de descreştere (de relaxare), adică metodele care duc la descreşterea valorii funcţiei obiectiv f la fiecare iteraţie conform relaţiei:

,...1,0 ),()( 1 =<+ kff kk vv , (9.2.2)

unde k este numărul iteraţiei curente. În general, metodele de relaxare au următoarea structură recurentă:

,...1,0 ,1 =+=+ ks kkkk dvv , (9.2.3)

î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). Rescrierea relaţiei (9.2.3) sub forma:

,...1,0 ,1 ==∆=−+ ks kkkkk dvvv , (9.2.4)

Page 5: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

117

arată că aproximaţia următoare, vk+1, se obţine efectuând asupra lui vk o corecţie Δvk determinată exclusiv de direcţia dk şi de pasul sk, adoptate la iteraţia k. În general, algoritmii de rezolvare numerică a PFR au următoarea formă (de exemplu, [I1]): Fie v0 ∈ Rn o estimaţie iniţială a minimului. Etapa 0 (iniţializare). Se iniţializează k = 0. Etapa 1 (test de convergenţă). Dacă sunt satisfăcute condiţiile de convergenţă, algoritmul este terminat cu soluţia vk. Altfel, se trece la etapa 2. Etapa 2 (determinarea direcţiei de căutare). Se calculează direcţia de căutare, dk. Etapa 3 (calculul lungimii pasului). Se calculează lungimea pasului sk>0 astfel încât (a se vedea relaţiile (9.2.2) şi (9.2.3)):

,...1,0 ),()( =<+ kfsf kkkk vdv . (9.2.5)

Etapa 4 (actualizarea estimaţiei minimului). Se efectuează: 1 , +=+← kks kkkk dvv ş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 (9.2.6):

0||)(||lim =∞→

k

kf vv . (9.2.6)

Observaţie: În algoritmul prezentat a fost utilizată pentru gradientul lui f calculat în punctul v* (este vorba despre derivata unei funcţii scalare f de variabilă vectorială v) notaţia următoare:

[ ]Tn

T

nvvv

vf

vf

vff !! 21

21

* ,)(*

=

∂∂

∂∂

∂∂

==

vvvv

v . (9.2.7)

Datorită necesităţii reducerii volumului de memorie şi efortului de calcul în vederea implementării algoritmului prezentat, la fiecare iteraţie, k, informaţia disponibilă pentru stabilirea valorilor lui dk şi sk este strict limitată şi are caracter local, adică se referă la valorile funcţiei f şi eventual ale primelor derivate ale acesteia în punctul curent vk. Din acest punct de vedere, metodele de relaxare expuse în continuare şi care diferă între ele prin algoritmii de alegere a parametrilor dk şi sk, pot fi clasificate după cum urmeză: A. Metodele de ordinul zero. Aceste metode necesită doar calculul valorilor FO f în punctul vk şi, eventual, în câteva puncte vecine (de explorare). Din această categorie fac parte, spre exemplu, următoarele:

- metodele de căutare ciclică după direcţiile axelor de coordonate, - variantele îmbunătăţite ale acestora de tip Hooke-Jeeves, - metodele de direcţii conjugate (Rosenbrock, Powell, Fletcher-Reeves

ş.a.), - metoda simplex în varianta Nedler-Mead,

Page 6: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

118

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

[ ]Tn

nnn

n

n

vvv

vf

vvf

vvf

vvf

vf

vvf

vvf

vvf

vf

f !

"

"

"

"

21

2

2

2

2

1

2

2

2

22

2

12

21

2

21

2

21

2

* ,)(

*

=

∂∂

∂∂∂

∂∂∂

∂∂∂

∂∂

∂∂∂

∂∂∂

∂∂∂

∂∂

=

=

vv

vv

vv . (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:

)( ),( ),( ),( 1 kkkkkkkkkk ffsffff vGvgdvv vvv ==+== + . (9.2.9)

9.3. Rezolvarea problemelor de programare matematică fără restricţii cu metode de căutare liniară

În acord cu paragraful anterior, trebuie asigurată descreşterea valorii FO f la fiecare iteraţie. În acest scop, dk va fi aleasă ca direcţie de descreştere (de coborâre) în v., adică satisfăcând condiţia (9.3.1):

,...1,0 ,0)( =< kkTk dg . (9.3.1)

Dacă dk este direcţie de descreştere, atunci există un s > 0 astfel încât:

,...1,0 ),()( =<⋅+ kfsf kkk vdv . (9.3.2)

În continuare vor fi discutate metode de calcul al (alegere a) pasului de căutare sk care asigură o „descreştere suficientă” în f(vk). A. Metode de căutare liniară exactă. Aceste metode urmăresc determinarea valorii optimale a pasului de căutare sk, notată cu ks , din condiţia realizării minimului fucţiei obiectiv f în direcţia dk:

Page 7: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

119

)()ˆ( min0

kk

s

kkk sfsf dvdv ⋅+=+≥

. (9.3.3)

Pentru rezolvarea problemei de optimizare (9.3.3) se consideră pentru simplitate funcţia:

)()()( ,: 11kkk fsfsfRRf vdv −⋅+=→ . (9.3.4)

Deci condiţia (9.3.3) poate fi scrisă sub forma simplă (9.3.5) de problemă cu restricţii de tip egalitate (PRE):

)(ˆ:PRE 10minarg sfs

s

k

= . (9.3.5)

Pentru rezolvarea problemei (9.3.5) pot fi folosite metode specifice de minimizare unidimensională. Aceste metode (de ordinul zero sau I) se bazează fie pe explorare directă, fie pe interpolare. A.1. Metode de explorare directă. Aceste metode constau în identificarea în prealabil a unui interval [a0, b0] ⊂ R+ care conţine punctul de minim ks , urmată de reducerea iterativă a lungimii acestui interval până la alegerea unei precizii impuse ε > 0 de localizare a lui ks . Dintre aceste metode sunt amintite:

- metoda secţiunii de aur – utilizează numai valori ale funcţiei f1, - metoda bisecţiei – este recomandată atunci când derivata funcţiei f1

poate fi calculată relativ simplu, - metoda şirului lui Fibonacci – asigură realizarea unei lungimi minime

Li a intervalului în care se află ks 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 ks . Pornind de la o aproximaţie iniţială de forma [0, c], în etapele 1 – 6 este determinat un interval iniţial [a0, b0] care conţine pe ks . 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 ks . În final este obţinut punctul de minim ca medie aritmetică a limitelor intervalului de căutare:

2ˆ iik ba

ss+

== . (9.3.6)

Considerând că sunt date numerele c > 0 şi ε > 0 şi definind:

2511 ,

253 +−=−=−= FGF , (9.3.7)

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.

Page 8: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

120

8. Se calculează Li = bi – ai.

Dacă Li ≤ ε, atunci se calculează 2

ˆ iik bas

+= şi algoritmul este 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. 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):

kkkT sfsf ddvv ⋅⋅+= )()('1 . (9.3.8)

În această situaţie funcţia f* are expresia:

0 ,)( 2012

2* >++= ccscscsf , (9.3.9)

cu abscisa punctului de minim:

2

1*

cc

s −= . (9.3.10)

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:

)})(())((

))((/{]})())[((

])())[((])())[(({ˆ

21*21*

12*2221*

2221*2122**

−−−−

−−−−

−−−−

−+−+

+−−+

+−+−=

kkkkkk

kkkkkk

kkkkkk

sssfsssf

sssfsssf

sssfsssfs

. (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ţă. Exceptând prima iteraţie, la fiecare iteraţie metoda de interpolare pătratică necesită o evaluare a FO. Metodele robuste de minimiare unidimensională combină metoda interpolării polinomiale cu metodele de căutare care asigură reducerea intervalului de incertitudine în care se află minimul. Metodele din această categorie sunt cunoscute sub numele de metode protejate.

Intrepolarea cubică este recomandată atunci când evaluarea derivatei funcţiei f1 (gradientului lui f) nu este complicată.

Page 9: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

121

B. Metode de căutare liniară aproximativă. Aceste metode sunt utilizate în majoritatea cazurilor când este urmărită doar asigurarea unei reduceri suficent de mici a FO f în lungul direcţiei de căutare dk. În acest caz este dorită realizarea unui compromis între efortul necesar determinării unei valori cât mai bune sk la fiecare iteraţie şi avantajul creat prin reducerea numărului de operaţii aritmetice. Una din metodele practice de minimizare aproximativă impune ca derivata direcţională în punctul )( kkk s dv + să fie suficent de mică în raport cu cea din punctul kv :

kTkkkkkT sf dgddvv )(|)(| η−≤⋅+ , (9.3.12)

cu 0 ≤ η < 1. Valoarea constantei η determină precizia cu care sk aproximează pe ks . Precizia creşte pe măsura scăderii lui η (pentru η = 0 se obţine cazul particular al căutării liniare exacte). Pentru garantarea unei descreşteri suficiente poate fi impusă suplimentar o condiţie de forma (9.3.13):

kTkkkk sff dg )(1 ⋅µ−≥− + , (9.3.13)

cu 0 < μ < 1/2. Valorile uzuale pentru constantele η şi μ sunt:

1 ,1010 15 <η<µ≤µ≤ −− . (9.3.14)

În baza relaţiilor (9.3.12) şi (9.3.13) rezultă o variantă a algoritmului metodei protejate de căutare liniară aproximativă. Algoritmul este destinat calculul lungimii pasului şi actualizării minimului conform etapelor 3 şi 4 ale algoritmului general prezentat în paragraful 9.2 şi constă în parcurgerea următorilor paşi: 1. Se iniţializează sk = s > 0. 2. Dacă valoarea curentă a lui sk satisface (9.3.12), atunci urmează salt la pasul 5. Altfel, se trece la pasul 3. 3. Dacă 0)( >⋅+ kkkkT sf ddvv , 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. 4. Cazul 0)( <⋅+ kkkkT sf ddvv . Se înlocuieşte kv cu )( kkk s dv + ş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 kk ss =ˆ ş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:

kTkkkk sff dg )(1 ⋅µ≤−+ . (9.3.15)

Page 10: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

122

Condiţia (9.3.15) poate fi interpretată grafic (fig.9.1) prin necesitatea ca în planul <s, f> diferenţa kk ff −+1 (notată cu (1)) să fie situată sub dreapta de ecuaţie kTkksf dg )(⋅µ= (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 kk ss =ˆ ş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.

Fig.9.1. Punerea problemei în cazul metodei Armijo.

D. Metodele cvasi-Newton. Prin dezvoltarea în serie Taylor a funcţiei )( kkk sf dv + în vecinătarea punctului kv şi reţinerea doar a termenilor de

ordinul întâi şi doi, rezultă:

kkTkkkkTkk

kkkTkkkkTkkkkk

ssf

sssfsf

dGddg

dGddgdv

)())(2/1()(

)())(2/1()()(2++=

=++≈+ . (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):

kkTkkkkTkkn ssRR dGddgd )())(2/1()()( ,: 2+=Φ→Φ , (9.3.17)

îşi atinge minimul. Anulând gradientul lui Φ, se obţine punctul staţionar *kd care satisface sistemul de ecuaţii liniare (9.3.18):

kkkkkkkkkk sssk gdG0dGgdd −=⇒=+=Φ **2* )()(* . (9.3.18)

În acest context, o metodă de minimizare cu direcţia de căutare optimală *kd definită de (9.3.18) este numită metodă Newton, soluţia *kd 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 kd este determinată ca soluţie a unui sistem analog lui (9.3.18):

kkkks gdB −= , (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. Se introduce notaţia:

kkkkk s dvvt =−= +1 , (9.3.20)

Page 11: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

123

pentru vectorul care exprimă modificarea în vk la iteraţia k. Pentru modificări mici în vk poate fi scrisă următoarea relaţie aproximativă:

))(()()( 111 kkkkk fff vvvvv vvvv −≈− +++ . (9.3.21)

Notând: kkkkk ff ggvvy vv −=−= ++ 11 )()( (9.3.22)

şi ţinând seama de faptul că Bk+1 este o aproximaţie pentru hessianul )( 1+kf vvv , relaţia (9.3.21) se transformă în ecuaţia cvasi-Newton:

kkk ytB =+1 . (9.3.23)

Pentru Bk+1 este impusă în general şi condiţia de a fi simetrică şi pozitiv definită în vederea asigurării unei direcţii dk de descreştere pentru f. Spre exemplu, poate fi impusă condiţia ca Bk+1 să fie soluţia următoarei PO:

FB

BBB ||||ˆ:PRE 11 minarg1

kkk

k

−= ++

+

supusă la Bk+1 simetrică şi

Bk+1 satisface (9.3.23), (9.3.24) în care ||A||F reprezintă norma Frobenius ponderată F a matricei

mjniija,1,1)(

===A , cu expresia:

∑∑= =

=n

i

m

jija

1 1

2|||| FA . (9.3.25)

Atunci 1ˆ +kB este dată de formula Powell-simetrică-Broyden:

TkkkTk

kTkkk

TkkkkTkkkkkTk

kk

)(])[()(

])())([()(1ˆ

2

1

tttt

ttBy

tBytttBytt

BB

−−

−−+−+=+

. (9.3.26)

Prin utilizarea unor alte variante de norme Frobenius ponderate rezultă două formule cunoscute: - formula Davidon-Fletcher-Powell:

TkkkTk

kTkkk

TkkkkTkkkkkTk

kk

)(])[()(

])())([()(1ˆ

2

1

yyty

ttBy

tByyytByty

BB

−−

−−+−+=+

; (9.3.27)

- formula Broyden-Fletcher-Goldfarb-Shanno:

kTkkkkkTk

TkkkTk

kk BttBtBt

yyty

BB )()(1)(

)(1ˆ 1 −+=+ ; (9.3.28)

ambele au proprietatea că dacă Bk > 0 şi 0)( >kTk ty , atunci 0ˆ 1 >+kB . 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):

kkkk s gHd 1)( −−= , (9.3.29)

iar condiţia cvasi-Newton (9.3.23) devine:

Page 12: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

124

kkk tyH =+1 . (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ă )( kk f vg v= . Dacă 0|||| =kg , atunci kvv =ˆ ş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ă kk gd −= şi urmează salt la pasul 5. 4. Se determină direcţia dk rezolvând sistemul liniar kkk gdB −= . 5. Se determină pasul sk utilizând unul din algoritmii prezentaţi în paragrafele A sau B. 6. Se calculează kkkk s dvv +=+1 , 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:

kk gd −= . (9.3.31)

Dezvoltând în serie Taylor funcţia )( kkk sf dv + în vecinătarea punctului kv şi reţinând doar termenii de ordinul întâi, se obţine:

kkTkkkkk sfsf dgvdv )()()( +≈+ . (9.3.32)

Însă, kkkkTkkkkTk sss dgdgdg ∀≤= ,||||)()( 2 , (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ă )( kk f vg v= . Dacă 0|||| =kg , atunci kvv =ˆ şi algoritmul este oprit. Altfel, se alege direcţia kk gd −= şi se trece la pasul 3. 3. Se determină pasul sk utilizând unul din algoritmii din paragrafele A sau B. 4. Se calculează kkkk s dvv +=+1 , 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.

Page 13: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

125

Direcţia de căutare pentru metodele de gradient conjugat este obţinută pe baza relaţiei (9.3.34):

,...2,1 ,1 =β+−= − kkkkk dgd , (9.3.34)

cu 00 gd −= , iar parametrul scalar βk este specific metodei şi contribuie la accelerarea vitezei de convergenţă. Parametrul βk are următoarele expresii posibile care conduc la diverse variante de metode de gradient conjugat: - pentru metoda Fletcher-Reeves:

11 )()(

−−=β

kTk

kTkk

gggg ; (9.3.35)

- pentru metoda Polak-Ribière:

11

1

)()()(

−−

−−=βkTk

kkTkk

ggggg ; (9.3.36)

- pentru metoda Hestenes-Stiefel:

11

1

)()()(

−−

−−=β

kTkk

kkTkk

dggggg . (9.3.37)

Din motive de convergenţă, pentru implementările practice este recomandată reiniţializarea algoritmului după un număr de l ≥ n + 1 iteraţii, folosindu-se βl = 0. Din aceleaşi motive este recomandată utilizarea unei proceduri de căutare liniară exactă pentru determinarea lungimii sk a pasului. Algoritmul de calcul al punctului de minim v prin metoda gradientului conjugat este prezentat în cele ce urmează şi are următorii paşi: 0. Se alege un punct iniţial v0 ∈ Rn. 1. Se iniţializează k = 0. 2. Se calculează )( 00 vg vf= . Dacă 0|||| 0 =g , atunci 0ˆ vv = şi algoritmul este oprit. Altfel, se alege direcţia 00 gd −= şi se trece la pasul 3. 3. Se determină pasul optimal ss k ˆ= utilizând unul din algoritmii din paragraful A. 4. Se calculează kkkk s dvv +=+1 . 5. Se calculează )( 11 ++ = kk f vg v . Dacă 0|||| 1 =+kg , atunci 1ˆ += kvv şi algoritmul este oprit. Altfel, se trece la pasul 6. 6. Se calculează βk+1 cu una din formulele cunoscute şi direcţia de căutare cu formula kkkk dgd 111 +++ β+−= . 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]).

9.4. Rezolvarea problemelor de programare matematică fără restricţii cu metode de ordinul II

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 (a se vedea şi relaţia (9.3.16)):

Page 14: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

126

kkTkkkTkkkkkk ssfsf dGddgdv )())(2/1()()( 2++≈+ . (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:

kkTkkkTkkkn ssRR dGddgd )())(2/1()()( ,: 2+=Φ→Φ . (9.4.2)

Prin anularea gradientului lui Φ în punctul staţionar *kd , se obţine ecuaţia Newton (a se vedea relaţia (9.3.18)):

kkkks gdG −=* . (9.4.3)

Dacă Gk 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ă (sk = 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 *kd să nu mai fie o direcţie de descreştere, adică )()( kkkk fsf vdv ≥+ . 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ă kd în puncte de tip şa, unde 0d =k şi Gk este nedefinită; o astfel de direcţie satisface (9.4.4):

0)( <kkTk dGd (9.4.4)

şi serveşte întotdeauna reducerii valorii lui f în lungul lui kd . A. Metoda Newton modificată. Această metodă utilizează un hessian modificat

0>kG în locul unui hessian nedefinit. Direcţia de căutare poate fi obţinută prin rezolvarea ecuaţiei (9.4.5):

kkkks gdG −= , (9.4.5)

a cărei soluţie este o direcţie de descreştere deoarece 0>kG . Dacă 0>kG , atunci se ia kk GG = . Î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 kG . Un exemplu de astfel de factorizare este factorizarea L D LT modificată care permite verificarea pozitivităţii lui kG şi formarea matricei:

HGLDLG +== kTk , (9.4.6)

Page 15: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

127

în care: H = diag(hi), D = diag(di), L este matrice inferior triunghiulară cu elemente diagonale unitate, hi ≥ 0, di > δ, kik dl /|| β≤ , i > k, ni ,1= , iar β > 0 şi δ > 0 sunt alese convenabil (valoarea lui β trebuie să fie suficient de mare pentru ca kG să nu fie modificată inutil). B. Metoda regiunii de încredere în model. Această metodă utilizează un model pătratic într-o regiune limitată, numită de încredere şi referitoare la norma direcţiei de căutare. Astfel, în punctul vk direcţia dk este soluţia următoarei probleme de optimizare:

dGddgddd

kTTkkkk fJ )2/1()()( :PRE minarg ++=Φ== ,

supusă la k∆≤|||| d , (9.4.7)

în care k∆ este o margine dată, care specifică raza sferei cu centrul în vk, unde este valabilă aproximarea )(dkΦ pentru )( dv +kf . Poate fi observat faptul că în cadrul acestei metode lungimea pasului este egală cu unitatea. Algoritmul general al metodei regiunii de încredere pentru PFR porneşte cu elementele date: v0 ∈ Rn, Δ0 > 0, 0 < μ < 1 şi constă în parcurgerea următorilor paşi: 0. Iniţializare. k = 0. 1. Test de convergenţă. Dacă sunt satisfăcute condiţiile de convergenţă, algoritmul este terminat cu soluţia vk. Altfel, se trece la pasul 2. 2. Determinarea direcţiei de căutare. Se calculează direcţia de căutare dk ca soluţie a PO (9.4.7). 3. Calculul raportului dintre reducerea efectivă şi cea predictată de model. Se calculează:

)()()()(

0dvdv

kkk

kkkk ff

Φ−Φ−+=ρ . (9.4.8)

4. Actualizarea estimaţiei minimului. Dacă µ>ρk , atunci se actualizează kkk dvv +=+1 .

Altfel, kk vv =+1 . 5. Actualizarea modelului. Se actualizează Δk, se actualizează k prin înlocuire a lui k cu k+1 şi se revine la pasul 1. Pentru această metodă este caracteristic faptul că problema determinării direcţiei de căutare depinde numai de parametrul de control Δk. Deci, nu sunt necesare modificări ale modelului local pentru controlul lungimii pasului, iar toate ajustările sunt efectuate automat prin actualizarea lui Δk (la pasul 5) pe baza informaţiei conţinute în kρ .

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 operaţională. Definirea unei probleme de programare liniară în varianta standard este următoarea:

vcvv

TJ == min argˆ:PREI , supusă la 0vbvA ≥= , , (9.5.1)

Page 16: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

128

în care v este vectorul coloană cu n componente al variabilelor. Constantele sunt date sub forma unei matrice coloană T

21 ]...[ mbbb =b , a matricei

njmiija,1,1][

===A şi a matricei linie ]...[ 21 n

T ccc =c .

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 denumirea de metodă de punct interior. Pentru garantarea faptului că metoda porneşte dintr-un punct iniţial interior v0 > 0 se adaugă o coloană matricei A, ale cărei elemente se obţin prin scăderea sumei coloanelor matricei A din matricea coloană b. Apoi, acestei coloane suplimentare i se ataşează o variabilă suplimentară şi un element suplimentar în matricea cT. Pentru a garanta faptul că variabila suplimentară tinde către zero atunci când este atins optimul, valoarea acestui element suplimentar trebuie să fie foarte mare. Conform acestei abordări este evident că v0 = [1 1 ... 1]T se încadrează în restricţia menţionată, v0 > 0. Prin urmare, algoritmul de rezolvare a problemei de programare liniară în varianta Barnes conţine următorii paşi: 0. Presupunând că PO are n variabile, se fac iniţializările:

∑=

+ −=n

jijini aba

11, , cn+1 = 100000 , v0 = [1 1 ... 1]T , k = 0 . (9.5.2)

1. Se iniţializează Dk = diag(vk), cu vk = [v1k v2k ... vn

k]T, şi se calculează un punct îmbunătăţit (din punctul de vedere al reducerii valorii FO) cu formula (9.5.3):

Page 17: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

129

||)(||)()( 2

1kTk

kTkkk s

λAcDλAcDvv

−−−=+ , (9.5.3)

unde prin norma matricei a fost notată cea mai mare valoare singulară a acesteia, vectorul kλ este dat de (9.5.4):

cDAADAλ 212 )(])([ kTkk −= , (9.5.4)

iar pasul s este ales astfel încât este satisfăcută condiţia:

α−−−

==

||)(

)(||min,1

kTjj

kj

kTk

nj cvs

λAλAcD , supusă la njc kT

jj ,1,0)( =>− λA , (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 1ˆ += kvv şi algoritmul este oprit. Altfel, se înlocuieşte k cu k + 1 şi se revine la pasul 1. Observaţii: 1. În pasul 2 al algoritmului a fost folosit un rezultat important în programarea liniară conform căruia oricărei probleme primale (adică problema originală din (9.5.1)) îi corespunde o problemă duală şi în caz că există o soluţie a PO, valorile optimale ale FO sunt egale. Alte variante de rezolvare a PO utilizează modalităţi diferite de terminare a procesului iterativ de calcul. 2. Algoritmul asigură îmbunătăţirea iterativă a soluţiei pornind de la punctul iniţial v0 şi calculul valorii maxime a pasului care garantează că vk > 0 în direcţia dată de )()( 2 kTk λAcD − . Această direcţie reprezintă elementul esenţial al algoritmului şi este de fapt proiecţia coeficienţilor FO în spaţiul restricţiilor.

9.6. Algoritmi genetici în rezolvarea problemelor de programare matematică

Algoritmii genetici (AG), introduşi de J. Holland în 1975, fac parte dintr-o serie de metode moderne de căutare, care abordează cu succes probleme de optimizare complexe. Ei sunt bazaţi pe paradigma biologică a evoluţiei vieţii, mai exact pe „mecanica selecţiei naturale şi a geneticii, rezultând algoritmi în care este implicat şi flerul inovator al căutării umane” [G5]. Gândirea evolutivă este extinsă astăzi în afara ştiinţelor vieţii. Astfel, evoluţia este privită ca o metodă de optimizare bazată pe populaţie, putând fi simulată utilizând metode numerice asistate de calculator. Scopul acestui paragraf este de a introduce ideile de bază în mecanismele de operare din cadrul algoritmilor genetici, cu accent pe oferirea unui set de funcţii Matlab care implementează proprietăţile esenţiale ale unui AG. Pentru urmărirea unor aspecte detaliate privind AG sunt recomandate lucrările [D6] şi [G5]. În cele ce urmează va fi descrisă terminologia privind AG şi legătura cu rezolvarea asistată de calculator a problemelor de optimizare, în particular a celor de programare matematică. AG operează cu o populaţie iniţială care corespunde, de exemplu, valorilor numerice ale unei anumite variabile (unui anumit element

Page 18: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

130

programabil). Dimensiunea acestei populaţii nu este constantă şi este în general dependentă de problema de rezolvat. Membrii acestei populaţii sunt de regulă şiruri alcătuite din 0 şi 1, adică şiruri binare. În fig.9.2 este prezentat un exemplu de populaţie iniţială într-o primă generaţie şi având dimensiune mică (10):

1100010101 0000100010 1000000001 0001100010 1101110101 0001000100 1111111000 0000000001 1100001000 1111111111

Fig.9.2. Exemplu de populaţie iniţială.

Însă, în practică dimensiunea populaţiei este mult mai mare decât cea din exemplul prezentat. În plus, şirurile au lungime mai mare. Şirurile binare pot reprezenta valorile codate ale unei sau unor variabile de interes. 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 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.

Tabelul 9.1. Exemplu de populaţie şi funcţia de evaluare aferentă. Nr. crt.

Cromozomi Funcţie de evaluare

1 2 3 4 5 6

1100010101 0000100010 1000000001 0001100010 1101110101 0001000100

9 7 6 5 5 4

Page 19: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

131

7 8 9 10

1111111000 0000000001 1100001000 1111111111

3 3 2 1

Total: 45

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 continuu la schimbările de mediu au şansele cele mai mari de supravieţuire. 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 necesară scalarea permanentă a funcţiei de evaluare, care este obligatorie la selecţia pe baza principiului ruletei (pentru prevenirea apariţiei indivizilor dominanţi, care conduc la convergenţa spre o soluţie care nu este optimală).

• Selecţia elitistă, tehnică euristică destinată reţinerii întotdeauna a celui mai bun cromozom al populaţiei. Această tehnică va garanta convergenţa asimptotică spre un minim global, însă viteza de convergenţă diferă de la o problemă de optimizare la alta.

Page 20: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

132

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ă ce-l 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.

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 ce-a 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.

Page 21: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

133

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:

• 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 l}1,0{ şi schema reprezintă un element S din spatiul l,*}1,0{ , 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 (*)

Page 22: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

134

î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ă lk )1( + scheme, unde l este lungimea cromozomului. De asemenea, un cromozom de lungime l aparţine la l2 scheme diferite, deoarece fiecare poziţie a sa poate lua valoarea curentă sau poate fi simbolul (*). Deci, pentru o populaţie de n cromomzomi, aceasta conţine un număr între l2 şi ln 2⋅ scheme. În acest fel, populaţii cu mărime moderată conţin informaţii importante relative la similitudinile semnificative menţionate.

Fiecărei scheme îi este asociată o funcţie de performanţă (de evaluare) notată cu Sf , care reprezintă evaluarea medie a membrilor populaţiei.

Fiecare schemă are o lungime definitorie δ , care este distanţa dintre primul şi ultimul simbol specific, diferite de *.

Poate fi observat că încrucişarea tinde să rupă schemele având lungime mare dacă punctele de tăiere sunt alese uniform aleatoriu. De exemplu, schema 1*****01 are o probabilitate mai mare de a fi tăiată decât schema *****10* (6/7 faţă de 1/7). Poate fi domonstrat că probabilitatea Sp de supravieţuire în urma încrucişării, pentru o schemă de lungime definitorie δ în cazul unui singur punct de încrucişare, satisface inegalitatea (9.6.1):

11

−δ−≥

lpp CS , (9.6.1)

în care Cp este probabilitatea de încrucişare iar l reprezintă lungimea schemei. Probabilitatea de încrucişare Cp este un parametru specific AG.

Fie m(t) numărul de apariţii ale unei scheme S în populaţia de la momentul t. Efectul selecţiei asupra acestui număr de apariţii este dat de formula (9.6.2):

∑=

⋅=+n

ii

S

f

ftmntm

1

)()1( , (9.6.2)

unde Sf 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 medf şi are următoarea expresie:

∑=

=n

iimed f

nf

1

1 . (9.6.3)

Utilizând medf , ecuaţia de evoluţie a numărului de apariţii ale schemei S, atunci când se aplică doar operatorul de selecţie, devine:

med

S

fftmtm )()1( =+ . (9.6.4)

În ipoteza (9.6.5):

medS ff > , (9.6.5)

adică schema S este mai performantă decât media performanţelor populaţiei, atunci:

)()1( tmtm >+ , (9.6.6)

Page 23: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

135

adică 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 exprimă prin relaţia (9.6.7):

−δ−≥+1

1)()1(l

pff

tmtm cmed

S , (9.6.7)

î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 într-un 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ă în soluţii globale mai bune.

Se spune că o mărime oarecare are ordinul )( pnO 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 într-o generaţie, se pune problema calculării numărului de scheme procesate eficient în fiecare generaţie. Această valoare este de ordinul )( 3nO , 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ă

Page 24: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

136

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.

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

23 3 max argˆ:PRE xxJvv

+== , supusă la 42 ≤≤ v . (9.6.8)

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.

De asemenea, 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));

Page 25: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

137

Pentru generarea unei polulaţii iniţiale formate din 5 cromozomi, fiecare conţinând câte 6 gene, în continuare este apelată funcţia fgeninit din linia de comandă Matlab, rezultatul prezentat imediat fiind matricea cromozomi conţinând populaţia: >> cromozomi=fgeninit(6,5) cromozomi = 1 1 1 0 0 0 (cromozom 1) 0 0 1 1 0 0 (cromozom 2) 1 0 1 1 1 1 (cromozom 3) 0 1 1 0 0 0 (cromoxom 4) 1 0 0 1 0 0 (cromozom 5)

Întrucât RTE din formularea (9.6.8) a PO specifică faptul că sunt de interes doar valorile variabilei v între 2 şi 4, şirurile binare obţinute anterior trebuie transformate în valori situate în intervalul 42 ≤≤ v . În acest scop este dezvoltată funcţia Matlab fbinreal prezentată în cele ce urmează, care efectuează conversia unor valori binare în valori reale situate într-un domeniu dorit: function reala=fbinreal(cromozomi,a,b) % Functie utilizata in conversia unor % siruri binare in valori reale % % cromozomi este matricea continand populatia % de cromozomi care va fi convertita, % a si b sunt limitele intervalului % caruia ii vor apartine valorile reale. % % reala este matricea generata cu valorile reale. % [nrcrom lungcrom]=size(cromozomi); % dimensiuni % populatie crommax=2^lungcrom-1; elreale=cromozomi.*((2*ones(1,lungcrom)).^... fliplr([0:lungcrom-1])); total=sum(elreale); % elemente reale totale % (nescalate) reala=a+total*(b-a)/crommax;

Apelând această funcţie pentru conversia populaţiei generate anterior (formată din cei 5 cromozomi), se obţine: >> for i=1:5, valreala(i)=fbinreal(cromozomi(i,:),2,4); end >> valreala valreala = 3.7778 2.3810 3.4921 2.7619 3.1429

După cum era de aşteptat, cele 5 valori reale verifică RTE şi asigură o populaţie iniţială de valori ale variabilei progamabile v.

Totuşi, aceste valori reale nu spun absolut nimic despre valoarea funcţiei lor de evaluare (performanţă), care trebuie definită. În cazul rezolvării PO (9.6.8), care este o problemă de maximizare, cea mai simplă variantă de alegere a expresiei funcţiei de evaluare constă în considerarea tocmai a funcţiei obiectiv ca funcţie de evaluare, definită în funcţia Matlab fevaluare:

Page 26: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

138

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.

Page 27: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

139

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

Page 28: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

140

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 = 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 dintr-o 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. % % Initializari: indrep=[ ]; crom1=cromozomi; [nrcrom lungcrom]=size(cromozomi); % dimensiuni % populatie ind=1:nrcrom; u=floor(nrcrom*propor); if floor(u/2)~=u/2,

Page 29: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

141

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:

Page 30: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

142

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

Page 31: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

143

% 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, % dimpop este dimensiunea populatiei (de % cromozomi), % numgenera este numarul de generatii, % rata este rata (probabilitatea) mutatiei, % propor este proportia (subunitara) din numarul % de cromozomi supus reproducerii. % % valv este valoarea optimala a variabilei % (elementului programabil) v, % fmax este valoarea maxima a functiei % obiectiv (utilizata ca functie de evaluare). % % Initializari: popnoua=[ ]; a=domeniu(1); b=domeniu(2); % % Generare populatie initiala: popnoua=fgeninit(biti,dimpop); for i=1:numgenera, % Selectie: popsel=fselect(popnoua,fun,a,b); % Incrucisare: gennoua=freprod(popsel,propor); % Mutatie: gennoua1=fmutatie(gennoua,rata); popnoua=gennoua1; end % % Calcul functie de evaluare: [fit,fitsum]=fitness(popnoua,fun,a,b); % % Alegere cromozom cel mai performant % si calcul valoare maxima functie obiectiv: [fmax,indcelmai]=max(fit); % % Valoare optimala pentru v: valv=fbinreal(popnoua(indcelmai,:),a,b);

Trebuie remarcat faptul că AG implementat în cadrul funcţiei falggen nu garantează găsirea soluţiei optimale în cazul mai existenţei mai multor maxime locale. În plus, algoritmul este lent dacă sunt dorite soluţii de precizie relativ mare.

Aplicând funcţia Matlab falggen în rezolvarea PO (9.6.8), este specificat domeniul de variaţie al lui v între 2 şi 4 (RTE), sunt utilizaţi 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)

Page 32: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

144

valv = 3.9059 fmax = 105.3556

Întrucât soluţia exactă a PO este 4ˆ =v , 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.

9.7. 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.

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,...)

unde ’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.

Page 33: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

145

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] 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 paragraful 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

Page 34: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

146

% 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 % de asemenea 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), % gradi este gradientul functiei obiectiv, calculate % in punctul v = sol, % nriter este numarul de iteratii pana la obtinerea % lui sol. % global p1 d1; n=size(v); nriter=0; % % Calculul gradientului initial: df=feval(gradf,v); % % Bucla principala: while norm(df)>eps, nriter=nriter+1; df=feval(gradf,v); d1=-df; % % Bucla interna: for intern=1:n, p1=v; % Precizia cautarii liniare = 0.00005; % poate fi imbunatatita prin scadere % Parametrii cautarii liniare: 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

Page 35: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

147

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]:

.][

,2

5162

516)( min argˆ:PFR

221

22

24

2121

41

Rvv

vvvvvvfJ

T ∈=

+−+

+−===

v

vvv

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

Page 36: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

148

Î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 paragraful 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 % restrictiilor de tip egalitate, % c' este matricea linie a coeficientilor % variabilelor din functia obiectiv, % eps este precizia dorita. % % solv este solutia problemei de optimizare % (valoarea optimala a lui v), % solf este valoarea minima a functiei obiectiv, % solf=f(solv), % lista este vectorul linie cu indicii valorilor % optimale nenule ale variabilelor, % iter este numarul de iteratii pana la % atingerea lui fsol. % v2=[]; v=[]; [m n]=size(A); % % Definirea problemei initiale (pasul 0): aplus1=b-sum(A(1:m,:)')'; cplus1=1000000; A=[A aplus1]; cp=[c' cplus1]; B=[]; n=n+1; v0=ones(n,1); v=v0; alpha=.0001; lambda=zeros(m,1); iter=0; % % Bucla principala (pasul 1 si pasul 2): while abs(cp*v-lambda'*b)>eps, v2=v.*v; D=diag(v); D2=diag(v2); AD2=A*D2; lambda=(AD2*A')\(AD2*cp'); rezdual=cp'-A'*lambda; reznorm=norm(D*rezdual); for i=1:n, if rezdual(i)>0,

Page 37: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

149

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]:

321 42)( max argˆ:PREI vvvfJ ++=== vvv

, 3321 ][ Rvvv T ∈=v ,

supusă la: 7321 ≤++ vvv , 1232 321 ≤++ vvv , 0,, 321 ≥vvv .

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ă:

Page 38: Cap. 9. REZOLVAREA NUMERICĂ A PROBLEMELOR DE

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

150

321 42)( min argˆ:PREI vvvfJ −−−=−=−= vvv

, 554321 ][ Rvvvvv T ∈=v ,

supusă la: 74321 =+++ vvvv ,

1232 5321 =+++ vvvv , 0,,,, 54321 ≥vvvvv .

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ă T]5.205.4[ˆ =v , valoarea maximă a FO fiind: fmax = 19.

Rămân ca teme de abordat de către cititor următoarele: 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. 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.