Sunteți pe pagina 1din 38

Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

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:

113
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

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:
J : Π0f → R , (9.1.2)
care asociază fiecărui proces admisibil Π = {x(t ), u(t ), ! , p a } ⊂ Π 0 f un număr
real prin care este apreciată calitatea absolută a procesului Π în raport cu
mulţimea Π 0 f .
Pentru sistemele cu timp continuu, forma generală a FO este (9.1.3):
J (t 0 , x 0 , t f , x f , x(t ), u (t ), p c , p a ) =
tf
(9.1.3)
= θ(t 0 , x 0 , t f , x f ) + ∫ E (x(t ), u (t ), t )dt .
t0

Termenul θ , numit componentă de tip Mayer, evaluează calitatea


capetelor traiectoriei.

114
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

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):
J = θ(t0 , x0 , t f , x f ) , (9.1.4)

care “penalizează” capetelor traiectoriei şi de criteriu de tip Lagrange,


corespunzător FO (9.1.5):
tf
J= ∫ E (x(t ), u(t ), t )dt , (9.1.5)
t0

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:
J (t k 0 , x k 0 , t kf , x kf , x k , u k , p c , p a ) =
k f −1
(9.1.6)
= θ(t h 0 , x k 0 , t kf , x kf ) + ∑ E k (x k , u k ) ,
k = k0

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):
J = θ(x, u) . (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ă û(t ) ∈ U sau
uˆ k ∈ U , ∀t ∈ T0 f , k = k 0 , k f − 1 , 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 Π 0 f a proceselor
admisibile. Dacă mulţimea U este compactă, în cazul minimizării poate fi
exprimat rezultatul:
uˆ = arg min J (u), u ∈ U . (9.1.8)
u

Altfel spus, comanda optimală este acea funcţie de comandă admisibilă care
minimizează funcţia obiectiv J.
În cazul sistemelor discrete, în care comanda optimală este reprezentată
de un şir de vectori {uˆ k 0 , uˆ k 0 +1 , ! , uˆ kf −1 } aplicat secvenţial la intrarea

115
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

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ă, uˆ = uˆ (t , x) sau uˆ = uˆ k ( x k ) .
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ă:
A : vˆ = arg min J = B( v) , supusă la RTE, RTI, (9.1.9)
v

î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ă:
PFR : vˆ = arg min J = f ( v ), v ∈ R n . (9.2.1)
v

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:
f ( v k +1 ) < f ( v k ), k = 0,1,... , (9.2.2)
unde k este numărul iteraţiei curente.
În general, metodele de relaxare au următoarea structură recurentă:
v k +1 = v k + s k d k , k = 0,1,... , (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:
v k +1 − v k = ∆v k = s k d k , k = 0,1,... , (9.2.4)

116
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

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
k
s >0 astfel încât (a se vedea relaţiile (9.2.2) şi (9.2.3)):
f ( v k + s k d k ) < f ( v k ), k = 0,1,... . (9.2.5)
Etapa 4 (actualizarea estimaţiei minimului). Se efectuează:
v ← v + s k d k , k = k + 1 şi se trece la etapa 1.
k k

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):
lim || f v ( v k ) ||= 0 . (9.2.6)
k →∞

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:
T
 ∂f ∂f ∂f 
f v (v* ) =  !  , v = [v1 v2 ! vn ] .
T
(9.2.7)
 ∂v1 ∂v 2 ∂v n  v = v *

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,

117
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

-
metodele de căutare aleatoare care includ cele bazate pe algoritmi
genetici, cele de călire simulată (simulated annealing), etc.
Deşi sunt relativ simple şi uşor de implementat, metodele de ordinul
zero nu sunt utilizate în problemele de conducere (decizie) optimală datorită
incapacităţii de explorare a structurii particulare a acestor clase de probleme de
optimizare.
B. Metodele de ordinul I (de căutare liniară). Aceste metode necesită calculul
valorii FO şi al gradientului acesteia în punctul curent vk. Din această categorie
fac parte:
- metodele de gradient,
- metodele de gradient conjugat,
- metodele de metrică variabilă.
Metodele de căutare liniară realizează un compromis favorabil între
simplitate şi eficienţă, fiind utilizate cel mai des în practică.
C. Metodele de ordinul II (de tip Newton). Aceste metode necesită calculul
valorii FO, al gradientului şi hessianului acesteia precum şi inversarea
hessianului în punctul curent vk.
Observaţie: Derivata a doua a unei funcţii reale f de variabilă vectorială
v, calculată în punctul v*, are forma unei matrici pătratice numită matricea lui
Hess (hessian):
 ∂2 f ∂2 f ∂2 f 
 " 
 ∂v1
2 ∂v1∂v 2 ∂v1 ∂v n 
 ∂2 f ∂2 f ∂2 f 
 
, v = [v1 ! vn ] .
* " T
f vv ( v ) =  ∂v 2 ∂v1 ∂v 22 ∂v 2 ∂v n  v2 (9.2.8)
 " 
 2 
 ∂ f ∂2 f ∂2 f 
"
 ∂v n ∂v1 ∂v n ∂v 2 ∂v n2  v = v *

Deşi sunt relativ complicate, metodele de tip Newton asigură o viteză
de convergenţă ridicată şi o precizie ridicată de găsire a punctului de optim, v̂ .
Observaţie: În cele ce urmează vor fi utilizate notaţiile consacrate:
k k +1
f = f ( v k ), f = f ( v k + s k d k ), g k = f v ( v k ), G k = f vv ( v k ) . (9.2.9)

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):
(g k ) T d k < 0, k = 0,1,... . (9.3.1)
Dacă dk este direcţie de descreştere, atunci există un s > 0 astfel încât:
f ( v k + s ⋅ d k ) < f ( v k ), k = 0,1,... . (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 ŝ k , din condiţia realizării
minimului fucţiei obiectiv f în direcţia dk:

118
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

f ( v k + sˆ k d k ) = min f ( v k + s ⋅ d k ) . (9.3.3)
s ≥0

Pentru rezolvarea problemei de optimizare (9.3.3) se consideră pentru


simplitate funcţia:
f 1 : R → R, f 1 ( s ) = f ( v k + s ⋅ d k ) − f ( v k ) . (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 : sˆ k = arg min f 1 ( s ) . (9.3.5)
s ≥0

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 ŝ k , urmată
de reducerea iterativă a lungimii acestui interval până la alegerea unei precizii
impuse ε > 0 de localizare a lui ŝ k . 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ă ŝ k pentru fiecare i dat.
În continuare va fi prezentată metoda secţiunii de aur, care asigură
avantajele de precizie satisfăcătoare, simplitate şi stabilitate în raport cu erorile
de rotunjire.
Se presupune că funcţia f1 este convexă. Algoritmul metodei secţiunii
de aur construieşte într-un număr finit de paşi un interval (de lungime cel mult
egală cu ε) care conţine punctul de minim ŝ k . Pornind de la o aproximaţie
iniţială de forma [0, c], în etapele 1 – 6 este determinat un interval iniţial [a0,
b0] care conţine pe ŝ k . Apoi acest interval este contractat progresiv până la
satisfacerea condiţiei de precizie Li ≤ ε, unde Li reprezintă lungimea intervalului
[ai, bi], Li = bi – ai, care conţine pe ŝ k . În final este obţinut punctul de minim ca
medie aritmetică a limitelor intervalului de căutare:
a i + bi
sˆ k = s = . (9.3.6)
2
Considerând că sunt date numerele c > 0 şi ε > 0 şi definind:
3− 5 −1 + 5
F= , G = 1− F = , (9.3.7)
2 2
algoritmul metodei secţiunii de aur constă în următorii paşi:
1. Se calculează f1(c).
2. Dacă f1(c) ≥ 0, atunci a0 = 0, b0 = 0 şi urmează salt la pasul 7.
3. Se iniţializează j = 1, d1 = c.
4. Se calculează dj+1 = dj + c.
5. Se calculează f1(dj+1).
6. Dacă f1(dj+1) ≥ f1(dj), atunci se iniţializează limitele actuale ale intervalului de
căutare a0 = dj, b0 = dj+1 şi urmează salt la pasul 7.
Altfel, se înlocuieşte j cu j + 1 şi se revine la pasul 4.
7. Se iniţializează i = 0.

119
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

8. Se calculează Li = bi – ai.
a i + bi
Dacă Li ≤ ε, atunci se calculează sˆ k = şi algoritmul este terminat.
2
Altfel, se trece la pasul 9.
9. Se calculează ui = ai + F·Li, vi = ai + G·Li, f1(ui), f1(vi).
10. Dacă f1(ui) < f1(vi), atunci se actualizează limitele intervalului de căutare:
ai+1 = ai, bi+1 = vi, apoi se înlocuieşte i cu i + 1 şi se revine la pasul 8.
Altfel, se actualizează limitele intervalului de căutare conform altei
formule: ai+1 = ui, bi+1 = bi, apoi se înlocuieşte i cu i + 1 şi se revine la pasul 8.
Observaţii: 1. La fiecare iteraţie i este de fapt necesară o singură
evaluare a funcţiei f.
2. Urmărind paşii algoritmului, se constată că Li+1 = G·Li, deci lungimea
intervalului scade în progresie aritmetică având raţia G specifică metodei
secţiunii de aur.
A.2. Metode de interpolare. În ipoteza că funcţia f1 este netedă, cele mai
eficiente metode se bazează pe aproximarea lui f1 cu o funcţie f* relativ simplă,
iar minimul acestei funcţii poate fi calculat mai uşor decât minimul lui f1 şi
poate fi utilizat iterativ ca o estimaţie a minimului funcţiei f1. De regulă, f1 este
aleasă o funcţie polinomială de grad mic (doi sau trei), iar metoda de
minimizare este numită metoda interpolării polinomiale (pătratice, respectiv
cubice).
Este preferată interpolarea pătratică atunci când sunt disponibile doar
valorile funcţiei sau atunci când este complicată evaluarea derivatei
direcţionale a funcţiei f1, conform formulei obţinute din (9.3.4):
'
f 1 (s) = f v T ( v k + s ⋅ d k ) ⋅ d k . (9.3.8)
În această situaţie funcţia f* are expresia:
f * ( s) = c 2 s 2 + c1 s + c 0 , c 2 > 0 , (9.3.9)
cu abscisa punctului de minim:
c1
sˆ * = − . (9.3.10)
2c 2

Pentru determinarea coeficienţilor din (9.3.9) sunt necesare trei valori


calculate pentru abscisele sk, sk−1 şi sk−2, astfel că expresia explicită a minimului
devine:
sˆ * = { f * ( s k − 2 )[(s k ) 2 − ( s k −1 ) 2 ] + f * ( s k −1 )[(s k − 2 ) 2 − ( s k ) 2 ] +
+ f * ( s k )[(s k −1 ) 2 − ( s k − 2 ) 2 ]} /{ f * ( s k − 2 )( s k − s k −1 ) + . (9.3.11)
* k −1 k −2 k * k k −1 k −2
+ f (s )( s − s ) + f ( s )( s −s )}
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ă.

120
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

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 ( v k + s k d k ) să fie suficent de mică în raport cu
cea din punctul v k :
| f v T ( v k + s k d k ) ⋅ d k |≤ −η(g k ) T d k , (9.3.12)
cu 0 ≤ η < 1. Valoarea constantei η determină precizia cu care sk aproximează
pe ŝ k . 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):
k k +1
f −f ≥ −µ ⋅ s k (g k ) T d k , (9.3.13)
cu 0 < μ < 1/2.
Valorile uzuale pentru constantele η şi μ sunt:
10 −5 ≤ µ ≤ 10 −1 , µ < η < 1 . (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ă f v T ( v k + s k d k ) ⋅ d k > 0 , atunci se determină o nouă valoare a lui sk
utilizând, de exemplu, interpolarea cubică şi urmează salt la pasul 2.
Altfel, se trece la pasul 4.
4. Cazul f v T ( v k + s k d k ) ⋅ d k < 0 .
Se înlocuieşte v k cu ( v k + s k d k ) şi se actualizează valoarea lui sk cu o formulă
de extrapolare, prin înlocuire cu c·sk, în care 2 < c < 10. Urmează salt la pasul
2.
5. Dacă valoarea curentă sk satisface (9.3.13), atunci sˆ k = s k şi algoritmul este
terminat.
Observaţii: 1. În algoritmul prezentat sunt repetate intepolarea şi
extrapolarea până la satisfacerea simultană a ambelor condiţii, (9.3.12) şi
(9.3.13).
2. O alegere a unei valori mici pentru μ (de exemplu, μ = 10−4) conduce
în majoritatea cazurilor la satisfacerea condiţiei (9.3.13) atunci când (9.3.12)
este deja satisfăcută.
C. Metoda Armijo. Această metodă se bazează în principal pe condiţia de
descreştere suficientă exprimată sub forma relaţiei (9.3.13), echivalentă cu:
k +1 k
f −f ≤ µ ⋅ s k (g k ) T d k . (9.3.15)

121
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

Condiţia (9.3.15) poate fi interpretată grafic (fig.9.1) prin necesitatea ca


în planul <s, f> diferenţa f k +1 − f k (notată cu (1)) să fie situată sub dreapta de
ecuaţie f = µ ⋅ s k (g k ) T d k (notată cu (2)). În fig.9.1 au fost marcate mulţimile de
valori acceptabile pentru sk.
Algoritmul metodei Armijo constă în paşii prezentaţi în continuare:
1. Se efectuează iniţializarea: sk = s > 0. Se alege β, 0 < β < 1.
2. Dacă valoarea curentă a lui sk satisface (9.3.13), atunci sˆ k = s k şi algoritmul
este terminat.
Altfel, se trece la pasul 3.
3. Se actualizează valoarea lui sk prin înlocuire cu β·sk şi urmează salt la pasul
2.

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


D. Metodele cvasi-Newton. Prin dezvoltarea în serie Taylor a funcţiei
f ( v k + s k d k ) în vecinătarea punctului v k şi reţinerea doar a termenilor de
ordinul întâi şi doi, rezultă:
f (v k + s k d k ) ≈ f k
+ (g k ) T s k d k + (1 / 2)( s k d k ) T G k ( s k d k ) =
. (9.3.16)
= f k
+ (g k ) T s k d k + (1 / 2)( s k ) 2 (d k ) T G k d k

Minimul expresiei (9.3.16) poate fi obţinut dacă următoarea funcţie de


variabilă independentă dk (direcţia de căutare):
Φ : R n → R, Φ(d k ) = (g k ) T s k d k + (1 / 2)(s k ) 2 (d k ) T G k d k , (9.3.17)
îşi atinge minimul. Anulând gradientul lui Φ, se obţine punctul staţionar d k *
care satisface sistemul de ecuaţii liniare (9.3.18):
Φ d k * (d k * ) = s k g k + ( s k ) 2 G k d k * = 0 ⇒ s k G k d k * = −g k . (9.3.18)

În acest context, o metodă de minimizare cu direcţia de căutare optimală d k *


definită de (9.3.18) este numită metodă Newton, soluţia d k * este numită
direcţie Newton, iar sistemul de ecuaţii liniare (9.3.18) este numit ecuaţie
Newton.
Metodele cvasi-Newton construiesc iterativ o aproximare Bk, pozitiv
definită, cu notaţia Bk > 0, a matricei hessian Gk, fără a calcula explicit pe Gk.
Direcţia de căutare d k este determinată ca soluţie a unui sistem analog lui
(9.3.18):
s k B k d k = −g k , (9.3.19)
în care pasul de căutare sk este determinat cu una din metodele de căutare
liniară descrise la punctele A, B şi C.
Se introduce notaţia:
t k = v k +1 − v k = s k d k , (9.3.20)

122
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

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ă:
f v ( v k +1 ) − f v ( v k ) ≈ f vv ( v k +1 )( v k +1 − v k ) . (9.3.21)
Notând:
y k = f v ( v k +1 ) − f v ( v k ) = g k +1 − g k (9.3.22)
şi ţinând seama de faptul că Bk+1 este o aproximaţie pentru hessianul f vv ( v k +1 ) ,
relaţia (9.3.21) se transformă în ecuaţia cvasi-Newton:
B k +1t k = y k . (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:
PRE : Bˆ k +1 = arg min || B k +1 − B k || F supusă la B simetrică şi
k+1

B k +1

Bk+1 satisface (9.3.23), (9.3.24)


în care ||A||F reprezintă norma Frobenius ponderată F a matricei
A = (a ij ) i =1, n , cu expresia:
j =1, m

n m
|| A || F = ∑ ∑ a ij 2 . (9.3.25)
i =1 j =1

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


1
Bˆ k +1 = B k + [(y k − B k t k )(t k ) T + t k (y k − B k t k ) T ] −
(t ) t kk T
. (9.3.26)
(y k − B k t k ) T t k k k T
− t (t )
[(t k ) T t k ] 2
Prin utilizarea unor alte variante de norme Frobenius ponderate rezultă
două formule cunoscute:
- formula Davidon-Fletcher-Powell:
1
Bˆ k +1 = B k + [(y k − B k t k )(y k ) T + y k (y k − B k t k ) T ] −
(y ) t kk T
; (9.3.27)
(y k − B k t k ) T t k k k T
− y (y )
[(y k ) T t k ] 2
- formula Broyden-Fletcher-Goldfarb-Shanno:
1 1
Bˆ k +1 = B k + k T k
y k (y k ) T − k T k k
B k t k (t k ) T B k ; (9.3.28)
(y ) t (t ) B t

ambele au proprietatea că dacă Bk > 0 şi (y k ) T t k > 0 , atunci Bˆ k +1 > 0 .


Determinarea direcţiei de căutare dk presupune rezolvarea unui sistem
de ecuaţii liniare la fiecare iteraţie. De aceea, primele versiuni ale metodelor
cvasi-Newton au fost formulate în funcţie de inversa hessianului, Hk = (Gk)−1.
În aceste condiţii, direcţia de căutare este obţinută prin rescrierea ecuaţiei
(9.3.18):
d k = −( s k ) −1 H k g k , (9.3.29)
iar condiţia cvasi-Newton (9.3.23) devine:

123
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

H k +1 y k = t k . (9.3.30)
Problema principală în implementarea algoritmilor dedicaţi metodelor
cvasi-Newton constă în păstrarea pozitivităţii matricelor Bk sau Hk.
Algoritmul de calcul al punctului de minim v̂ al funcţiei obiectiv f prin metoda
cvasi-Newton cu pas variabil este alcătuit din următorii paşi:
0. Se alege un punct iniţial v0 ∈ Rn.
1. Se iniţializează k = 0.
2. Se calculează g k = f v ( v k ) .
Dacă || g k ||= 0 , atunci vˆ = v k şi algoritmul este oprit.
Altfel, se trece la pasul 3.
3. Se calculează Bk cu una din metodele cunoscute.
Dacă Bk > 0, atunci se trece la pasul 4.
Altfel, se calculează d k = −g k şi urmează salt la pasul 5.
4. Se determină direcţia dk rezolvând sistemul liniar B k d k = −g k .
5. Se determină pasul sk utilizând unul din algoritmii prezentaţi în paragrafele A
sau B.
6. Se calculează v k +1 = v k + s k d k , se actualizează k prin înlocuirea lui k cu k+1
şi se revine la pasul 2.
E. Metodele de gradient. Aceste metode sunt tipic de ordinul I şi sunt
caracterizate prin alegerea în fiecare punct curent vk a unei direcţii de deplasare
dk opusă gradientului local:
d k = −g k . (9.3.31)
Dezvoltând în serie Taylor funcţia f (v k + s k d k ) în vecinătarea
k
punctului v şi reţinând doar termenii de ordinul întâi, se obţine:
f ( v k + s k d k ) ≈ f ( v k ) + (g k ) T s k d k . (9.3.32)
Însă,
(g k ) T s k d k = s k (g k ) T d k ≤ s k || g k || 2 , ∀d k , (9.3.33)
egalitatea având loc numai în cazul (9.3.31). Prin urmare, pentru orice pas sk >
0 alegerea direcţiei de căutare conform relaţiei (9.3.31) asigură local
descreşterea maximă posibilă a funcţiei obiectiv f.
Algoritmul de calcul al punctului de minim v̂ prin metoda
gradientului este prezentat în cele ce urmează:
0. Se alege un punct iniţial v0 ∈ Rn astfel încât mulţimea { v ∈ Rn | f(v) ≤ f(v0) }
să fie mărginită.
1. Se iniţializează k = 0.
2. Se calculează g k = f v ( v k ) .
Dacă || g k ||= 0 , atunci vˆ = v k şi algoritmul este oprit.
Altfel, se alege direcţia d k = −g k şi se trece la pasul 3.
3. Se determină pasul sk utilizând unul din algoritmii din paragrafele A sau B.
4. Se calculează v k +1 = v k + s k d k , se actualizează k prin înlocuirea lui k cu k+1
şi se revine la pasul 2.
F. Metodele de gradient conjugat. Aceste metode au principalul avantaj că au
o convergenţă bună, iar numărul de operaţii aritmetice necesare pe iteraţie este
relativ redus. Prin urmare, aceste metode sunt utilizabile şi în rezolvarea unor
PO de dimensiuni mari.

124
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

Direcţia de căutare pentru metodele de gradient conjugat este obţinută


pe baza relaţiei (9.3.34):
d k = −g k + β k d k −1 , k = 1,2,... , (9.3.34)
cu d 0 = −g 0 , 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:
(g k ) T g k
βk = ; (9.3.35)
(g k −1 ) T g k −1

- pentru metoda Polak-Ribière:


(g k ) T (g k − g k −1 )
βk = ; (9.3.36)
(g k −1 ) T g k −1

- pentru metoda Hestenes-Stiefel:


(g k ) T (g k − g k −1 )
βk = . (9.3.37)
(g k − g k −1 ) T d k −1
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ă g 0 = f v ( v 0 ) .
Dacă || g 0 ||= 0 , atunci vˆ = v 0 şi algoritmul este oprit.
Altfel, se alege direcţia d 0 = −g 0 şi se trece la pasul 3.
3. Se determină pasul optimal s k = sˆ utilizând unul din algoritmii din
paragraful A.
4. Se calculează v k +1 = v k + s k d k .
5. Se calculează g k +1 = f v ( v k +1 ) .
Dacă || g k +1 ||= 0 , atunci vˆ = v k +1 ş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 d k +1 = −g k +1 + β k +1d k .
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)):

125
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

f (v k + s k d k ) ≈ f k
+ s k (g k ) T d k + (1 / 2)(s k ) 2 (d k ) T G k d k . (9.4.1)
Minimul FO f este obţinut dacă următoarea funcţie pătratică îşi atinge minimul
în raport cu direcţia de căutare dk:
Φ : R n → R, Φ(d k ) = s k (g k ) T d k + (1 / 2)( s k ) 2 (d k ) T G k d k . (9.4.2)
Prin anularea gradientului lui Φ în punctul staţionar d k * , se obţine ecuaţia
Newton (a se vedea relaţia (9.3.18)):
s k G k d k * = −g k . (9.4.3)
k
Dacă G este pozitiv definită, atunci minimul funcţiei pătratice Φ este
obţinut într-un singur pas din orice punct de iniţializare. Rezultă, deci, o
convergenţă locală bună a metodei Newton (concentrată pe relaţia (9.4.3)),
fapt pentru care metodele de tip Newton sunt deosebit de atractive. În plus,
datorită disponibilităţii derivatelor de ordinul întâi şi doi, metodele de tip
Newton permit verificarea condiţiilor suficiente de optimalitate.
Cu toate aceste avantaje, metodele de tip Newton în forma lor originală
k
(s = 1) au următoarele dezavantaje:
1. Dacă matricea Gk este singulară, metodele de tip Newton nu sunt
aplicabile. Această situaţie poate apare atunci când f este liniară pe anumite
porţiuni, ceea ce implică Gk = 0.
2. Dacă Gk > 0, este posibil ca direcţia Newton d k * să nu mai fie o
direcţie de descreştere, adică f ( v k + s k d k ) ≥ f ( v k ) . Deci, aproximaţia pătratică
este valabilă doar într-un domeniu limitat.
3. Dacă hessianul Gk este inversabil dar nedefinit, metodele de tip
Newton tind să conveargă atât către minim cât şi către maxime locale.
În cele ce urmează vor fi prezentate două metode care reprezintă
modificări ale metodei Newton originale. Ambele metode asigură o
convergenţă globală şi permit utilizarea unor direcţii de curbură negativă d k în
puncte de tip şa, unde d k = 0 şi Gk este nedefinită; o astfel de direcţie satisface
(9.4.4):
(d k ) T G k d k < 0 (9.4.4)
şi serveşte întotdeauna reducerii valorii lui f în lungul lui d k .
A. Metoda Newton modificată. Această metodă utilizează un hessian modificat
G k > 0 în locul unui hessian nedefinit. Direcţia de căutare poate fi obţinută
prin rezolvarea ecuaţiei (9.4.5):
s k G k d k = −g k , (9.4.5)
a cărei soluţie este o direcţie de descreştere deoarece G k > 0 .
Dacă G k > 0 , atunci se ia G k = G k .
În cazul metodelor de tip Newon lungimea sk a pasului este determinată
cu o metodă de căutare liniară din cadrul celor studiate în paragraful 9.3.
Rezolvarea ecuaţiilor (9.4.5) presupune utilizarea unei factorizări
convenabile care să permită şi verificarea pozitivităţii lui G k . Un exemplu de
astfel de factorizare este factorizarea L D LT modificată care permite
verificarea pozitivităţii lui G k şi formarea matricei:
G k = L D LT = G k + H , (9.4.6)

126
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

în care: H = diag(hi), D = diag(di), L este matrice inferior triunghiulară cu


elemente diagonale unitate, hi ≥ 0, di > δ, | l ik |≤ β / d k , i > k, i = 1, n , iar β > 0
şi δ > 0 sunt alese convenabil (valoarea lui β trebuie să fie suficient de mare
pentru ca G k 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:
PRE : d k = arg min J = Φ k (d) = f k
+ (g k ) T d + (1 / 2)d T G k d ,
d

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


în care ∆k este o margine dată, care specifică raza sferei cu centrul în vk, unde
este valabilă aproximarea Φ k (d) pentru f ( v k + d) .
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ă:
f (v k + d k ) − f (v k )
ρk = . (9.4.8)
Φ k (d k ) − Φ k (0)

4. Actualizarea estimaţiei minimului. Dacă ρ k > µ , atunci se actualizează


v k +1 = v k + d k .
Altfel, v k +1 = v k .
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:
PREI : vˆ = arg min J = c T v , supusă la A v = b, v ≥ 0 , (9.5.1)
v

127
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

în care v este vectorul coloană cu n componente al variabilelor. Constantele


sunt date sub forma unei matrice coloană b = [b1 b2 ... bm ] T , a matricei
A = [a ij ]i =1, m şi a matricei linie c T = [c1 c2 ... c n ] .
j =1, n

Observaţii: 1. Denumirea de liniară acordată problemei de optimizare


este datorată faptului că FO este liniară şi restricţiile de tip egalitate reprezintă
un sistem de ecuaţii liniare.
2. Importanţa PO (9.5.1) rezidă în faptul că ea corespunde scopului
general de optimizare a utilizării unor resurse rare în condiţiile îndeplinirii unui
anumit obiectiv.
3. În afară de forma standard a problemei de programare liniară, în
practică sunt întâlnite şi alte forme care pot fi aduse la forma (9.5.1) fără
dificultăţi majore. De exemplu, dacă restricţiile sunt doar de tip inegalitate
într-o formulare iniţială a problemei, acestea pot fi transformate în restricţii de
tip egalitate prin adunarea sau scăderea unor variabile (elemente programabile)
suplimentare aferente problemei. Pe de altă parte, dacă obiectivul este de
maximizare a FO J, atunci PO se transformă într-o problemă de minimizare
prin schimbarea semnului matricei c.
Toate metodele de rezolvare numerică a problemelor de programare
liniară sunt bazate pe faptul că soluţia problemei se află pe frontiera mulţimii
soluţiilor admisibile. Una din cele mai vechi metode este metoda simplex
rezolvată cu algoritmul lui Dantzig (de exemplu, [P5]), care prezintă
dezavantajul creşterii complexităţii pe măsura creşterii numărului variabilelor
asociate problemei. De remarcat că pentru un număr de două variabile
problemele de programare liniară pot fi rezolvate convenabil prin metode grafo-
analitice utilizând interpretări specifice geometriei analitice.
În continuare vor fi prezentate aspecte privind metoda lui Karmakar în
varianta lui Barnes, referită în [P2]. Metoda transformă problema de
optimizare într-o formă mai convenabilă şi apoi efectuează căutarea în
interiorul mulţimii soluţiilor admisibile utilizând o direcţie de căutare către
frontiera acestei regiuni. Întrucât această metodă utilizează puncte interioare,
este des cunoscută sub 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
a i , n +1 = bi − ∑ a ij , cn+1 = 100000 , v = [1 1 ... 1] , k = 0 .
0 T
(9.5.2)
j =1

1. Se iniţializează Dk = diag(vk), cu vk = [v1k v2k ... vnk]T, şi se calculează un


punct îmbunătăţit (din punctul de vedere al reducerii valorii FO) cu formula
(9.5.3):

128
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

s ( D k ) 2 (c − A T λ k )
v k +1 = v k − , (9.5.3)
|| D k (c − A T λ k ) ||
unde prin norma matricei a fost notată cea mai mare valoare singulară a
acesteia, vectorul λ k este dat de (9.5.4):
λ k = [ A(Dk ) 2 AT ]−1 A(Dk ) 2 c , (9.5.4)
iar pasul s este ales astfel încât este satisfăcută condiţia:
D k (c − A T λ k )
s = min || k T
|| −α , supusă la (c j − A j T λ k ) > 0, j = 1, n , (9.5.5)
k
j =1, n v j (c j − A j λ )

în care Aj este a j-a coloană a matricei A şi α este o constantă de valoare oricât


de mică.
Trebuie remarcat faptul că vectorul λ k reprezintă o valoare aproximativă a
soluţiei problemei duale (descrisă în continuare).
2. Dacă valorile FO obţinute prin problema primală şi cea duală sunt
aproximativ egale, atunci vˆ = v k +1 şi algoritmul este oprit.
Altfel, se înlocuieşte k cu k + 1 şi se revine la pasul 1.
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 (D k ) 2 (c − A T λ k ) . 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

129
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

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. Cromozomi Funcţie de
crt. evaluare
1 1100010101 9
2 0000100010 7
3 1000000001 6
4 0001100010 5
5 1101110101 5
6 0001000100 4

130
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

7 1111111000 3
8 0000000001 3
9 1100001000 2
10 1111111111 1
Total: 45

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.

131
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

Fig.9.3. Aplicarea principiului ruletei relativ la populaţia din fig.9.2.


2. Încrucişarea. Acest operator creează noi membri (urmaşi, succesori) ai
populaţiei prin schimbul unor gene provenind din doi cromozomi-părinte (două
şiruri-părinte) c1 şi c2 selectate / selectaţi în prealabil pe baza funcţiei lor de
evaluare.
Există mai multe variante de implementare a operatorului de
încrucişare, utilizând un singur punct de încrucişare sau mai multe. Punctele de
încrucişare sunt alese aleator. În cele ce urmează sunt prezentate două exemple
de aplicare a operatorului de încrucişare, în care poziţia bitului (genei) este
considerată dinspre stânga spre dreapta.
Exemplul 9.1: Încrucişarea cu un singur punct de încrucişare. Fie a=2
punctul de încrucişare (după 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.

132
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

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 {0,1}l şi schema
reprezintă un element S din spatiul {0,1,*}l , adică o secvenţă de lungime l
constituită din simbolurile 0, 1 şi (*). Un cromozom este o instanţă (un
exemplu) a (al) unei scheme dacă fiecărei poziţii din cromozom diferite de (*)

133
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

îi corespunde o poziţie a schemei având aceeaşi valoare. De exemplu, schema


0*1** defineşte opt cromozomi.
În general, pentru un alfabet de cardinalitate k, există (k + 1) l scheme,
unde l este lungimea cromozomului. De asemenea, un cromozom de lungime l
aparţine la 2 l 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 2 l şi n ⋅ 2 l 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 f S , 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 p S 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):
δ
p S ≥ 1 − pC , (9.6.1)
l −1
în care pC este probabilitatea de încrucişare iar l reprezintă lungimea schemei.
Probabilitatea de încrucişare pC 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):
fS
m(t + 1) = n ⋅ m(t ) n
, (9.6.2)
∑ fi
i =1

unde f S este funcţia de performanţă a schemei S la momentul t, iar suma de la


numitor reprezintă funcţia de performanţă totală a populaţiei.
Funcţia de performanţă medie a întregii populaţii este notată cu f med şi
are următoarea expresie:
1 n
f med = ∑ fi .
n i =1
(9.6.3)

Utilizând f med , 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:
fS
m(t + 1) = m(t ) . (9.6.4)
f med

În ipoteza (9.6.5):
f S > f med , (9.6.5)
adică schema S este mai performantă decât media performanţelor populaţiei,
atunci:
m(t + 1) > m(t ) , (9.6.6)

134
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

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):
fS  δ 
m(t + 1) ≥ m(t ) 1 − p c  , (9.6.7)
f med  l −1 

