Sunteți pe pagina 1din 62

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  cu 
particularizări referitoare la optimizarea sistemelor dinamice. 
A)  Modelul  mediului.  Modelul  mediului  caracterizează  procesul 
cauzal din cadrul mediului la care se referă PO şi reprezintă elementul 
pe  baza  căruia  sunt  estimate  efectele  diferitelor  decizii  care  pot  fi 
luate în considerare. 
Modelul mediului conține patru categorii de relații: 
1) Ecuațiile procesului la care se referă PO, în diferite forme 
exprimate  ca  modele  matematice  ale  proceselor.  În  cadrul  acestora 
apar trei tipuri de mărimi: 
  a) Variabile în timp: 
  ‐ de intrare (comandă), u ∈ U ⊆ Rm, 
  ‐ de stare, x ∈ X ⊆ Rn, 
  ‐ de ieşire, y ∈ Y ⊆ Rp. 
  b) Variabila independentă timp: 
  t ∈ T0f ⊆ R  – pentru sisteme cu timp continuu (SC); 
  t ∈ T0f = {tk0, tk0+1, …, tkf} = {tk | k = k0, …, kf ⊂ Z} ⊂ R  
                     – pentru sisteme cu timp discret (SD). 

160 
Rezolvarea numerică a problemelor de optimizare 

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

161 
Rezolvarea numerică a problemelor de optimizare 

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 : Π 0 f → R ,                         (9.1.2) 
care  asociază  fiecărui  proces  admisibil 
Π = {x(t ), u(t ), K , 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: 
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. 
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: 
J = θ(t 0 , x 0 , t f , x f ) ,                        (9.1.4) 
care  “penalizează”  capetelor  traiectoriei  şi  de  criteriu  de  tip 
Lagrange, corespunzător FO: 

162 
Rezolvarea numerică a problemelor de optimizare 

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 = k0
k (x k , u k ) ,

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

163 
Rezolvarea numerică a problemelor de optimizare 

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 , K , uˆ kf −1 }   aplicat 
secvențial la intrarea 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  subcapitolele  următoare  vor  fi  prezentați  algoritmi  de 
rezolvare numerică a unor clase de probleme de optimizare. 
 

164 
Rezolvarea numerică a problemelor 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) 
în care 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) 
k+1
arată că aproximația următoare, v , 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)): 
f ( v k + s k d k ) < f ( v k ), k = 0,1,...  .                    (9.2.5) 
  Etapa 4 (actualizarea estimației minimului). Se efectuează: 

165 
Rezolvarea numerică a problemelor de optimizare 

v k ← v k + s k d k , k = k + 1  şi se trece la etapa 1. 
  Pentru  convergența  algoritmului  către  un  minim  local  v*  al 
funcției  obiectiv  f  trebuie  impuse  condiții  atât  asupra  lui  f  cât  şi 
asupra alegerii lui dk şi sk. Condițiile impuse funcției obiectiv sunt: 
  a) f este de clasă C2 (de două ori continuu diferențiabilă), 
  b) mulțimea { v0 ∈ Rn | f(v) ≤ f(v0) } este închisă şi mărginită. 
  Referitor  la  alegerea  lui  dk  şi  sk,  trebuie  satisfăcută  condiția 
(9.2.5).  În  plus,  trebuie  asigurată  la  fiecare  iterație  o  „descreştere 
suficientă”  a  lui  f,  iar  dk  nu  trebuie  să  fie  ortogonală  pe  gradientul 
fv(vk).  În  aceste  condiții,  gradienții  obținuți  la  iterațiile  procedurii 
satisfac condiția: 

lim || f
k →∞
v ( v k ) ||= 0  .                        (9.2.6) 

  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 * ) = ⎢ K ⎥ , v = [v1 v2 K v n ]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, 
- metodele  de  căutare  aleatoare  care  includ  cele  bazate  pe 
algoritmi  genetici,  cele  de  călire  simulată  (simulated 
annealing), etc. 

166 
Rezolvarea numerică a problemelor de optimizare 

Deşi sunt relativ simple şi uşor de implementat, metodele de 
ordinul  zero  nu  sunt  utilizate  în  problemele  de  conducere  (decizie) 
optimală datorită incapacității de explorare a structurii particulare a 
acestor clase de probleme de optimizare. 
B. Metodele de ordinul I (de căutare liniară). Aceste metode necesită 
calculul valorii FO şi al gradientului acesteia în punctul curent vk. Din 
această categorie fac parte: 
- metodele de gradient, 
- metodele de gradient conjugat, 
- metodele de metrică variabilă. 
Metodele  de  căutare  liniară  realizează  un  compromis 
favorabil  între  simplitate  şi  eficiență,  fiind  utilizate  cel  mai  des  în 
practică. 
C.  Metodele  de  ordinul  II  (de  tip  Newton).  Aceste  metode  necesită 
calculul  valorii  FO,  al  gradientului  şi  hessianului  acesteia  precum  şi 
inversarea hessianului în punctul curent vk. 
  Observație: Derivata a doua a unei funcții reale f de variabilă 
vectorială v, calculată în punctul v*, are forma unei matrici pătratice 
numită matricea lui Hess (hessian): 
⎡ ∂2 f ∂2 f ∂2 f ⎤
⎢ L ⎥
⎢ ∂v1
2 ∂v1 ∂v 2 ∂v1 ∂v n ⎥
⎢ ∂ f2
∂2 f ∂2 f ⎥
⎢ ⎥
, v = [v1 K v n ]T . 
* L
f vv ( v ) = ⎢ ∂v 2 ∂v1 ∂v 22 ∂v 2 ∂v n ⎥ v2
⎢ L ⎥
⎢ 2 ⎥
⎢ ∂ f ∂2 f ∂2 f ⎥
L
⎢ ∂v n ∂v1 ∂v n ∂v 2 ∂v n2 ⎥⎦ v = v*

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

167 
Rezolvarea numerică a problemelor de optimizare 

9.3.  Rezolvarea  problemelor  de  programare  matematică  fără 