în care inegalitatea are loc deoarece operatorii de selecţie şi încrucişare sunt


independenţi.
Ordinul unei scheme este numărul de poziţii specifice (0 sau 1 pentru
alfabetul binar) ale schemei respective. De exemplu, schema ********1 are
lungimea 1 şi ordinul 1, schema ****10*1* are lungimea 4 şi ordinul 3, schema
10*******are lungimea 2 şi ordinul 2, schema 00****101 are lungimea 9 şi
ordinul 5, iar schema 11*****00 are lungimea 9 şi ordinul 4.
Blocurile sunt scheme speciale, având valori mari ale funcţiei de
evaluare, ordin mic şi lungime redusă. Ele se propagă exponenţial în populaţie,
pe parcursul generaţiilor următoare, concluzie care a primit numele de teorema
schemei sau teorema fundamentală a algoritmilor genetici [G5]: Schemele de
lungime mică şi ordin redus cu valori ale funcţiei de evaluare peste valorile
medii sunt propagate î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 O(n p ) dacă ea poate fi
exprimată sub forma unui polinom de gradul p în variabila n.
Considerând o populaţie de n cromozomi pentru care se calculează n
valori ale funcţiei de evaluare într-o generaţie, se pune problema calculării
numărului de scheme procesate eficient în fiecare generaţie. Această valoare
este de ordinul O(n 3 ) , schemele fiind prelucrate în paralel. Fenomenul a primit
numele de paralelism implicit şi indică un volum de calcule mult mai mare în
prelucrarea informaţiei conţinută în scheme faţă de volumul de calcule efective
la nivel de şiruri.
După cum a mai fost menţionat, mecanismele care leagă algoritmul
genetic de problema ce trebuie rezolvată sunt în principal două:
• codarea problemei în termeni de cromozomi, genomi şi populaţie;
• funcţia de evaluare, care furnizează o măsură a calităţii fiecărui
cromozom în contextul problemei respective.
Codarea este realizată, de cele mai multe ori, prin şiruri de biţi, care
sunt simplu de creat şi de manipulat. În plus, acest tip de codare este robust, în
sensul adaptării ei la o mare varietate de probleme practice. Totuşi,
reprezentarea cromozomilor prin numere reale are o serie de avantaje legate de
precizie.
Pe de altă parte, orice funcţie de evaluare are, la intrare, şirul de
cromozomi şi returnează numere sau liste de numere ce reprezintă

135
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

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):
PRE : vˆ = arg max J = x 3 + 3 x 2 , supusă la 2 ≤ v ≤ 4 . (9.6.8)
v

Din motive de simplitate, prezentarea va fi orientată pe detalii de implementare


a AG în mediul Matlab urmărind stilul din [P2].
Începutul rezolvării PO (9.6.8) este reprezentat de transformarea
problemei în vederea aplicării directe a AG. Astfel, trebuie generată o mulţime
iniţială de cromozomi care să constituie populaţia iniţială. Alegerea unei
anumite lungimi a cromozomilor, adică a numărului de biţi (gene) din fiecare
şir (cromozom) determină (în particular, limitează) precizia de obţinere a
soluţiei PO. De aceea, trebuie acordată atenţie alegerii lungimii cromozomilor.
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));

136
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

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 2 ≤ v ≤ 4 . Î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:

137
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

function fit=fevaluare(v)
% Functie utilizata in definirea
% functiei de evaluare (performanta)
%
% v este variabila (elementul programabil).
%
% fit este valoarea functiei de evaluare.
%
fit=v.^3+3*v.^2;
Pentru a calcula valorile funcţiei de evaluare pentru populaţia iniţială
obţinută anterior şi reprezentată sub formă de numere reale salvate în matricea
valreala, este apelată funcţia fevaluare conform următoarei secvenţe de
comenzi Matlab:
>> fit=fevaluare(valreala)
fit =
96.7298 30.5043 79.1675 43.9525 60.6764
Funcţia de evaluare totală aferentă întregii populaţii are valoarea:
>> sum(fit)
ans =
311.0304
Deci, valoarea cea mai performantă este 3.7778 cu o valoare a funcţiei
de evaluare egală cu 96.7298, care corespunde cromozomului (şirului) 1 al
populaţiei.
Pentru a selecta părinţii noii populaţii este aplicat principiul ruletei,
descris anterior, conform căruia procentajul de selecţie acordat unui anumit
cromozom este direct proporţional cu valoarea funcţiei sale de evaluare. Pentru
vectorul de funcţii de evaluare fit obţinut, calculul procentajului este efectuat
conform următoarei secvenţe de comenzi:
>> procent=fit/sum(fit)*100
procent =
31.0998 9.8075 25.4533 14.1313 19.5082
>> sum(procent)
ans =
100
Prin urmare, şansele de selecţie ca părinţi a cromozomilor 1, 2, 3, 4 şi 5
sunt egale cu procentele 31.0998, 9.8075, 25.4533, 14.1313 şi respectiv
19.5082, acestea fiind procentajele din circumferinţă exterioară a ruletei
corespunzătoare celor 5 cromozomi.
Pentru efectuarea selecţiei părinţilor noii populaţii este dezvoltată mai
întâi funcţia Matlab fitness, destinată calculului valorii funcţiei de evaluare
[P2]:
function [fit,fitsum]=fitness(cromozomi,funceval,a,b)
% Functie utilizata in calculul functiei de
% evaluare (performanta)
% a unei populatii (de cromozomi)
%
% cromozomi este matricea continand populatia
% de cromozomi,
% funceval este numele functiei Matlab
% in care este definita functia de evaluare,
% a si b sunt limitele intervalului caruia
% ii apartin valorile reale ale cromozomilor.