restricții cu metode de căutare liniară 
În  acord  cu  subcapitolul  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: 
(g k ) T d k < 0, k = 0,1,...  .                    (9.3.1) 
k
  Dacă  d   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: 
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 f1 ( 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, 

168 
Rezolvarea numerică a problemelor de optimizare 

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

169 
Rezolvarea numerică a problemelor de optimizare 

  Altfel, se actualizează limitele intervalului de căutare conform 
altei formule: ai+1 = ui, bi+1 = bi, apoi se înlocuieşte i cu i + 1 şi se revine 
la pasul 8. 
  Observații:  1.  La  fiecare  iterație  i  este  de  fapt  necesară  o 
singură evaluare a funcției f. 
  2. Urmărind paşii algoritmului, se constată că Li+1 = G∙Li, deci 
lungimea  intervalului  scade  în  progresie  aritmetică  având  rația  G 
specifică metodei secțiunii de aur. 
A.2. Metode de interpolare. În ipoteza că funcția f1 este netedă, cele 
mai eficiente metode se bazează pe aproximarea lui f1 cu o funcție f* 
relativ  simplă,  iar  minimul  acestei  funcții  poate  fi  calculat  mai  uşor 
decât  minimul  lui  f1  şi  poate  fi  utilizat  iterativ  ca  o  estimație  a 
minimului  funcției  f1.  De  regulă,  f1  este  aleasă  o  funcție  polinomială 
de  grad  mic  (doi  sau  trei),  iar  metoda  de  minimizare  este  numită 
metoda interpolării polinomiale (pătratice, respectiv cubice). 
  Este  preferată  interpolarea  pătratică  atunci  când  sunt 
disponibile  doar  valorile  funcției  sau  atunci  când  este  complicată 
evaluarea  derivatei  direcționale  a  funcției  f1,  conform  formulei 
obținute din (9.3.4): 
' T
f 1 ( s ) = f v ( v k + s ⋅ d k ) ⋅ d k  .                   (9.3.8) 
În această situație funcția f* are expresia: 
f * ( s ) = c 2 s 2 + c1 s + c 0 , c 2 > 0  ,                   (9.3.9) 
cu abscisa punctului de minim: 
c1
sˆ * = −  .                      (9.3.10) 
2c 2
  Pentru  determinarea  coeficienților  din  (9.3.9)  sunt  necesare 
trei  valori  calculate  pentru  abscisele  sk,  sk−1  şi  sk−2,  astfel  că  expresia 
explicită a minimului devine: 
sˆ * = { f * ( s k − 2 )[( s k ) 2 − ( s k −1 ) 2 ] + f * ( s k −1 )[( s k − 2 ) 2 − ( s k ) 2 ] +
+ f * ( s k )[( s k −1 ) 2 − ( s k − 2 ) 2 ]} /{ f * ( s k − 2 )( s k − s k −1 ) +  
+ f * ( s k −1 )( s k − 2 − s k ) + f * ( s k )( s k −1 − s k − 2 )}.
                        (9.3.11) 
Această  valoare  va  fi  considerată  ca  o  nouă  aproximare,  sk+1,  a 
minimului  funcției  f1  şi  algoritmul  este  repetat  până  la  convergență. 

170 
Rezolvarea numerică a problemelor de optimizare 

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  lungimii  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ă. 
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 : 
T
| f v ( 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: 
k k +1
f −f ≥ −µ ⋅ s k (g k ) T d k  ,                  (9.3.13) 
în care 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 subcapitolul 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. 

171 
Rezolvarea numerică a problemelor de optimizare 

T
3.  Dacă  f v ( v k + s k d k ) ⋅ d k > 0 ,  atunci  se  determină  o  nouă 
valoare a lui sk utilizând, de exemplu, interpolarea cubică şi urmează 
salt la pasul 2. 
  Altfel, se trece la pasul 4. 
T
4. Cazul  f v ( v k + s k d k ) ⋅ d k < 0 . 
Se înlocuieşte  v k  cu  ( v k + s k d k )  şi se actualizează valoarea lui sk cu 
o  formulă  de  extrapolare,  prin  înlocuire  cu  c∙sk,  în  care  2  <  c  <  10. 
Urmează salt la pasul 2. 
5.  Dacă  valoarea  curentă  sk  satisface  (9.3.13),  atunci  sˆ k = s k   şi 
algoritmul este terminat. 
  Observații:  1.  În  algoritmul  prezentat  sunt  repetate 
intepolarea şi extrapolarea până la satisfacerea simultană a ambelor 
condiții, (9.3.12) şi (9.3.13). 
  2. O alegere a unei valori mici pentru μ (de exemplu, μ = 10−4) 
conduce  în  majoritatea  cazurilor  la  satisfacerea  condiției  (9.3.13) 
atunci când (9.3.12) este deja satisfăcută. 
C.  Metoda  Armijo.  Această  metodă  se  bazează  în  principal  pe 
condiția  de  descreştere  suficientă  exprimată  sub  forma  relației 
(9.3.13), echivalentă cu: 
k +1
f − f k ≤ µ ⋅ s k (g k ) T d k  .                  (9.3.15) 
Condiția  (9.3.15)  poate  fi  interpretată  grafic  (fig.9.1)  prin 
necesitatea ca în planul <s, f> diferența  f k +1 − f k  (notată cu (1)) să 
fie situată sub dreapta de ecuație  f = µ ⋅ s k (g k ) T d k  (notată cu (2)). 
În fig.9.1 au fost marcate mulțimile de valori acceptabile pentru sk. 
Algoritmul  metodei  Armijo  constă  în  paşii  prezentați  în 
continuare: 
1. Se efectuează inițializarea: sk = s > 0. Se alege β, 0 < β < 1. 
2.  Dacă  valoarea  curentă  a  lui  sk  satisface  (9.3.13),  atunci  sˆ k = s k   şi 
algoritmul este terminat. 
  Altfel, se trece la pasul 3. 
3. Se actualizează valoarea lui sk prin înlocuire cu β∙sk şi urmează salt 
la pasul 2. 

172 
Rezolvarea numerică a problemelor de optimizare 

 
Fig.9.1. Punerea problemei în cazul metodei Armijo. 
D. Metodele cvasi‐Newton. Prin dezvoltarea în serie Taylor a funcției 
f ( v k + s k d k )   în  vecinătarea  punctului  v k   şi  reținerea  doar  a 
termenilor de ordinul întâi şi doi, rezultă: 
f ( v k + s k d k ) ≈ f k + (g k ) T s k d k + (1 / 2)( s k d k ) T G k ( s k d k ) =
 
= f k + (g k ) T s k d k + (1 / 2)( s k ) 2 (d k ) T G k d k .
                         (9.3.16) 
  Minimul  expresiei  (9.3.16)  poate  fi  obținut  dacă  următoarea 
funcție de variabilă independentă dk (direcția de căutare): 
Φ : R n → R, Φ (d k ) = (g k ) T s k d k + (1 / 2)( s k ) 2 (d k ) T G k d k  , 
                         (9.3.17) 
îşi  atinge  minimul.  Anulând  gradientul  lui  Φ,  se  obține  punctul 
staționar  d k *  care satisface următorul sistem de ecuații liniare: 
Φ d k * (d k * ) = s k g k + ( s k ) 2 G k d k * = 0 ⇒ s k G k d k * = −g k  . 
                         (9.3.18) 
În  acest  context,  o  metodă  de  minimizare  cu  direcția  de  căutare 
optimală  d k *   definită  de  (9.3.18)  este  numită  metodă  Newton, 
soluția  d k *   este  numită  direcție  Newton,  iar  sistemul  de  ecuații 
liniare (9.3.18) este numit ecuație Newton. 
  Metodele cvasi‐Newton construiesc iterativ o aproximare Bk, 
pozitiv definită, cu notația Bk > 0, a matricei hessian Gk, fără a calcula 
explicit  pe  Gk.  Direcția  de  căutare  d k   este  determinată  ca  soluție  a 
unui sistem analog lui (9.3.18): 
s k B k d k = −g k  ,                    (9.3.19) 
în  care  pasul  de  căutare  sk  este  determinat  cu  una  din  metodele  de 
căutare liniară descrise la punctele A, B şi C. 

173 
Rezolvarea numerică a problemelor de optimizare 

  Se introduce notația: 
k +1
t =vk
− v k = s k d k  ,                  (9.3.20) 
k
pentru  vectorul  care  exprimă  modificarea  în  v   la  iterația  k.  Pentru 
modificări mici în vk poate fi scrisă următoarea relație aproximativă: 
f v ( v k +1 ) − f v ( v k ) ≈ f vv ( v k +1 )( v k +1 − v k )  .              (9.3.21) 
Notând: 
y k = f v ( v k +1 ) − f v ( v k ) = g k +1 − g k                 (9.3.22) 
k+1
şi ținând seama de faptul că B  este o aproximație pentru hessianul 
f vv ( v k +1 ) , relația (9.3.21) se transformă în ecuația cvasi‐Newton: 

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 Bk+1 simetrică şi 
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
2
|| A || F = ij  .                   (9.3.25) 
i =1 j =1

ˆ k +1  este dată de formula Powell‐simetrică‐Broyden: 
Atunci  B
1
Bˆ k +1 = B k + k T k
[(y k − B k t k )(t k ) T + t k (y k − B k t k ) T ] −
(t ) t
 
(y k − B k t k ) T t k k k T
− t (t ) .
[(t k ) T t k ] 2
                        (9.3.26) 
  Prin  utilizarea  unor  alte  variante  de  norme  Frobenius 
ponderate rezultă două formule cunoscute: 
 ‐ formula Davidon‐Fletcher‐Powell: 

174 
Rezolvarea numerică a problemelor de optimizare 

1
Bˆ k +1 = B k + [(y k − B k t k )(y k ) T + y k (y k − B k t k ) T ] −
k T
k
(y ) t

(y k − B k t k ) T t k k k T
− y (y ) ;
[(y k ) T t k ] 2
                        (9.3.27) 
 ‐ formula Broyden‐Fletcher‐Goldfarb‐Shanno: 
1 1
Bˆ k +1 = B k + T kk
y k (y k ) T − k T k k B k t k (t k ) T B k ; 
(y ) t (t ) B t
                        (9.3.28) 
ambele  au  proprietatea  că  dacă  B   >  0  şi  (y ) t k > 0 ,  atunci 
k k T

Bˆ k +1 > 0 . 
  Determinarea  direcției  de  căutare  dk  presupune  rezolvarea 
unui  sistem  de  ecuații  liniare  la  fiecare  iterație.  De  aceea,  primele 
versiuni ale  metodelor  cvasi‐Newton au fost formulate în funcție de 
inversa hessianului, Hk = (Gk)−1. În aceste condiții, direcția de căutare 
este obținută prin rescrierea ecuației (9.3.18): 
d k = −( s k ) −1 H k g k  ,                    (9.3.29) 
iar condiția cvasi‐Newton (9.3.23) devine: 
H k +1 y k = t k  .                      (9.3.30) 
  Problema  principală  în  implementarea  algoritmilor  dedicați 
metodelor  cvasi‐Newton  constă  în  păstrarea  pozitivității  matricelor 
Bk  sau  Hk.  Algoritmul  de  calcul  al  punctului  de  minim  v̂   al  funcției 
obiectiv f prin metoda cvasi‐Newton cu pas variabil este alcătuit din 
următorii paşi: 
0. Se alege un punct inițial v0 ∈ Rn. 
1. Se inițializează k = 0. 
2. Se calculează  g k = f v ( v k ) . 
Dacă  || g k ||= 0 , atunci  vˆ = v k  şi algoritmul este oprit. 
  Altfel, se trece la pasul 3. 
3. Se calculează Bk cu una din metodele cunoscute. 
Dacă Bk > 0, atunci se trece la pasul 4. 
  Altfel, se calculează  d k = −g k  şi urmează salt la pasul 5. 
4. Se determină direcția dk rezolvând sistemul liniar  B k d k = −g k . 
5.  Se  determină  pasul  sk  utilizând  unul  din  algoritmii  prezentați  în 
paragrafele A sau B. 

175 
Rezolvarea numerică a problemelor de optimizare 

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  punctului  v k  ş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. 
  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) 

176 
Rezolvarea numerică a problemelor de optimizare 

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 . 

177 
Rezolvarea numerică a problemelor de optimizare 

Apoi, se actualizează k prin înlocuirea lui k cu k+1 şi se revine la pasul 
3. 
  Metoda gradientului conjugat poate fi folosită şi în rezolvarea 
sistemelor de ecuații liniare (de exemplu, [P2]). 

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ă  următorul  model  pătratic  al  funcției 
obiectiv f (a se vedea şi relația (9.3.16)): 
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ă (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  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. 

178 
Rezolvarea numerică a problemelor de optimizare 

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: 
(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: 
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 subcapitolul 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) 
î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: 
 
 

179 
Rezolvarea numerică a problemelor 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ă  a  valorii  FO  ş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 

180 
Rezolvarea numerică a problemelor de optimizare 

operațională.  Definirea  unei  probleme  de  programare  liniară  în 


varianta standard este: 
PREI : vˆ = arg min J = c T v  ,  supusă la  A v = b, v ≥ 0 ,         (9.5.1) 
v

î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 
j =1, n

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

181 
Rezolvarea numerică a problemelor de optimizare 

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 , v0 = [1 1 ... 1]T ,  k = 0 .        (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: 
s(D k ) 2 (c − A T λ k )
v k +1 = v k −  ,                   (9.5.3) 
|| D k (c − A T λ k ) ||
unde  prin  norma  matricei  a  fost  notată  cea  mai  mare  valoare 
singulară a acesteia, vectorul  λ k  este dat de: 
λ k = [ A(Dk ) 2 AT ]−1 A(Dk ) 2 c  ,                     (9.5.4) 
iar pasul s este ales astfel încât este satisfăcută condiția: 
D k (c − A T λ k )
s = min || || −α  , 
j =1, n v j k (c j − A j T λ k )
T
                           supusă la  (c j − A j λ k ) > 0, j = 1, n ,               (9.5.5) 
în  care  Aj  este  a  j‐a  coloană  a  matricei  A  şi  α  este  o  constantă  de 
valoare oricât de mică. 
Trebuie remarcat faptul că vectorul  λ k  reprezintă o valoare 
aproximativă a soluției problemei duale (descrisă în continuare). 
2. Dacă valorile FO obținute prin problema primală şi cea duală sunt 
aproximativ egale, atunci  vˆ = v k +1  şi algoritmul este oprit. 
  Altfel, se înlocuieşte k cu k + 1 şi se revine la pasul 1. 

182 
Rezolvarea numerică a problemelor de optimizare 

  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 dintro 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 subcapitol 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  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ă întro primă generație şi având dimensiune mică (10). Însă, în 
practică  dimensiunea  populației  este  mult  mai  mare  decât  cea  din 
exemplul  prezentat.  În  plus,  şirurile  au  lungime  mai  mare.  Şirurile 

183 
Rezolvarea numerică a problemelor de optimizare 

binare  pot  reprezenta  valorile  codate  ale  unei  sau  unor  variabile  de 
interes. 
1100010101 
0000100010 
1000000001 
0001100010 
1101110101 
0001000100 
1111111000 
0000000001 
1100001000 
1111111111 
Fig.9.2. Exemplu de populație inițială. 
  Populația  inițială  este  generată  aleator,  iar  pentru 
caracterizarea  acesteia  poate  fi  utilizată  terminologia  specifică 
geneticii.  Astfel,  fiecare  şir  în  cadrul  populației  corespunde  unui 
cromozom  şi  fiecare  bit  (element  binar)  al  şirului  corespunde  unei 
gene. 
  Priviți  din  punctul  de  vedere  al  problemelor  de  optimizare, 
cromozomii  reprezintă  variabilele  problemei.  Cromozomii  reprezintă 
elemente  ale  unei  structuri  funcționale  numite  genom.  Fiecare 
genom îşi începe ciclul de viață ca o mulțime de cromozomi generați 
aleator. Colecția genomilor alcătuieşte populația. 
  Un AG efectuează operații specifice în cadrul unui proces de 
reproducere  guvernat  de  către  operatori  genetici.  Soluțiile  noi  sunt 
create  prin  selecția  şi  recombinarea  cromozomilor  existenți,  în 
vederea optimizării unei funcții de evaluare (funcție de performanță, 
“fitness”), aleasă pentru fiecare problemă în parte. De exemplu, dacă 
problema  de  rezolvat  este  o  problemă  de  optimizare,  funcția  de 
evaluare  ar  putea  fi  funcția  obiectiv  sau  inversul  acesteia. 
Semnificația funcției respective este irelevantă pentru algoritm, ceea 
ce contează fiind doar valoarea sa. 
  În tabelul 9.1 [P1] este prezentată o populație formată din 10 
cromozomi, fiecare codat cu câte 10 biți, precum şi valorile succesive 
ale funcției de evaluare. 
  Plecând  de  la  populația  inițială,  trebuie  dezvoltată  o 
populație  nouă,  fiecare  populație  nouă  generată  prin  reproducere 
înlocuind  generația  anterioară.  În  acest  proces  funcția  de  evaluare 
globală  se  va  îndrepta  spre  optim  şi  va  oferi  soluții  din  ce  în  ce  mai 
bune  ale  problemei.  Procesul  este  analog  teoriei  neo‐darwiniste  a 
evoluției în biologie, care afirmă că organismele (sistemele) adaptate 

184 
Rezolvarea numerică a problemelor de optimizare 

continuu  la  schimbările  de  mediu  au  şansele  cele  mai  mari  de 
supraviețuire. 
 
Tabelul 9.1. Exemplu de populație şi funcția de evaluare aferentă. 
Nr.  Cromozomi  Funcție de 
crt.  evaluare 
1  1100010101  9 
2  0000100010  7 
3  1000000001  6 
4  0001100010  5 
5  1101110101  5 
6  0001000100  4 
7  1111111000  3 
8  0000000001  3 
9  1100001000  2 
10  1111111111  1 
    Total: 45 
 
  Cei  mai  des  folosiți  operatori  genetici  în  dezvoltarea  noilor 
populații  sunt  selecția,  încrucişarea,  inversiunea  şi  mutația.  Aceşti 
operatori  vor  fi  descrişi  în  cele  ce  urmează.  Trebuie  remarcat  că 
operatorii  genetici  acționează  asupra  genomilor  şi,  în  particular, 
asupra cromozomilor. 
1.  Selecția.  Operatorul  de  selecție  (naturală)  este  destinat  alegerii 
unui  set  de  cromozomi  (şiruri)  din  populație  pentru  a‐i  (a  le) 
reproduce. Membrii populației sunt aleşi pentru reproducere pe baza 
valorii  funcției  lor  de  evaluare,  iar  membrilor  populației  le  este 
acordată  o  probabilitate  de  reproducere  proporțională  cu  valoarea 
funcției lor de evaluare fiind preferați cei cu o valoare cât mai mare a 
funcției de evaluare. 
  Există trei tehnici de selecție: 
• Selecția  pe  baza  principiului  ruletei,  care  modelează 
mecanismul  selecției  naturale,  în  care  cromozomii  cu  o 
funcție  de  evaluare  mai  mare  au  o  şansă  mai  mare  de  a  fi 
aleşi.  Situația  este  prezentată  în  fig.9.3  în  legătură  cu 
populația  din  fig.9.2;  de  exemplu,  cromozomul  1  are 
probabilitatea de 20 % (9 / 45) de a fi selectat. 
• Selecția  pe  baza  rangului,  în  care  probabilitatea  de  a  fi  ales 
este  o  funcție  liniară  de  locul  ocupat  de  individ  (cromozom) 
în  cadrul  populației.  Avantajul  constă  în  faptul  că  nu  este 

185 
Rezolvarea numerică a problemelor de optimizare 

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ă,  ca  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. 

 
Fig.9.3. Aplicarea principiului ruletei relativ la populația din fig.9.2. 
2.  Încrucişarea.  Acest  operator  creează  noi  membri  (urmaşi, 
succesori)  ai  populației  prin  schimbul  unor  gene  provenind  din  doi 
cromozomi‐părinte (două şiruri‐părinte) c1 şi c2 selectate / selectați în 
prealabil pe baza funcției lor de evaluare. 
Există mai multe variante de implementare a operatorului de 
încrucişare,  utilizând  un  singur  punct  de  încrucişare  sau  mai  multe. 
Punctele  de  încrucişare  sunt  alese  aleator.  În  cele  ce  urmează  sunt 
prezentate două exemple de aplicare a operatorului de încrucişare, în 
care  poziția  bitului  (genei)  este  considerată  dinspre  stânga  spre 
dreapta. 
Exemplul 9.1: Încrucişarea cu un singur punct de încrucişare. 
Fie a=2 punctul de încrucişare (după cel de‐al doilea bit). Se consideră 
că au fost selectați cromozomii: 
c1: 1 1 | 0 0 0 1 0 1 0 1, c2: 0 0 | 0 0 1 0 0 0 1 0. 
În urma aplicării operatorului de încrucişare rezultă succesorii: 
u1: 1 1 | 0 0 1 0 0 0 1 0, u2: 0 0 | 0 0 0 1 0 1 0 1. 

186 
Rezolvarea numerică a problemelor de optimizare 

Exemplul 9.2: Încrucişarea cu două puncte de încrucişare. Se 
consideră că punctele de încrucişare sunt a = 2 şi a = 7 (între cea de‐a 
doua şi cea de‐a şaptea genă). Se consideră că au fost selectați aceiaşi 
cromozomi: 
c1: 1 1 | 0 0 0 1 0 1 | 0 1, c2: 0 0 | 0 0 1 0 0 0 | 1 0. 
În  urma  aplicării  operatorului  de  încrucişare  rezultă  cromozomii  din 
noua generație: 
u1: 1 1 | 0 0 1 0 0 0 | 0 1, u2: 0 0 | 0 0 0 1 0 1 | 1 0. 
Fiecărui cromozom îi corespunde o anumită probabilitate de 
încrucişare, de regulă în domeniul [0.6, 0.95]. 
  Aplicând operatorul de încrucişare populației, este obținută o 
nouă generație, fapt ilustrat din cele două exemple. 
3.  Inversiunea.  Acest  operator  alege  două  puncte  din  cromozom  şi 
inversează  ordinea  genelor  situate  între  aceste  puncte,  numite 
puncte  de  inversiune  şi  alese  aleator.  Noul  cromozom  este  obținut 
concatenând genele reordonate. 
  De exemplu, pornind de la cromozomul: 
c1: 1 | 1 0 0 | 0 1 0 1 0 1 
şi  schimbând  ordinea  genelor  între  punctele  2  şi  4,  se  obține  noul 
cromozom: 
u1: 1 | 0 0 1 | 0 1 0 1 0 1. 
4.  Mutația.  Procesul  final  de  obținere  a  unei  generații  este 
reprezentat  de  mutație,  cel  mai  simplu  operator  genetic.  Acest 
operator  basculează  aleatoriu  o  anumită  genă  (un  anumit  bit)  a  /  al 
cromozomului.  Scopul  său  este  introducerea  a  noi  soluții  (şiruri)  în 
cadrul  populației  şi  protejarea  AG  împotriva  pierderii  irevocabile  şi 
accidentale  a  informației  datorită  unor  încrucişări  nepotrivite. 
Operatorul  de  mutație  este  utilizat  foarte  rar,  motiv  pentru  care 
această  probabilitate  de  modificare  a  unui  şir  este  menținută  la  un 
nivel foarte scăzut, între 0.001 şi 0.01. Totuşi, operatorul de mutație 
contribuie la evitarea punctelor de extrem local. 
  Operatorii genetici, cu încrucişarea şi mutația în rol principal, 
asigură  principalele  diferențe  dintre  algoritmii  genetici  şi  metodele 
numerice  de  descreştere  utilizate  în  rezolvarea  problemelor  de 
optimizare.  Pornind  de  la  o  populație  inițială  şi  utilizând  operatorii 
genetici,  AG  dezvoltă  generații  noi  care  explorează  rapid  mulțimea 
soluțiilor admisibile (regiunea de interes) în vederea obținerii soluției 
optimale.  Acest  lucru  subliniază  avantajele  utilizării  AG  față  de 
metodele menționate: 

187 
Rezolvarea numerică a problemelor de optimizare 

• rezolvarea numerică a problemelor de optimizare dificile din 
punctul  de  vedere  al  expresiilor  funcției  obiectiv  şi 
restricțiilor, 
• rezolvarea numerică a PO caracterizate prin FO cu mai multe 
extreme locale, maxime şi minime. 
În aceste situații metodele numerice de descreştere pot localiza doar 
minime (maxime) locale, iar AG pot localiza minime (maxime) globale 
deşi nu este garantată obținerea lor. 
  În  cele  ce  urmează  vor  fi  prezentate  pe  scurt  aspectele 
teoretice  care  justifică  avantajele  utilizării  AG,  concentrate  asupra 
noțiunilor de scheme şi blocuri. O schemă este un şablon (formă) care 
descrie  o  submulțime  a  unui  cromozom  având  asemănari  în  poziții 
diferite  ale  cromozomulului  inițial.  Introducând  în  alfabet 
metasimbolul  „indiferent”  (*),  schema  asigură  o  modalitate 
compactă de a analiza similitudinile bine definite între cromozomi. 
Motivul  utilizării  schemelor  rezidă  din  studiul  structurii 
cromozomilor  generați  în  cadrul  unui  AG,  situație  în  care  pot  fi 
observate  anumite  şabloane  (forme)  de  comportament.  Adeseori 
cromozomii cu valori mari ale valorii funcției de evaluare au trăsături 
comune caracterizabile prin anumite combinații ale genelor (şirurilor 
binare). De exemplu, acceptând un număr de 9 gene în cadrul fiecărui 
cromozom,  cromozomii  (şirurile)  cu  cele  mai  mari  valori  ale  funcției 
de evaluare pot avea trăsătura comună caracterizată prin faptul că fie 
încep  cu  11  şi  sunt  terminați  (terminate)  cu  0  fie  că  la  mijlocul 
cromozomului  tți  cei  trei  biți  sunt  0.  Cromozomii  având  aceste 
structuri  pot  fi  rprezentați  sub  forma  unor  scheme,  11******0 
respectiv  ***000***.  În  plus,  motivul  interesului  acordat  schemelor 
este  legat  de  necesitatea  studiului  propagării  acestor  tipuri  de 
cromozomi care au structură comună  şi sunt asociate cu valori mari 
ale funcției de evaluare. 
Lungimea  unei  scheme  este  definită  ca  distanța  dintre  cele 
mai  exterioare  valori  ale  genelor  specificate.  În  continuare  sunt 
considerați cromozomi de lungime l, genele fiind 0 şi 1. În acest caz, 
un cromozom este un element din spațiul  {0,1}l  şi schema reprezintă 
un  element  S  din  spatiul  {0,1,*}l ,  adică  o  secvență  de  lungime  l 
constituită  din  simbolurile  0,  1  şi  (*).  Un  cromozom  este  o  instanță 
(un  exemplu)  a  (al)  unei  scheme  dacă  fiecărei  poziții  din  cromozom 
diferite  de  (*)  îi  corespunde  o  poziție  a  schemei  având  aceeaşi 
valoare. De exemplu, schema 0*1** defineşte opt cromozomi. 
În general, pentru un alfabet de cardinalitate k, există  (k + 1) l  
scheme,  unde  l  este  lungimea  cromozomului.  Deasemenea,  un 

188 
Rezolvarea numerică a problemelor de optimizare 

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. Procedând în acest mod, 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  faptul  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: 
δ
p S ≥ 1 − pC  ,                       (9.6.1) 
l −1
în  care  p C   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: 
fS
m(t + 1) = n ⋅ m(t ) n
 ,                      (9.6.2) 
∑f
i =1
i

în  care  f S   este  funcția  de  performanță  a  schemei  S  la  momentul  t, 
iar  suma  de  la  numitor  reprezintă  funcția  de  performanță  totală  a 
populației.  Funcția  de  performanță  medie  a  întregii  populații  este 
notată cu  f med  şi are următoarea expresie: 

1 n
f med = ∑ f i  . 
n i =1
                      (9.6.3) 

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

189 
Rezolvarea numerică a problemelor de optimizare 

fS
m(t + 1) = m(t )  .                        (9.6.4) 
f med
În ipoteza: 
f S > f med  ,                          (9.6.5) 
adică  schema  S  este  mai  performantă  decât  media  performanțelor 
populației, rezultă: 
m(t + 1) > m(t )  ,                        (9.6.6) 
deci  numărul  reprezentanților  schemei  creşte.  Altfel  spus,  scheme 
având  performanțe  peste  valoarea  medie  a  performanțelor 
populației  vor  avea  o  probabilitate  de  reproducere  mai  mare  şi  vor 
primi  un  număr  sporit  (exponențial)  de  reprezentanți  în  noua 
populație. 
Mutația  are  efect  redus  asupra  numărului  de  scheme, 
datorită probabilității mici de apariție. 
Efectul  combinat  al  selecției  şi  încrucişării  asupra  numărului 
de scheme este exprimat prin relația: 
fS ⎛ δ ⎞
m(t + 1) ≥ m(t ) ⎜1 − p c ⎟  ,                    (9.6.7) 
f med ⎝ l −1 ⎠
în  care  inegalitatea  are  loc  deoarece  operatorii  de  selecție  şi 
încrucişare sunt independenți. 
Ordinul unei scheme este numărul de poziții specifice (0 sau 
1 pentru alfabetul binar) ale schemei respective. De exemplu, schema 
********1  are  lungimea  1  şi  ordinul  1,  schema  ****10*1*  are 
lungimea 4 şi ordinul 3, schema 10*******are lungimea 2 şi ordinul 
2,  schema  00****101  are  lungimea  9  şi  ordinul  5,  iar  schema 
11*****00 are lungimea 9 şi ordinul 4. 
Blocurile sunt scheme speciale, având valori mari ale funcției 
de evaluare, ordin mic şi lungime redusă. Ele se propagă exponențial 
în  populație,  pe  parcursul  generațiilor  următoare,  concluzie  care  a 
primit  numele  de  teorema  schemei  sau  teorema  fundamentală  a 
algoritmilor  genetici  [G5]:  Schemele  de  lungime  mică  şi  ordin  redus 
cu valori ale funcției de evaluare peste valorile medii sunt propagate 
întrun  număr  care  creşte  exponențial  de  la  o  generație  la  alta.  În 
schimb, schemele cu valori ale funcției de evaluare sub cele medii vor 
dispare prin scăderea exponențială a numărului lor de la o generație 
la alta. Acest fapt reprezintă un alt avantaj al AG. 
Ipoteza blocurilor afirmă că încrucişarea orientează căutarea 
genetică înspre găsirea blocurilor (soluții parțiale), pe care le combină 

190 
Rezolvarea numerică a problemelor de optimizare 

în  soluții  globale  mai  bune.  Se  spune  că  o  mărime  oarecare  are 
ordinul  O(n p )  dacă ea poate fi exprimată sub forma unui polinom de 
gradul p în variabila n. 
Considerând  o  populație  de  n  cromozomi  pentru  care  se 
calculează  n  valori  ale  funcției  de  evaluare  întro  generație,  se  pune 
problema calculării numărului de scheme procesate eficient în fiecare 
generație.  Această  valoare  este  de  ordinul  O(n 3 ) ,  schemele  fiind 
prelucrate  în  paralel.  Fenomenul  a  primit  numele  de  paralelism 
implicit  şi  indică  un  volum  de  calcule  mult  mai  mare  în  prelucrarea 
informației conținută în scheme față de volumul de calcule efective la 
nivel de şiruri. 
După  cum  a  mai  fost  menționat,  mecanismele  care  leagă 
algoritmul genetic de problema ce trebuie rezolvată sunt în principal 
două: 
• codarea  problemei  în  termeni  de  cromozomi,  genomi  şi 
populație; 
• funcția  de  evaluare,  care  furnizează  o  măsură  a  calității 
fiecărui cromozom în contextul problemei respective. 
Codarea  este  realizată,  de  cele  mai  multe  ori,  prin  şiruri  de 
biți,  care  sunt  simplu  de  creat  şi  de  manipulat.  În  plus,  acest  tip  de 
codare  este  robust,  în  sensul  adaptării  ei  la  o  mare  varietate  de 
probleme practice. Totuşi, reprezentarea cromozomilor prin numere 
reale are o serie de avantaje legate de precizie. 
Pe de altă parte, orice funcție de evaluare are, la intrare, şirul 
de  cromozomi  şi  returnează  numere  sau  liste  de  numere  ce 
reprezintă  performanțele  realizate  de  cromozomi.  Funcția  de 
evaluare are rolul mediului înconjurător din cadrul evoluției naturale. 
Sintetizând  aspectele  prezentate  anterior,  un  algoritm 
genetic constă în parcurgerea paşilor următori: 
1. Se inițializează populația de cromozomi. 
2. Se  evaluează  fiecare  cromozom  din  populație.  Se  selectează 
părinții noii populații. 
3. Pasul  de  reproducere.  Se  creează  o  nouă  generație  de 
cromozomi  prin  împerecherea  cromozomilor  selectați 
utilizând operatori genetici. 
4. Se  şterg  membrii  populației  inițiale  pentru  a  fi  înlocuiți  cu 
noua generație. 
5. Se  evaluează  noii  cromozomi  şi  se  inserează  în  noua 
populație. 
6. Dacă timpul de căutare s‐a terminat, algoritmul este oprit. 

191 
Rezolvarea numerică a problemelor de optimizare 

Altfel, urmează salt la pasul 3. 
Având  descrise  pe  scurt  principiile  de  bază  ale  AG,  în 
continuare  va  fi  ilustrat  modul  de  aplicare  a  algoritmilor  genetici 
considerând  următoarea  problemă  de  optimizare  cu  restricții  de  tip 
egalitate (problemă cu restricții de tip egalitate, PRE): 
PRE : vˆ = arg max J = x 3 + 3 x 2  ,  supusă la  2 ≤ v ≤ 4 .        (9.6.8) 
v

Din  motive  de  simplitate,  prezentarea  va  fi  orientată  pe  detalii  de 
implementare a AG în mediul Matlab urmărind stilul din [P2]. 
Începutul  rezolvării  PO  (9.6.8)  este  reprezentat  de 
transformarea  problemei  în  vederea  aplicării  directe  a  AG.  Astfel, 
trebuie generată o mulțime inițială de cromozomi care să constituie 
populația  inițială.  Alegerea  unei  anumite  lungimi  a  cromozomilor, 
adică a numărului de biți (gene) din fiecare şir (cromozom) determină 
(în particular, limitează) precizia de obținere a soluției PO. De aceea, 
trebuie acordată atenție alegerii lungimii cromozomilor. 
Deasemenea,  trebuie  aleasă  o  anumită  dimensiune  a 
populației. Şi acest parametru trebuie ales cu grijă deoarece alegerea 
unei  populații  inițiale  de  dimensiune  mare  va  contribui  la  creşterea 
timpului  necesar  implementării  paşilor  AG.  În  majoritatea  cazurilor 
nu  este  necesară  o  populație  inițială  mare  pentru  că  AG  generează 
automat membri noi ai polulației pe măsura procesului de căutare în 
mulțimea soluțiilor admisibile. 
Pentru  generarea  populației  inițiale  este  dezvoltată  funcția 
Matlab fgeninit prezentată în continuare: 
function cromozomi=fgeninit(lungime,numcrom)
% Functie utilizata in generarea populatiei
% initiale
%
% lungime este lungimea unui cromozom,
% numcrom este numarul cromozomilor.
%
% cromozomi este matricea continand cromozomii.
%
maxcrom=2^lungime; % numarul maxim de cromozomi
if numcrom>=maxcrom,
numcrom=maxcrom;
end
cromozomi=round(rand(numcrom,lungime));
Pentru  generarea  unei  polulații  inițiale  formate  din  5 
cromozomi, fiecare conținând câte 6 gene, în continuare este apelată 

192 
Rezolvarea numerică a problemelor de optimizare 

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 întrun 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 =

193 
Rezolvarea numerică a problemelor de optimizare 

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

194 
Rezolvarea numerică a problemelor de optimizare 

procent =
31.0998 9.8075 25.4533 14.1313 19.5082
>> sum(procent)
ans =
100
Prin urmare, şansele de selecție ca părinți a cromozomilor 1, 
2,  3,  4  şi  5  sunt  egale  cu  procentele  31.0998,  9.8075,  25.4533, 
14.1313  şi  respectiv  19.5082,  acestea  fiind  procentajele  din 
circumferință  exterioară  a  ruletei  corespunzătoare  celor  5 
cromozomi. 
Pentru  efectuarea  selecției  părinților  noii  populații  este 
dezvoltată mai întâi funcția Matlab fitness, destinată calculului valorii 
funcției de evaluare (de exemplu, [P2]): 
function [fit,fitsum]=...
fitness(cromozomi,funceval,a,b)
% Functie utilizata in calculul functiei de
% evaluare (performanta)
% a unei populatii (de cromozomi)
%
% cromozomi este matricea continand populatia
% de cromozomi,
% funceval este numele functiei Matlab
% in care este definita functia de evaluare,
% a si b sunt limitele intervalului caruia
% ii apartin valorile reale ale cromozomilor.
%
% fit este vectorul cu valorile functiei
% de evaluare pentru cromozomii populatiei,
% fitsum este suma valorilor functiei de
% evaluare, calculata pentru toti cromozomii.
%
[nrcrom lungcrom]=size(cromozomi); % dimensiuni
% populatie
for i=1:nrcrom,
v(i)=fbinreal(cromozomi(i,:),a,b);
fit(i)=feval(funceval,v(i));
end
fitsum=sum(fit);
Apoi  este  dezvoltată  funcția  Matlab  fselect,  prezentată  în 
continuare,  care  implementează  selecția  părinților  noii  populații 
(generației următoare) conform principiului ruletei şi apelează funcția 
fitness: 
function cromnoi=...

195 
Rezolvarea numerică a problemelor de optimizare 

fselect(cromozomi,funceval,a,b)
% Functie utilizata in selectia celui mai
% bun cromozom pentru generatia urmatoare
%
% cromozomi este matricea continand populatia
% de cromozomi din care se face selectia,
% funceval este numele functiei Matlab
% in care este definita functia de evaluare
% (performanta),
% a si b sunt limitele intervalului caruia
% ii apartin valorile reale ale cromozomilor.
%
% cromnoi este matricea obtinuta continand
% cromozomii generatiei urmatoare.
%
[nrcrom lungcrom]=size(cromozomi); % dimensiuni
% populatie
fit=[ ];
%
% Calculul functiei de evaluare:
[fit,fitsum]=fitness(cromozomi,funceval,a,b);
for cromind=1:nrcrom,
sval(cromind)=sum(fit(1,1:cromind));
end
%
% Selectia conform valorilor functiei de
% evaluare:
parnume=[ ];
for i=1:nrcrom,
rval=floor(fitsum*rand);
if rval<sval(1),
parnume=[parnume 1];
else
for j=1:nrcrom-1,
sl=sval(j);
su=sval(j)+fit(j+1);
if (rval>=sl) & (rval<=su),
parnume=[parnume j+1];
end
end
end
end
cromnoi(1:nrcrom,:)=cromozomi(parnume,:);
Aplicând  funcția  fselect,  este  rezolvată  selecția  în  vederea 
aplicării pasului de reproducere şi sunt obținuți următorii cromozomi: 

196 
Rezolvarea numerică a problemelor de optimizare 

>> popselect=fselect(cromozomi,'fevaluare',2,4)
popselect =
1 0 1 1 1 1 (cromozom 3)
1 0 0 1 0 0 (cromozom 5)
1 0 1 1 1 1 (cromozom 3)
1 0 1 1 1 1 (cromozom 3)
1 0 0 1 0 0 (cromozom 5)
Poate fi observat că au fost favorizați în procesul de selecție 
cromozomul  3  care  a  fost  triplicat  şi  cromozomul  5  care  a  fost 
duplicat. 
Pentru  noua  populație,  salvată  în  matricea  popselect, 
funcțiile de evaluare obțin următoarele valori: 
>>
[fit,fitsum]=fitness(popselect,'fevaluare',2,4)
fit =
79.1675 60.6764 79.1675 79.1675 60.6764
fitsum =
358.8553
Pentru noua populație poate fi observată imediat o creştere 
a sumei valorilor funcției de evaluare. 
În continuare trebuie aplicat pasul de reproducere populației 
obținute.  Acest  pas  va  fi  aplicat  numai  unei  submulțimi  a  acestei 
populației,  în  proporție  de  60  %  =  0.6,  ceea  ce  în  cazul  de  față 
corespunde  unui număr  de 5 x 0.6  =  3 cromozomi. Însă, în pasul de 
reproducere  pot  fi  împerecheați  doar  cromozomi  în  număr  par  şi 
numărul  de  cromozomi  este  rotunjit  inferior  la  primul  număr  par, 
adică  2.  Prin  urmare,  vor  fi  selectați  pentru  împerechere  doar  2 
membri  ai  acestei  populații,  selectați  aleator.  Implementarea  în 
Matlab a reproducerii este efectuată în funcția Matlab freprod: 
function crom1=freprod(cromozomi,propor)
% Functie utilizata in reproducerea unei
% proportii dintro populatie (de cromozomi)
%
% cromozomi este matricea continand populatia
% de cromozomi din care sunt alesi aleator cei
% supusi reproducerii,
% propor este proportia (subunitara) din
numarul
% de cromozomi supus reproducerii.
%
% crom1 este matricea obtinuta continand
% cromozomii reprodusi.

197 
Rezolvarea numerică a problemelor de optimizare 

%
% Initializari:
indrep=[ ];
crom1=cromozomi;
[nrcrom lungcrom]=size(cromozomi); % dimensiuni
% populatie
ind=1:nrcrom;
u=floor(nrcrom*propor);
if floor(u/2)~=u/2,
u=u-1;
end
%
% Selectia procentajului de reprodus aleator:
while length(indrep)~=u,
i=round(rand*nrcrom);
if i==0,
i=1;
end
if ind(i)~=-1,
indrep=[indrep i];
ind(i)=-1;
end
end
%
% Efectuare incrucisare cu un singur
% punct de incrucisare:
for i=1:2:u-1,
splitpos=floor(rand*lungcrom);
if splitpos==0,
splitpos=1;
end
i1=indrep(i);
i2=indrep(i+1);
genetemp=cromozomi(i1,splitpos+1:lungcrom);
crom1(i1,splitpos+1:lungcrom)=...
cromozomi(i2,splitpos+1:lungcrom);
crom1(i2,splitpos+1:lungcrom)=genetemp;
end
Această  funcție  este  aplicată  populației  din  matricea 
popselect, rezultatul fiind obținut sub forma noii generații salvate 
în matricea gennoua: 
>> gennoua=freprod(popselect,.6)
gennoua =
1 0 1 1 1 1 (cromozom 3)

198 
Rezolvarea numerică a problemelor de optimizare 

1 0 0 1 0 1 (cromozom obținut din 
                                                                                          cromozomul 3 şi 5)
1 0 1 1 1 0 (cromozom obținut din 
                                                                                          cromozomul 3 şi 5)
1 0 1 1 1 1 (cromozom 3)
1 0 0 1 0 0 (cromozom 5)
Poate  fi  observat  faptul  că  noii  membri  ai  populației 
(cromozomii succesori) au fost obținuți din cromozomii părinți, 3 şi 5, 
aplicând încrucişarea cu un singur punct de încrucişare a = 5. Valorile 
funcțiilor de evaluare pentru noua generație sunt: 
>>
[fit,fitsum]=fitness(gennoua,'fevaluare',2,4)
fit =
79.1675 62.2283 77.3545 79.1675 60.6764
fitsum =
358.5942
De data aceasta suma valorilor funcției de evaluare nu a mai 
fost îmbunătățită. 
În final, este efectuată mutația înainte de a repeat acest ciclu 
de  paşi  din  cadrul  AG.  Mutația  este  implementată  în  funcția  Matlab 
fmutatie: 
function crom1=fmutatie(cromozomi,rata)
% Functie utilizata in mutatia unei
% populatii (de cromozomi) cu o anumita rata
%
% cromozomi este matricea continand populatia
% de cromozomi supusa mutatiei,
% rata este rata (probabilitatea) mutatiei,
%
% crom1 este matricea obtinuta continand
% populatia de cromozomi ca rezulta al
% mutatiei.
%
[nrcrom lungcrom]=size(cromozomi); % dimensiuni
% populatie
crom1=cromozomi;
for i=1:nrcrom,
for j=1:lungcrom,
if rand<=rata,
if cromozomi(i,j)==1,
crom1(i,j)=0;
else

199 
Rezolvarea numerică a problemelor de optimizare 

crom1(i,j)=1;
end
end
end
end
Aplicând  această  funcție  cu  o  valoare  foarte  mică  a  ratei  de 
mutație,  şansele  de  modificare  a  populației  întro  singură  generație 
vor fi foarte mici. Acest lucru este ilustrat în continuare, pentru o rată 
de mutație de 0.005: 
>> gen2=fmutatie(gennoua,.005)
gen2 =
1 0 1 1 1 1
1 0 0 1 0 1
1 0 1 1 1 0
1 0 1 1 1 1
1 0 0 1 0 0
Poate fi observat că nu a avut loc nici‐o mutație, obținându‐
se aceeaşi populație, salvată în matricea gen2. 
Trebuie  menționat  că  în  pasul  de  reproducere  pot  fi  aplicați 
toți operatorii genetici. 
La acest moment s‐a încheiat producerea unei noi generații. 
Apoi, urmărind paşii AG,  aceleaşi procese de selecție şi reproducere 
(utilizând  operatorii  genetici)  vor  fi  repetate  construindu‐se  noi 
generații până la epuizarea timpului de căutare a soluției optimale. 
Pentru  implementarea  unui  AG  este  dezvoltată  funcția 
falggen  prezentată  în  continuare,  care  înglobează  toți  paşii  AG 
apelând  funcțiile  Matlab  prezentate  anterior  în  vederea  rezolvării 
unei probleme de maximizare: 
function [valv,fmax]=...
falggen(fun,domeniu,biti,...
dimpop,numgenera,rata,propor)
% Functie utilizata in determinarea maximului
% unei functii utilizand algoritmi genetici
%
% fun este functia Matlab definita de
% utilizator
% continand expresia functiei obiectiv, functie
% de o singura variabila si cu valori pozitive,
% domeniu este o matrice linie cu 2 elemente
% continand limita inferioara si cea superioara
% a variabilei (elementului programabil) v,
% biti este numarul de biti ai variabilei v,

200 
Rezolvarea numerică a problemelor de optimizare 

% 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 

201 
Rezolvarea numerică a problemelor de optimizare 

cromozomi având lungimea de 8 biți şi un număr de 10 cromozomi în 
populația  inițială.  AG  este  aplicat  pentru  20  de  generații,  cu 
probabilitatea  (rata)  mutației  de  0.005  şi  proporția  de  reproducere 
egală cu 0.6 conform următoarei linii de comandă Matlab: 
>>[valv,fmax]=falggen('fevaluare',[2...
>>4],8,10,...
20,.005,.6)
valv =
3.9059
fmax =
105.3556
Întrucât  soluția  exactă  a  PO  este  vˆ = 4 ,  rezultatul  obținut  este 
rezonabil. 
Observație:  Fiecare  nouă  rulare  a  funcției  falggen,  care 
implementează  un  AG  utilizat  în  rezolvarea  aceleiaşi  PO,  poate 
genera  rezultate  diferite  datorită  naturii  aleatoare  a  procesului  de 
aplicare a operatorilor genetici. 
În  concluzie,  deşi  sunt  relativ  lenți  în  execuție,  algoritmii 
genetici  pot  fi  aplicați  în  rezolvarea  unor  PO  dificile  cum  sunt  cele 
care au mai multe puncte de extreme sau cele în care este cerut un 
punct  de  optim  global.  Întrucât  algoritmii  care  implementează 
metodele  numerice  standard  în  rezolvarea  acestor  probleme  de 
optimizare  pot  conduce  la  eşec,  timpul  mai  lung  de  execuție  al  AG 
este pe deplin compensat în astfel de situații. 
Funcțiile  prezentate  pot  fi  implementate  şi  în  alte  variante. 
Astfel, de exemplu, poate fi utilizată încrucişarea cu mai multe puncte 
de  încrucişare,  sau  selecția  bazată  pe  principiul  ruletei  poate  fi 
implementată  în  manieră  diferită  față  de  cea  prezentată. 
Deasemenea,  pot  fi  utilizate  toolbox‐uri  Matlab  specializate  în 
implementarea AG pentru rezolvarea PO şi nu numai cum sunt GAOT 
ori FLEXGA. 

9.7. Algoritmi de tip Particle Swarm Optimization 
  Algoritmii  de  tip  Particle  Swarm  Optimization  (PSO)  au  fost 
dezvoltați şi introduşi inițial de către Eberhart şi Kennedy în 1995 prin 
lucrările  [E1],  [E2]  şi  [E3].  Algoritmii  de  tip  PSO  sunt  algoritmi  de 
căutare  bazați  pe  evoluția  populației,  ce  simulează  comportamentul 
păsărilor,  albinelor  sau  bancurilor  de  peşti.  Aceşti  algoritmi  au 
încercat inițial să simuleze elganța şi caracterul aleator al coregrafiei 
stolurilor  de  păsări.  Fiecare  individ  din  cadrul  stolului  este 

202 
Rezolvarea numerică a problemelor de optimizare 

reprezentat de către un vector în spațiul de căutare multidimensional 
ca  submulțime  a  domeniului  admis  pentru  variabilele  PO.  Acest 
vector are de asemenea alocat un alt vector, ce poartă denumirea de 
vector viteză, pentru determinarea următoarei mişcări a particulei. 
Algoritmii  de  tip  PSO  determină,  de  asemenea,  cum  este 
făcută  actualizarea  vitezelor  particulelor.  Fiecare  particulă  își 
actualizeză  viteza  bazându‐se  pe  viteza  curentă  și  pe  cea  mai  bună 
poziție  explorată  până  la  acel  moment;  și  pe  cea  mai  bună  poziție 
explorată de către întregul roi [E4], [S2]. 
Întregul  proces  descris  anterior  este  repetat  de  un  număr 
predefinit de iterații în cadrul algoritmilor de tip PSO până ce se obțin 
performanțele impuse / alese pentru FO. 
Simlar AG, algoritmii de tip PSO folosesc o populație de soluții 
potențiale.  Spre  deosebire  de  AG,  algoritmii  de  tip  PSO  nu  folosesc 
operatori  inspirați  din  evoluția  naturală  pentru  a  extrage  (a  selecta) 
soluții  care  vor  contribui  la  formarea  indivizilor  generațiilor 
următoare.  În  locul  operatorului  de  mutație,  algoritmii  de  tip  PSO 
utilizează schimbul de informație între indivizii (particulele) populației 
(stolului).  Prin  urmare,  fiecărei  particule  îi  este  ajustată  traiectoria 
ținând seama de cea mai bună poziție a particulei respective întâlnită 
până  atunci  şi  de  cea  mai  bună  poziție  întâlnită  până  atunci  de  cea 
mai  bună  particulă  din  stol  (populație)  sau  dintr‐o  vecinătate  a  ei. 
Fiecare particulă este un punct în spațiul de căutare. 
S‐a  arătat  că  acest  model  simplu  se  poate  aplica  eficient  în 
cadrul unor probleme de optimizare cu un grad de dificultate ridicat. 
Algoritmii  de  tip  PSO  au  fost  dezvoltați  inițial  pentru  a  fi  aplicați  în 
spații  de  căutare  cu  valori  reale,  dar  unele  categorii  de  PO  sunt 
definite  pe  spații  cu  valori  discrete  la  care  domeniile  admise  pentru 
variabilele  PO  sunt  finite.  Exemple  clasice  pentru  aceste  probleme 
sunt  cele  de  combinatorică  în  combinație  cu  programarea  liniară  şi 
cea pătratică [E4]. Kennedy şi Eberhart au introdus în 1997 o variantă 
binară  a  algoritmilor  de  tip  PSO.  Aceşti  algoritmi  sunt  numiți  în 
continuare  algoritmi  binari  de  tip  PSO  spre  a‐i  dosebi  de  cei  inițiali, 
algoritmii  reali  de  tip  PSO,  şi  sunt  dedicați  rezolvării  numerice  a 
problemelor  de  optimizare  discretă  [K4].  În  algoritmii  binari  de  tip 
PSO fiecare particulă îşi reprezintă poziția prin valori binare de 0 și 1. 
Valoarea  fiecărei  particule  poate  fi  modificată  (sau  poate  suferi  o 
mutație) de la 1 la 0 sau invers. În algoritmii binari de tip PSO viteza 
particulei este definită sub forma probabilității ca acea particulă să îşi 
modifice starea în 1. 

203 
Rezolvarea numerică a problemelor de optimizare 

În  [E4],  [S1]  şi  [K4]  este  prezentată  o  descriere  detaliată  a 


algoritmilor  de  tip  PSO.  În  cele  ce  urmează  se  va  face  o  descriere 
succintă  a  algoritmilor  reali  şi  a  celor  binari  de  tip  PSO  utilizați  în 
rezolvarea unor PO de minimizare. Se acceptă un spațiu de căutare d‐
dimensional  în  care  particula  i  din  roi  poate  fi  reprezentată  prin 
vectorul  de  poziție  X i = ( xi1 , xi 2 , K , xid )   aparținând  acestui  spațiu. 
Viteza particulei este notată cu  Vi = (vi1 , vi 2 , K, vid ) . Se notează cu 
Pi ,best = ( p i1 , p i 2 , K , p id )  cea mai bună poziție atinsă de particulă şi 
cu  Pg ,best = ( p g 1 , p g 2 , K , p gd )   cea  mai  bună  poziție  explorată  a 
roiului.  Viteza  şi  poziția  fiecărei  particule  sunt  actualizate  conform 
relațiilor (9.7.1) respectiv (9.7.2): 
Vi (t + 1) = w Vi (t ) + c1ϕ1 ( Pibest − xi ) + c 2 ϕ 2 ( Pgbest − xi ) ,       (9.7.1) 
xi (t + 1) = xi (t ) + Vi (t + 1) .                     (9.7.2) 
Relațiile  (9.7.1)  şi  (9.7.2)  pot  fi  privite  ca  ecuații  de  stare 
aferente  vitezei  respectiv  poziției  unor  sisteme  cu  timp  discret 
aferente  dinamicii  particulelor.  În  (9.7.1)  sunt  utilizate  următoarele 
notații: 
- c1 = const  şi  c 2 = const  sunt parametri strict pozitivi, 
- ϕ1   și  ϕ 2   sunt  variabile  aleatoare  cu  distribuție  uniformă  în 
[0, 1], 
- w  este ponderea inerțială ce determină influența vectorului 
viteză anterior în cadrul vectorului viteză actual. 
Vitezei i se impune o restricție de tip inegalitate prin limitarea 
superioară  la  valoarea  Vmax   în  toate  dimensiunile.  Această  limită 
superioară  previne  mișcarea  prea  rapidă  a  particulei  dintr‐o  zonă  în 
altă zonă a spațiului de căutare. Valoarea lui  Vmax  este inițializată de 
regulă  în  funcție  de  domeniul  de  variație  al  variabilelor  xij   ale 
problemei  de  optimizare,  j = 1, d .  De  exemplu,  dacă  domeniul  de 
căutare  pentru  xij   este  [–50,  50],  atunci  Vmax   este  proporțional  cu 
50. 
Parametrul  Pibest  reprezintă cea mai bună valoare a particulei 
şi  este  actualizat  pentru  fiecare  particulă  în  cadrul  fiecărei  interații 
atunci când se obține o poziție mai bună pentru particulă sau pentru 
întregul  roi.  Caracteristica  de  bază  a  algoritmilor  de  tip  PSO  este 
interacțiunea socială. Indivizii (particulele) din cadrului roiului învață 

204 
Rezolvarea numerică a problemelor de optimizare 

unul de la altul şi, bazându‐se pe cunoştințele obținute, se deplasează 
pentru  a  obține  o  poziție  asemănătoare  cu  cea  mai  bună  poziție 
proprie  obținută  până  atunci  sau  spre  cea  mai  bună  poziție  a 
vecinilor.  Indivizii  din  vecinătate  comunică  între  ei.  Una  dintre 
structurile  considerate  în  acest  context  este  reprezentată  de  aşa‐
numita aşezare în stea. 
În  această  structură  fiecare  particulă  poate  interacționa  cu 
toți  ceilalți  indivizi  formând  o  rețea  socială  conectată  total.  În  acest 
caz fiecare particulă este atrasă către cea mai bună particulă (cea mai 
bună  soluție)  găsită  de  oricare  membru  din  întregul  roi.  Fiecare 
particulă imită cea mai bună particulă. Astfel, parametrul  Pgbest , care 
reprezintă cea mai bună valoare globală, este actualizat atunci  când 
este găsită o poziție mai bună în întregul roi. 
În algoritmii reali de tip PSO trebuie parcurşi paşii următori 
(de exemplu, [D5]): 
1.  Inițializarea  roiului  X i   prin  generarea  aleatoare  a  particulelor  în 
cadrul  hipercubului  spațiului  de  căutare.  Definirea  constantelor 
c1 , c2  şi a numărului maxim de iterații. 
2.  Evaluarea  performanței  fiecărei  particule  pe  baza  FO  F   folosind 
poziția curentă,  X i (t ) . 
3. Compararea performanței fiecărui individ cu cea mai bună poziție a 
sa de până acum: 
Dacă  F ( X i ) < F ( Pibest )  atunci  F ( Pibest ) = F ( X i ), Pibest = X i . 
4.  Compararea  performanței  fiecărei  particule  cu  cea  mai  bună 
poziție a roiului: 
Dacă  F ( X i ) < F ( Pgbest )  atunci  F ( Pgbest ) = F ( X i ), Pgbest = X i . 
5. Modificarea vitezei particulelor conform relației (9.7.1). 
6.  Deplasarea  fiecărei  particule  într‐o  nouă  poziție  folosind  relația 
(9.7.2). 
7.  Revenirea  la  pasul  2.  până  se  ajunge  la  numărul  maxim  de  paşi 
stabilit inițial şi care determină oprirea algoritmului. 
În  algoritmii  binari  de  tip  PSO  cea  mai  bună  valoare  a 
particulei  şi  cea  mai  bună  valoare  globală  sunt  actualizată  ca  şi  în 
algoritmii  reali.  Diferența  majoră  dintre  algoritmii  binari  şi  cei  reali 
constă în faptul că vitezele particulelor sunt definite ca probabilitatea 
ca  un  bit  să  ia  valoarea  1.  Folosind  această  definiție  viteza  trebuie 

205 
Rezolvarea numerică a problemelor de optimizare 

restricționată în intervalul [0, 1]. Astfel trebuie introdusă o scalare a 
valorilor  reale  ale  vitezei  în  intervalul  [0,  1].  Funcția  de  normalizare 
folosită are expresia: 
1
Vij' (t ) = sig (Vij (t )) = −Vij ( t )
.                  (9.7.3) 
1+ e
Ecuația  (9.7.1)  este  folosită  şi  aici  pentru  actualizarea 
vectorului  vitezelor  particulelor.  Noile  poziții  ale  particulelor  rezultă 
pe baza următoarei ecuații care înlocuieşte varianta (9.7.2) din cazul 
algoritmilor reali: 
⎧1 dacă rij < sig(Vij (t + 1))
X ij (t + 1) = ⎨ ,                 (9.7.4) 
⎩0 în rest
în care  rij  este o variablilă aleatoare unformă în intervalul [0, 1]. 
Până  în  prezent  algoritmii  de  tip  PSO  au  fost  aplicați  la 
probleme  matematice  şi  economice  de  optimizare,  de  optimizare 
parametrică  a  sistemelor  de  reglare  automată,  de  combinatorică, 
probleme NP‐complete, etc. În [D5] este realizată o analiză a stadiului 
actual  al  dezvoltărilor  teoretice  şi  aplicațiilor  algoritmilor  de  tip  PSO 
cu accent pe rezolvarea PO din automatică. 

9.8. Aplicații în Matlab 
  Pentru  rezolvarea  numerică  a  problemelor  de  optimizare  a 
fost dezvoltat Optimization Toolbox [M4] în cadrul mediului Matlab. 
  Funcția  fminunc  este  destinată  rezolvării  problemelor  de 
programare  matematică  fără  restricții  (PFR)  în  cazul  în  care  sunt 
probleme  de  minimizare  şi  este  apelabilă  în  cel  puțin  două  forme 
având următoarele sintaxe: 
ƒ vopt=fminunc(fun,v0,options)
ƒ [vopt,valf]= fminunc(fun,v0,options)
în care argumentele au semnificația: 
fun  funcție  Matlab  definită  de  utilizator,  de  o  variabilă 
(scalară) sau de mai multe variabile (variabilă vectorială), 
care  conține  expresia  funcției  obiectiv  care  trebuie 
minimizată; 
y0  vector  (matrice  coloană)  conținând  valorile  inițiale  ale 
variabilei (variabilelor) problemei; 
options  argument  prin  care  pot  fi  setați  anumiți  parametri  ai 
metodei de rezolvare numerică, prin intermediul funcției 
optimset. 

206 
Rezolvarea numerică a problemelor de optimizare 

  Prin aplicarea funcției fminunc se obțin: 
vopt  vector  conținând  valorile  optimale  ale  variabilei 
(elementului programabil) v; 
valf  scalar  conținând  valoarea  optimală  (minimă)  a  funcției 
obiectiv. 
Funcția optimet are următoarea sintaxă: 
options=odeset(’param1’,val1,’param1’,val1,...)
în  care  ’paramj’  reprezintă  numele  unui  parametru,  iar  valj 
reprezintă valoarea asignată acelui parametru, j = 1, 2, ... .
Parametrii nespecificați rămân cu valorile lor implicite. În continuare 
sunt definiți doi dintre aceşti parametri:
TolX  precizia absolută a soluției; 
TolFun  precizia absolută în calculul valorii funcției obiectiv. 
  Trebuie remarcat faptul că executând comanda 
>> optimset(@fminunc)
se  va  obține  o  structură  cu  numele  şi  valorile  tuturor  acestor 
parametri,  urmând  ca  apoi  să  fie  setate  imediat  valorile  dorite  ale 
parametrilor: 
ans =
ActiveConstrTol: []
DerivativeCheck: 'off'
Diagnostics: 'off'
DiffMaxChange: 0.1000
DiffMinChange: [1x1 double]
Display: 'final'
GoalsExactAchieve: []
GradConstr: []
GradObj: 'off'
Hessian: 'off'
HessMult: []
HessPattern: [1x31 char]
HessUpdate: 'bfgs'
Jacobian: []
JacobMult: []
JacobPattern: []
LargeScale: 'on'
LevenbergMarquardt: []
LineSearchType: 'quadcubic'
MaxFunEvals: [1x21 char]
MaxIter: 400
MaxPCGIter: [1x33 char]

207 
Rezolvarea numerică a problemelor de optimizare 

MaxSQPIter: []
MeritFunction: []
MinAbsMax: []
NonlEqnAlgorithm: []
Preconditioner: []
PrecondBandWidth: 0
ShowStatusWindow: []
TolCon: []
TolFun: [1x1 double]
TolPCG: 0.1000
TolX: [1x1 double]
TypicalX: [1x25 char]
  În  cazul  versiunilor  Matlab  cel  puțin  6.x,  alte  programe 
utilizate  în  rezolvarea  problemelor  de  programare  matematică  sunt 
fminsearch  (pentru  PFR),  fmincon  (pentru  PREI)  şi  fminbnd  (pentru 
probleme cu restricții de tip inegalitate cu o singură variabilă). 
Pentru  implementarea  în  Matlab  a  algoritmului  metodei 
gradientului  conjugat  în  versiunea  Fletcher‐Reeves  este  dezvoltată 
funcția fmingc utilizând informațiile din subcapitolul 9.3: 
function [sol,gradi,nriter]=...
fmingc(f,gradf,f1,v,eps)
% Algoritmul de calcul al punctului de minim
% prin metoda gradientului conjugat
% in versiunea Fletcher-Reeves
% pentru o functie neliniara f(v)
% de n variabile
%
% f este functia de variabilele independente v,
% care reprezinta o functie definita de
% utilizator,
% gradf este gradientul functiei f,
% care reprezinta o functie definita de
% utilizator,
% f1 este functia de cautare liniara a pasului
% optimal, reprezentand
% deasemenea o functie definita de utilizator,
% v reprezinta o matrice coloana continand
% cele n valori initiale
% ale vectorului variabilei independente v,
% eps este precizia dorita.
%
% sol este solutia problemei de optimizare
% (valoarea optimala a lui v),

208 
Rezolvarea numerică a problemelor de optimizare 

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

209 
Rezolvarea numerică a problemelor de optimizare 

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

210 
Rezolvarea numerică a problemelor de optimizare 

%
gradf=zeros(size(v));
gradf(1)=0.5*(4*v(1)^3-32*v(1)+5);
gradf(2)=0.5*(4*v(2)^3-32*v(2)+5);
În continuare este creat şi al treilea fişier funcție, cu numele 
f191.m,  destinat  definirii  funcției  de  căutare  liniară  utilizată  în 
obținerea valorii optimale a pasului de căutare: 
function pasn=f191(pas)
% Expresia functiei de cautare liniara
% utilizata in obtinerea valorii optimale
% a pasului de cautare:
%
global p1 d1;
q1=p1+pas*d1;
pasn=feval('f91',q1);
În  final,  este  executată  următoarea  secvență  de  program 
Matlab  care  apelează  funcția  fmingc,  rezultatele  fiind  prezentate 
imediat: 
global p1 d1;
v0=[.6 .6];
x1=fmingc('f91','gradf91','f191',v0,.000005);
>> Numarul de iteratii=
2
Solutia optimala=
-2.9035 -2.9035
Gradientul in solutia optimala=
1.0e-006 *
-0.3815
-0.3815
Pentru implementarea în Matlab a algoritmului de rezolvare 
a  problemei  de  programare  liniară  în  varianta  Barnes  (a  se  vedea 
subcapitolul 9.5) este dezvoltată funcția fbarnes: 
function [solv,solf,lista,iter]=...
fbarnes(A,b,c,eps)
% Algoritmul Barnes de rezolvare
% a unei probleme de programare liniara
% cu functia obiectiv f(v)=c'v,
% supusa restrictiilor Av=b si v>=0
%
% A este matricea coeficientilor
% restrictiilor de tip egalitate,
% b este matricea coloana din membrul drept al

211 
Rezolvarea numerică a problemelor de optimizare 

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

212 
Rezolvarea numerică a problemelor de optimizare 

lista=[lista k];
end
end
%
% Urmeaza partea doar pentru probleme
% nedegenerate:
if contlista==m,
for k=lista,
B=[B A(:,k)]; cb=[cb cp(k)];
end
solprimal=b'/B'; solv=solprimal;
break
end
iter=iter+1;
end
solf=cp*v;
i=1; fprintf('\nSolutia optimala=');
for j=lista,
fprintf('\nv(%1.0f)=%8.4f\',j,solv(i));
i=i+1;
end
fprintf('\nCelelalte variabile sunt ...
nule\n');
disp('Numarul de iteratii='); disp(iter);
disp('Valoarea minima a functiei obiectiv=');
disp(solf);
Funcția  fbarnes  va  fi  aplicată  în  continuare  în  cadrul 
exemplului 9.2. 
Exemplul  9.2:  Să  se  rezolve  prin  metoda  lui  metoda  lui 
Karmakar în varianta lui Barnes următoarea problemă de programare 
liniară [P2]: 
PREI : vˆ = arg max J = f ( v ) = 2v1 + v 2 + 4v 3  , 
v
  v = [v1 v2 v 3 ]T ∈ R 3  , 
  supusă la: 
  v1 + v 2 + v3 ≤ 7  , 
  v1 + 2v 2 + 3v3 ≤ 12  , 
  v1 , v 2 , v3 ≥ 0  . 
  Soluție:  Pentru  început,  problema  trebuie  adusă  la 
formularea din varianta standard (9.5.1). În acest scop sunt introduse 
două  variabile  pozitive  v4  şi  v5,  numite  variabile  slabe  (variabile 

213 
Rezolvarea numerică a problemelor de optimizare 

suplimentare), care sunt adunate în membrii stângi ai celor două RTI, 
câte  o  variabilă  slabă  pentru  fiecare  RTI.  Acest  lucru  va  transforma 
cele două RTI în RTE. 
În  plus,  trebuie  schimbate  semnele  coeficienților  din  FO 
pentru schimbarea problemei de maximizare întruna de minimizare. 
Rezultă varianta standard a problemei de programare liniară: 
PREI : vˆ = arg min − J = − f ( v) = −2v1 − v 2 − 4v 3 , 
v

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

214 
Rezolvarea numerică a problemelor de optimizare 

9.9. Rezumat 
Enunțul unei probleme de optimizare (PO) în sens restrâns trebuie să 
conțină două elemente: 
A) modelul mediului la care se referă situația dată, 
B) criteriul de optimizare. 
Rezolvarea  unei  PO  presupune  existența  unui  al  treilea  element,  şi 
anume: 
C) metoda de optimizare. 
În  general,  metodele  de  descreştere  (de  relaxare)  au  următoarea 
structură recurentă: 
v k +1 = v k + s k d k , k = 0,1,...  , 
în care vectorul dk ∈ Rn reprezintă direcția de deplasare (de căutare) 
din  punctul  curent  vk,  iar  scalarul  sk  >  0  este  lungimea  pasului  de 
căutare (de deplasare). 
Metodele  de  ordinul  zero  necesită  doar  calculul  valorilor  FO  f  în 
punctul vk şi, eventual, în câteva puncte vecine (de explorare). 
Metodele de ordinul I (de căutare liniară) necesită calculul valorii FO 
şi al gradientului acesteia în punctul curent vk. 
Metodele de ordinul II (de tip Newton) necesită calculul valorii FO, al 
gradientului  şi  hessianului  acesteia  precum  şi  inversarea  hessianului 
în punctul curent vk. 
Metodele  de  căutare  liniară  exactă  urmăresc  determinarea  valorii 
optimale a pasului de căutare sk, notată cu  ŝ k , din condiția realizării 
minimului fucției obiectiv f în direcția dk. Acestea sunt de două tipuri: 
™ metode de explorare directă, care constau în identificarea în 
prealabil a unui interval [a0, b0] ⊂ R+ care conține punctul de 
minim  ŝ k ,  urmată  de  reducerea  iterativă  a  lungimii  acestui 
interval  până  la  alegerea  unei  precizii  impuse  ε  >  0  de 
localizare a lui  ŝ k ; 
™ metode  de  interpolare:  în  ipoteza  că  funcția  f1  este  netedă, 
cele mai eficiente metode se bazează pe aproximarea lui f1 cu 
o funcție f* relativ simplă, iar minimul acestei funcții poate fi 
calculat  mai  uşor  decât  minimul  lui  f1  şi  poate  fi  utilizat 
iterativ  ca  o  estimație  a  minimului  funcției  f1.  De  regulă,  f1 
este  aleasă  o  funcție  polinomială  de  grad  mic  (doi  sau  trei), 
iar  metoda  de  minimizare  este  numită  metoda  interpolării 
polinomiale (pătratice, respectiv cubice). 

215 
Rezolvarea numerică a problemelor de optimizare 

Metodele  de  căutare  liniară  aproximativă  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 : 
T
| f v ( v k + s k d k ) ⋅ d k |≤ −η(g k ) T d k .
Metoda  Armijo  este  bazată  în  principal  pe  condiția  de  descreştere 
suficientă exprimată sub forma relației: 
k +1
f − f k ≤ µ ⋅ s k (g k ) T d k .
O metodă de minimizare cu direcţia de căutare optimală d k * definită
de:
s k G k d k * = −g k   
este  numită  metodă  Newton,  soluția  d k *   este  numită  direcție 
Newton,  iar  sistemul  de  ecuații  liniare  rezultat  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 celui anterior: 
s k B k d k = −g k  , 
în care pasul de căutare sk este determinat cu una din metodele de
căutare liniară.
Metodele de gradient 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 .
Metodele  de  gradient  conjugat  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.  Direcția  de  căutare 
pentru metodele de gradient conjugat este obținută pe baza relației: 

216 
Rezolvarea numerică a problemelor de optimizare 

d k = −g k + β k d k −1 , k = 1,2,...  , 
cu  d 0 = −g 0 ,  iar  parametrul  scalar  βk  este  specific  metodei  şi 
contribuie la accelerarea vitezei de convergență. 
Metodele  de  ordinul  II,  cunoscute  şi  sub  numele  de  metode  de  tip 
Newton, utilizează un model pătratic al funcției obiectiv f de forma: 
f ( v k + s k d k ) ≈ f k + s k (g k ) T d k + (1 / 2)( s k ) 2 (d k ) T G k d k  . 
Minimul  FO  f  este  obținut  dacă  următoarea  funcție  pătratică  îşi 
atinge minimul în raport cu direcția de căutare dk: 
Φ : R n → R, Φ (d k ) = s k (g k ) T d k + (1 / 2)( s k ) 2 (d k ) T G k d k  . 
Prin  anularea  gradientului  lui  Φ  în  punctul  staționar  d k * ,  se  obține 
ecuația Newton. 
Definirea unei probleme de programare liniară în varianta standard 
este următoarea: 
PREI : vˆ = arg min J = c T v  ,  supusă la  A v = b, v ≥ 0 , 
v

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


(elementelor  programabile).  Constantele  sunt  date  sub  forma  unei 
matrice coloană  b = [b1 b2 ... bm ] T , a matricei  A = [a ij ] i =1, m  şi 
j =1, n

a matricei linie  c = [c1
T
c2 ... c n ] . 
Cei mai des utilizați operatori genetici în dezvoltarea noilor populații 
sunt selecția, încrucişarea, inversiunea şi mutația. 
Un algoritm genetic constă în parcurgerea paşilor următori: 
1. Se inițiază populația de cromozomi. 
2. Se  evaluează  fiecare  cromozom  din  populație.  Se  selectează 
părinții noii populații. 
3. Pasul  de  reproducere.  Se  creează  o  nouă  generație  de 
cromozomi  prin  împerecherea  cromozomilor  selectați 
utilizând operatori genetici. 
4. Se  şterg  membrii  populației  inițiale  pentru  a  fi  înlocuiți  cu 
noua generație. 
5. Se  evaluează  noii  cromozomi  şi  se  inserează  în  noua 
populație. 
6. Algoritmul este oprit dacă timpul de căutare s‐a terminat. 
Altfel, urmează salt la pasul 3. 
Un algoritm real de tip PSO constă în parcurgerea paşilor următori: 

217 
Rezolvarea numerică a problemelor de optimizare 

1.  Inițializarea  roiului  X i   prin  generarea  aleatoare  a  particulelor  în 


cadrul  hipercubului  spațiului  de  căutare.  Definirea  constantelor 
c1 , c2  şi a numărului maxim de iterații. 
2.  Evaluarea  performanței  fiecărei  particule  pe  baza  FO  F   folosind 
poziția curentă,  X i (t ) . 
3. Compararea performanței fiecărui individ cu cea mai bună poziție a 
sa de până acum: 
Dacă  F ( X i ) < F ( Pibest )   atunci 
F ( Pibest ) = F ( X i ), Pibest = X i . 
4.  Compararea  performanței  fiecărei  particule  cu  cea  mai  bună 
poziție a roiului: 
Dacă  F ( X i ) < F ( Pgbest )   atunci 
F ( Pgbest ) = F ( X i ), Pgbest = X i . 
5. Modificarea vitezei particulelor conform (9.7.1). 
6. Deplasarea fiecărei particule într‐o nouă poziție folosind (9.7.2). 
7.  Revenirea  la  pasul  2.  până  se  ajunge  la  numărul  maxim  de  paşi 
stabilit inițial şi care determină oprirea algoritmului. 

9.10. Probleme propuse 
1. Să se implementeze în Matlab algoritmul metodei secțiunii 
de aur, utilizată în minimizarea unor funcții neliniare. 
2.  Să  se  implementeze  în  Matlab  algoritmul  metodei 
interpolării pătratice, utilizată în minimizarea unor funcții neliniare. 
3.  Să  se  implementeze  în  Matlab  o  variantă  a  algoritmului 
metodei protejate de căutare liniară aproximativă. 
4.  Să  se  implementeze  în  Matlab  algoritmul  de  calcul  al 
punctului de minim prin metoda cvasi‐Newton cu pas variabil. 
5.  Să  se  implementeze  în  Matlab  algoritmul  de  calcul  al 
punctului de minim prin metoda gradientului. 
6.  Să  se  implementeze  în  Matlab  algoritmul  metodei 
gradientului conjugat în versiunea Polak‐Ribière. 
7.  Să  se  implementeze  în  Matlab  algoritmul  metodei 
gradientului conjugat în versiunea Hestenes‐Stiefel. 
8. Să se implementeze în Matlab algoritmul metodei regiunii 
de încredere în model. 

218 
Rezolvarea numerică a problemelor de optimizare 

9. Să se implementeze în Matlab variante ale funcției Matlab 
falggen care implementează AG în rezolvarea PO în cazul unor funcții 
de două, trei, patru sau mai multe variabile. 
10. Să se implementeze în Matlab algoritmi reali şi binari de 
tip PSO. 
11.  Să  se  rezolve  următoarele  probleme  de  optimizare  fără 
restricții: 
PFR :
a)  1  , 
vˆ = arg max J = f ( v) =
v (v1 − 1) + (v 2 − 1) + (v3 − 1) + a
2 2 2 2

    v = [v1 v2 v 3 ]T ∈ R 3  ,  a ∈ R \ {0}  ; 


b)  PFR : vˆ = arg min J = f ( v ) = 100(v1 − v 2 ) 2 + (v1 − 1) 2 , 
v

        v = [v1 v 2 ] ∈ R 2  ; 