138
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

%
% fit este vectorul cu valorile functiei
% de evaluare pentru cromozomii populatiei,
% fitsum este suma valorilor functiei de
% evaluare, calculata pentru toti cromozomii.
%
[nrcrom lungcrom]=size(cromozomi); % dimensiuni
% populatie
for i=1:nrcrom,
v(i)=fbinreal(cromozomi(i,:),a,b);
fit(i)=feval(funceval,v(i));
end
fitsum=sum(fit);
Apoi este dezvoltată funcţia Matlab fselect, prezentată în continuare,
care implementează selecţia părinţilor noii populaţii (generaţiei următoare)
conform principiului ruletei şi apelează funcţia fitness:
function cromnoi=fselect(cromozomi,funceval,a,b)
% Functie utilizata in selectia celui mai
% bun cromozom pentru generatia urmatoare
%
% cromozomi este matricea continand populatia
% de cromozomi din care se face selectia,
% funceval este numele functiei Matlab
% in care este definita functia de evaluare
% (performanta),
% a si b sunt limitele intervalului caruia
% ii apartin valorile reale ale cromozomilor.
%
% cromnoi este matricea obtinuta continand
% cromozomii generatiei urmatoare.
%
[nrcrom lungcrom]=size(cromozomi); % dimensiuni
% populatie
fit=[ ];
%
% Calculul functiei de evaluare:
[fit,fitsum]=fitness(cromozomi,funceval,a,b);
for cromind=1:nrcrom,
sval(cromind)=sum(fit(1,1:cromind));
end
%
% Selectia conform valorilor functiei de evaluare:
parnume=[ ];
for i=1:nrcrom,
rval=floor(fitsum*rand);
if rval<sval(1),
parnume=[parnume 1];
else
for j=1:nrcrom-1,
sl=sval(j);
su=sval(j)+fit(j+1);
if (rval>=sl) & (rval<=su),
parnume=[parnume j+1];
end
end