T

c) 
PFR :
4 2 4 2
v1 − 16v1 + 5v1 v 2 − 16v 2 + 5v 2
vˆ = arg min J = f ( v) = + +
v 2 2  
+ (v3 − 1) + (v 4 − 1) + (v5 − 1) ,
2 2 2

v = [v1 v2 v3 v4 v5 ]T ∈ R 5 .
12.  Să  se  rezolve  următoarele  probleme  de  programare 
liniară: 
a)  PREI : vˆ = arg min J = f ( v ) = 5v1 + 7v 2 + 10v 3  ,  
v

v = [v1 v2 v 3 ]T ∈ R 3  , 
  supusă la: 
  v1 + v 2 + v 3 ≤ 4  , 
  v1 + 2v 2 + 4v 3 ≥ 5  , 
  v1 , v 2 , v 3 ≥ 0  ; 
b)  PREI : vˆ = arg max J = f ( v ) = 4v1 + 5v 2  , 
v

  v = [v1 v 2 ]T ∈ R 2  , 
  supusă la: 
  v1 + v 2 ≤ 5  , 

219 
Rezolvarea numerică a problemelor de optimizare 

  v1 + 2v 2 ≤ 7  , 
  v1 + 4v 2 ≤ 10  , 
  v1 , v 2 ≥ 0  ; 
c)  PREI : vˆ = arg max J = f ( v ) = 2v1 − 4v 2 + 4v 3  ,  
v

v = [v1 v2 v 3 ]T ∈ R 3  , 
  supusă la: 
  v1 + 2v 2 + v 3 ≤ 30  , 
  v1 + v 2 = 10  , 
  v1 + 2v 2 + v 3 ≥ 8  , 
  v1 , v 2 , v 3 ≥ 0  . 
13.  Să  se  rezolve  următoarele  probleme  de  optimizare  cu 
restricții  de  tip  inegalitate  (probleme  cu  restricții  de  tip  inegalitate, 
PRI): 
a)  PRI : vˆ = arg max J = f (v) = e v + sin(6v)  ,   v ∈ R  , 
v
  supusă la:  0 ≤ v ≤ 1  ; 
1 1
b)  PRI : vˆ = arg max J = f (v) = 10 + sin( )  ,  
v (v − 0.16) + 0.1
2
v
v ∈ R \ {0}  , 
  supusă la:  0.01 ≤ v ≤ 0.3  ; 
2 2
c)  PRI : vˆ = arg max J = f ( v ) = v1 + v 2 + v1 v 2 + 2v1  ,  
v

v = [v1 v 2 ]T ∈ R 2  , 
  supusă la: 