139
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

end
end
cromnoi(1:nrcrom,:)=cromozomi(parnume,:);
Aplicând funcţia fselect, este rezolvată selecţia în vederea aplicării
pasului de reproducere şi sunt obţinuţi următorii cromozomi:
>> popselect=fselect(cromozomi,'fevaluare',2,4)
popselect =
1 0 1 1 1 1 (cromozom 3)
1 0 0 1 0 0 (cromozom 5)
1 0 1 1 1 1 (cromozom 3)
1 0 1 1 1 1 (cromozom 3)
1 0 0 1 0 0 (cromozom 5)
Poate fi observat că au fost favorizaţi în procesul de selecţie
cromozomul 3 care a fost triplicat şi cromozomul 5 care a fost duplicat.
Pentru noua populaţie, salvată în matricea popselect, funcţiile de
evaluare obţin următoarele valori:
>> [fit,fitsum]=fitness(popselect,'fevaluare',2,4)
fit =

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,

140
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

u=u-1;
end
%
% Selectia procentajului de reprodus aleator:
while length(indrep)~=u,
i=round(rand*nrcrom);
if i==0,
i=1;
end
if ind(i)~=-1,
indrep=[indrep i];
ind(i)=-1;
end
end
%
% Efectuare incrucisare cu un singur
% punct de incrucisare:
for i=1:2:u-1,
splitpos=floor(rand*lungcrom);
if splitpos==0,
splitpos=1;
end
i1=indrep(i);
i2=indrep(i+1);
genetemp=cromozomi(i1,splitpos+1:lungcrom);
crom1(i1,splitpos+1:lungcrom)=...
cromozomi(i2,splitpos+1:lungcrom);
crom1(i2,splitpos+1:lungcrom)=genetemp;
end
Această funcţie este aplicată populaţiei din matricea popselect,
rezultatul fiind obţinut sub forma noii generaţii salvate în matricea gennoua:
>> gennoua=freprod(popselect,.6)
gennoua =
1 0 1 1 1 1 (cromozom 3)
1 0 0 1 0 1 (cromozom obţinut din
cromozomul 3 şi 5)
1 0 1 1 1 0 (cromozom obţinut din
cromozomul 3 şi 5)
1 0 1 1 1 1 (cromozom 3)
1 0 0 1 0 0 (cromozom 5)
Poate fi observat faptul că noii membri ai populaţiei (cromozomii
succesori) au fost obţinuţi din cromozomii părinţi, 3 şi 5, aplicând încrucişarea
cu un singur punct de încrucişare a = 5.
Valorile funcţiilor de evaluare pentru noua generaţie sunt:
>> [fit,fitsum]=fitness(gennoua,'fevaluare',2,4)
fit =
79.1675 62.2283 77.3545 79.1675 60.6764
fitsum =
358.5942
De data aceasta suma valorilor funcţiei de evaluare nu a mai fost
îmbunătăţită.
În final, este efectuată mutaţia înainte de a repeat acest ciclu de paşi din
cadrul AG. Mutaţia este implementată în funcţia Matlab fmutatie:

141
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

function crom1=fmutatie(cromozomi,rata)
% Functie utilizata in mutatia unei
% populatii (de cromozomi) cu o anumita rata
%
% cromozomi este matricea continand populatia
% de cromozomi supusa mutatiei,
% rata este rata (probabilitatea) mutatiei,
%
% crom1 este matricea obtinuta continand
% populatia de cromozomi ca rezulta al
% mutatiei.
%
[nrcrom lungcrom]=size(cromozomi); % dimensiuni
% populatie
crom1=cromozomi;
for i=1:nrcrom,
for j=1:lungcrom,
if rand<=rata,
if cromozomi(i,j)==1,
crom1(i,j)=0;
else
crom1(i,j)=1;
end
end
end
end
Aplicând această funcţie cu o valoare foarte mică a ratei de mutaţie,
şansele de modificare a populaţiei într-o singură generaţie vor fi foarte mici.
Acest lucru este ilustrat în continuare, pentru o rată de mutaţie de 0.005:
>> gen2=fmutatie(gennoua,.005)
gen2 =
1 0 1 1 1 1
1 0 0 1 0 1
1 0 1 1 1 0
1 0 1 1 1 1
1 0 0 1 0 0
Poate fi observat că nu a avut loc nici-o mutaţie, obţinându-se aceeaşi
populaţie, salvată în matricea gen2.
Trebuie menţionat că în pasul de reproducere pot fi aplicaţi toţi
operatorii genetici.
La acest moment s-a încheiat producerea unei noi generaţii. Apoi,
urmărind paşii AG, aceleaşi procese de selecţie şi reproducere (utilizând
operatorii genetici) vor fi repetate construindu-se noi generaţii până la
epuizarea timpului de căutare a soluţiei optimale.
Pentru implementarea unui AG este dezvoltată funcţia falggen
prezentată în continuare, care înglobează toţi paşii AG apelând funcţiile Matlab
prezentate anterior în vederea rezolvării unei probleme de maximizare:
function [valv,fmax]=falggen(fun,domeniu,biti,...
dimpop,numgenera,rata,propor)
% Functie utilizata in determinarea maximului
% unei functii utilizand algoritmi genetici
%
% fun este functia Matlab definita de utilizator
% continand expresia functiei obiectiv, functie