3
  − v1 2 − v 2 2 ≥ 0  , 
2
  v 2 ≤ 0  ; 
2
d)  PRI : vˆ = arg min J = f ( v ) = v1 + v 2  ,   v = [v1 v 2 ]T ∈ R 2  , 
v
  supusă la: 
3 2
  v 2 − v1 ≥ 0  ; 
2 2
e)  PRI : vˆ = arg max J = f ( v ) = v1 + v 2  ,   v = [v1 v 2 ]T ∈ R 2  , 
v
  supusă la: 
  v1 ≥ 0  , 

220 
Rezolvarea numerică a problemelor de optimizare 

  v 2 ≥ 0  , 
2
  1 − (v1 − 4) 2 − v 2 ≥ 0  , 
2
  4 − (v1 − 1) 2 − v 2 ≥ 0  ; 
f)  PRI : vˆ = arg min J = f ( v ) = (v1 − 1) 2 + (v 2 − α) 2  ,  
v

v = [v1 v 2 ]T ∈ R 2  ,   α ∈ R  , 


  supusă la: 
  − v 2 + 4 ≥ 0  , 
1 2
  v1 + v 2 ≥ 0  , 
2
  − v1 − v 2 + 4 ≥ 0  ; 
1
g)  PRI : vˆ = arg min J = f ( v ) = 2 2
 ,  
v
(v1 + 4v 2 − 100) 2
v = [v1 v 2 ]T ∈ R 2  , 
  supusă la: 
  − v 2 + 4 ≥ 0  , 
1
  v 1 + v 2 v 2 ≥ 0  , 
2
  − v1 − v 2 + 4 ≥ 0  ; 
1
h)  PRI : vˆ = arg max J = f ( v ) =  ,  
v (v1 − 2) + (v 2 − 2) 2 + 1
2

v = [v1 v 2 ]T ∈ R 2  , 
  supusă la: 
1
  vi ≤  ,   i = 1,2  . 
2
 

221 

S-ar putea să vă placă și