142
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

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

143
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

valv =
3.9059
fmax =
105.3556
Întrucât soluţia exactă a PO este vˆ = 4 , rezultatul obţinut este rezonabil.
Observaţie: Fiecare nouă rulare a funcţiei falggen, care implementează
un AG utilizat în rezolvarea aceleiaşi PO, poate genera rezultate diferite
datorită naturii aleatoare a procesului de aplicare a operatorilor genetici.
În concluzie, deşi sunt relativ lenţi în execuţie, algoritmii genetici pot fi
aplicaţi în rezolvarea unor PO dificile cum sunt cele care au mai multe puncte
de extreme sau cele în care este cerut un punct de optim global. Întrucât
algoritmii care implementează metodele numerice standard în rezolvarea
acestor probleme de optimizare pot conduce la eşec, timpul mai lung de
execuţie al AG este pe deplin compensat în astfel de situaţii.
Funcţiile prezentate pot fi implementate şi în alte variante. Astfel, de
exemplu, poate fi utilizată încrucişarea cu mai multe puncte de încrucişare, sau
selecţia bazată pe principiul ruletei poate fi implementată în manieră diferită
faţă de cea prezentată. De asemenea, pot fi utilizate toolbox-uri Matlab
specializate în implementarea AG pentru rezolvarea PO şi nu numai cum sunt
GAOT ori FLEXGA.

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.

144
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

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

145
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

% 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

146
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

end
%
% Solutia:
sol=v1; % valoarea optimala a variabilei v
% Numarul de iteratii este in variabila nriter
gradi=df; % gradientul functiei obiectiv in punctual
% v optimal
disp('Numarul de iteratii='); disp(nriter);
disp('Solutia optimala='); disp(v1);
disp('Gradientul in solutia optimala='); disp(df);
Observaţii: 1. Funcţia fmincg necesită definirea de către utilizator a trei
funcţii Matlab.
2. În cadrul acestei funcţii a fost utilizată funcţia Matlab fminbnd
pentru rezolvarea problemei de optimizare unidimensională având ca soluţie
valoarea optimală a pasului de căutare. Această funcţie este însoţită de funcţia
Matlab optimset, prezentată anterior, prin care sunt stabilite valorile unor
parametri aferenţi funcţiei fminbnd.
3. În cazul problemelor de optimizare la care funcţia obiectiv este
complicată trebuie modificată corespunzător funcţia de căutare liniară a pasului
optimal.
Funcţia fmincg va fi aplicată în cele ce urmează în cadrul exemplului
9.1.
Exemplul 9.1: Să se rezolve prin metoda gradientului conjugat în
versiunea Fletcher-Reeves următoarea PO [P2]:
4 2 4 2
v1 − 16v1 + 5v1 v 2 − 16v 2 + 5v 2
PFR : vˆ = arg min J = f ( v ) = + ,
v 2 2
v = [v1 v 2 ]T ∈ R 2 .
Soluţie: Pentru început, este creat un fişier funcţie, cu numele f91.m,
pentru definirea FO:
function f=f91(v)
% Expresia functiei obiectiv:
%
f=0.5*(v(1)^4-16*v(1)^2+5*v(1))+...
0.5*(v(2)^4-16*v(2)^2+5*v(2));
Apoi, este creat fişierul funcţie gradf91.m, destinat definirii
gradientului funcţiei obiectiv:
function gradf=gradf91(v)
% Expresia gradientului functiei obiectiv:
%
gradf=zeros(size(v));
gradf(1)=0.5*(4*v(1)^3-32*v(1)+5);
gradf(2)=0.5*(4*v(2)^3-32*v(2)+5);
În continuare este creat şi al treilea fişier funcţie, numele fişierului
fiind f191.m, pentru definirea funcţiei de căutare liniară utilizată în obţinerea
valorii optimale a pasului de căutare:
function pasn=f191(pas)
% Expresia functiei de cautare liniara utilizata in
% obtinerea valorii optimale a pasului de cautare:
%
global p1 d1;
q1=p1+pas*d1;
pasn=feval('f91',q1);

147
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

Î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,

148
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

fractie(i)=reznorm/(v(i)*...
(cp(i)-A(:,i)'*lambda));
else
fractie(i)=inf;
end
end
pas=min(fractie)-alpha;
v1=v-pas*D2*rezdual/reznorm;
v=v1; contlista=0; B=[]; lista=[]; cb=[];
for k=1:n,
if v(k)>eps,
contlista=contlista+1;
lista=[lista k];
end
end
%
% Urmeaza partea doar pentru probleme
% nedegenerate:
if contlista==m,
for k=lista,
B=[B A(:,k)]; cb=[cb cp(k)];
end
solprimal=b'/B'; solv=solprimal;
break
end
iter=iter+1;
end
solf=cp*v;
i=1; fprintf('\nSolutia optimala=');
for j=lista,
fprintf('\nv(%1.0f)=%8.4f\',j,solv(i));
i=i+1;
end
fprintf('\nCelelalte variabile sunt ...
nule\n');
disp('Numarul de iteratii='); disp(iter);
disp('Valoarea minima a functiei obiectiv=');
disp(solf);
Funcţia fbarnes va fi aplicată în continuare în cadrul exemplului 9.2.
Exemplul 9.2: Să se rezolve prin metoda lui metoda lui Karmakar în
varianta lui Barnes următoarea problemă de programare liniară [P2]:
PREI : vˆ = arg max J = f ( v ) = 2v1 + v 2 + 4v 3 , v = [v1 v2 v 3 ]T ∈ R 3 ,
v
supusă la:
v1 + v 2 + v 3 ≤ 7 ,
v1 + 2v 2 + 3v3 ≤ 12 ,
v1 , v 2 , v 3 ≥ 0 .
Soluţie: Pentru început, problema trebuie adusă la formularea din
varianta standard (9.5.1). În acest scop sunt introduse două variabile pozitive v4
şi v5, numite variabile slabe (variabile suplimentare), care sunt adunate în
membrii stângi ai celor două RTI, câte o variabilă slabă pentru fiecare RTI.
Acest lucru va transforma cele două RTI în RTE.
În plus, trebuie schimbate semnele coeficienţilor din FO pentru
schimbarea problemei de maximizare într-una de minimizare. Rezultă varianta
standard a problemei de programare liniară:

149
Matematici asistate de calculator Rezolvarea numerică a problemelor de optimizare

PREI : vˆ = arg min − J = − f ( v) = −2v1 − v 2 − 4v 3 , v = [v1 v2 v3 v4 v 5 ]T ∈ R 5 ,


v
supusă la:
v1 + v 2 + v 3 + v 4 = 7 ,
v1 + 2v 2 + 3v 3 + v 5 = 12 ,
v1 , v 2 , v3 , v 4 , v5 ≥ 0 .
Cele două variabile reprezintă diferenţele dintre resursele disponibile şi
cele utilizate. În cazul în care RTI ar fi fost exprimate sub forma “mai mare sau
egal cu zero”, pentru transformarea celor două RTI în RTE trebuia efectuată
scăderea variabilelor slabe din membrii stângi ai celor două RTI.
În aceste condiţii poate fi rezolvată problema de programare liniară
folosind algoritmul lui Barnes. Este executată următoarea secvenţă de program
Matlab care apelează funcţia fbarnes, cu rezultatele prezentate în cele ce
urmează:
A=[1 1 1 1 0;1 2 3 0 1];
b=[7;12];
c=[-2;-1;-4;0;0];
[solx,solf,lista,iter]=fbarnes(A,b,c,.00005);
Solutia optimala=
v(1)= 4.5000
v(3)= 2.5000
Celelalte variabile sunt nule
Numarul de iteratii=
7
Valoarea minima a functiei obiectiv=
-19.0000
Prin urmare, a fost obţinută soluţia optimală vˆ = [4.5 0 2.5]T ,
valoarea maximă a FO fiind: fmax = 19.
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.

150