Sunteți pe pagina 1din 49

Matematici speciale

Capitolul 13

Programare dinamic
Conf. dr. ing. mat. Ovidiu Bljin

1. Procese secveniale finite


2. Funcii decompozabile
3. Metoda programrii dinamice
regresiv
4. Metoda programrii dinamice
progresiv

MS - Cursul 14

Cap.13. Programare dinamic

Programarea dinamic se utilizeaz n studiul


unui numr important de probleme complexe, printre
acestea, pe prim plan, fiind problemele de optimizare
secvenial.
Ea se ncadreaz n categoria tehnicilor de
cutare a optimului pas cu pas. Provine, n esen,
din metodele de tip enumerativ, dar realizeaz o
ealonare a enumerrilor, care permite, la fiecare
faz, limitarea numrului de enumerri ulterioare.
La baza programrii dinamice st principiul
formulat de R. Bellman: O politic optim este
format din subpolitici optime.
MS - Cursul 14

Cap.13. Programare dinamic

Principiu derivat: O mulime optimal a


deciziilor are proprietatea c oricare ar fi prima
decizie, deciziile urmtoare trebuie s fie optimale
cu privire la rezultatele primei decizii.
Tehnica programrii dinamice const n determinarea soluiilor optime globale i a valorii optime
a funciei obiectiv ale problemei iniiale, prin rezolvarea secvenial a unor probleme de optimizare
asociate celei iniiale, mai simple, al cror optim
este calculat n funcie de o singur variabil.
Este necesar ca problema iniial s fie
decompozabil n faze i optimizrile pe faze s
aib un caracter recursiv.
MS - Cursul 14

Cap.13. Programare dinamic

O serie de probleme din microeconomie


(gestiune, investiii, prospeciuni) i macroeconomie
(planificare, prognoz), cu un caracter secvenial,
constituie domenii de aplicare.
Modelul matematic al unei probleme de
programare dinamic are caracteristicile unui proces
secvenial, care evolueaz n timp.
Notm cu St mulimea strilor posibile ale procesului la faza (etapa, momentul) tT R. Evoluia
(trecerea dintr-o stare n alta) procesului are loc n
urma aplicrii unei decizii (variabile de decizie) xt
dintr-o mulime de decizii admisibile Xt(st), cu stSt .
MS - Cursul 14

Cap.13. Programare dinamic

Fiecrei faze t i corespunde o valoare vt(st, xt),


ce poate fi msurat.
Se pune problema de a determina soluia
global, care optimizeaz (minimizeaz sau maximizeaz) o funcie obiectiv (de eficien) global f, ce
depinde de valorile vt, t T.
Dac T este o mulime finit sau numrabil de
numere reale, avem o problem de programare
dinamic discret. Dac T este un interval din R,
avem o problem de programare dinamic continu.
Numrul fazelor procesului, notat cu n, poate
fi finit sau infinit.
MS - Cursul 14

Cap.13. Programare dinamic

Dac legea de variaie a strilor este determinist, atunci problema este determinist, iar dac
legea este probabilistic, atunci problema este
stochastic.
n cele ce urmeaz se va studia cazul
programrii dinamice discret, determinist, cu un
numr finit de faze.

MS - Cursul 14

Cap.13. Programare dinamic

1. Procese secveniale finite

MS - Cursul 14

Cap.13. Programare dinamic

Se consider un proces secvenial finit, cu n faze


(etape).
Dac starea iniial a procesului este s0, atunci
la momentul urmtor t = 1, prin adoptarea deciziei
x1 X1(s0), procesul trece ntr-o nou stare s1.
n general, la momentul i (i = 1,..., n), prin
adoptarea deciziei xi Xi(si-1), procesul trece din
starea si-1 n starea si . Starea sn se numete stare
final:

MS - Cursul 14

Cap.13. Programare dinamic

Definiie. Procesul este decompozabil dac starea si


de la ieirea din faza i nu depinde dect de starea si-1
de la ieirea din faza i-1 i de valoarea variabilei de
decizie xi luat la faza i:
si = i ( si 1 , xi ) , xi Xi(si -1), i = 1, 2,..., n (1)
unde i : Si-1 Xi Si se numete funcia de
transfer a fazei i.
Pe baza relaiei (1) se deduc:
si = i ( si 1 , xi )
si = i (i 1 ( si 2 , xi 1 ), xi )
LLLLLLLLLL
si = i (i 1 (L (1 ( s0 , x1 ), x2 )L), xi )
MS - Cursul 14

Cap.13. Programare dinamic

(2)

10

Starea si (i = 1, 2,..., n) depinde de starea iniial


s0 i de valorile variabilelor de decizie x1, x2,..., xi.
Fiecrei faze i i se asociaz o funcie utilitate
(eficien) vi : Si -1 Xi R , cu vi = vi(si -1, xi).
Funcia obiectiv global f a procesului (secvenial) este funcie de utilitile vi :
f = f (v1 ( s0 , x1 ), v2 ( s1, x2 ),..., vn ( sn 1, xn ))
(3)
Putem scrie succesiv:

~
~
s1 = 1 ( s0 , x1 ) = 1 ( s0 , x1 ), x1 X 1 ( s0 ) = X 1 ( s0 )
s2 = 2 (1 ( s0 , x1 ), x2 ) = ~2 ( s0 , x1 , x2 ),
~
~
x X ( s ) = X ( ( s , x )) = X ( s , x )
2

(4)

LLLLLLLLLLLLLLLLLLLLL
MS - Cursul 14

Cap.13. Programare dinamic

11

LLLLLLLLLLLLLLLLLLLLL
sn = n (~n 1 ( s0 , x1,..., xn 1 ), xn ) = ~n ( s0 , x1 ,..., xn ),
~
~
x X ( s ) = X ( ( s , x ,..., x )) = X ( s , x ,..., x
n

n 1

n 1

n 1 )

precum i

v1 ( s0 , x1 ) = v~1 ( s0 , x1 )
v2 ( s1 , x2 ) = v2 (~1 ( s0 , x1 ), x2 ) = v~2 ( s0 , x1 , x2 )
(5)
LLLLLLLLLLLLLLLLLLLL
vn ( sn 1 , xn ) = vn (~n 1 ( s0 , x1 ,..., xn 1 ), xn ) = v~n ( s0 , x1 ,..., xn )

Prin nlocuirea relaiilor (5) n expresia funciei


obiectiv (3) obinem:
~
~
~
f = f (v1 ( s0 , x1 ),..., vn ( s0 , x1,..., xn )) = f ( s0 , x1,..., xn )

MS - Cursul 14

Cap.13. Programare dinamic

(6)
12

Deci, pentru o stare iniial fixat s0 i pentru o


politic dat {x1,..., xn} valoarea funciei obiectiv
global f este complet determinat.
Modelul matematic al unei probleme de optimizare secvenial are forma:
opt f = f (v1 ( s0 , x1 ), v2 ( s1 , x2 ),..., vn ( sn 1 , xn ))
x1 , x2 ,... xn
s = ( s , x ), i = 1, 2,..., n
i i 1 i
i
(7)
si Si , i = 0, 1,..., n

xi X i ( si 1 ), i = 1, 2,..., n
MS - Cursul 14

Cap.13. Programare dinamic

13

Definiie. Soluia (decizia) admisibil


x* ( s0 ) = ( x1* ( s0 ),..., x*n ( s0 ))
este optim pentru problema de optimizare secvenial (7), relativ la starea iniial s0, dac:
~
~
*
*
f ( s0 , x1 ( s0 ),..., xn ( s0 )) = opt { f ( s0 , x1 ,..., xn ) |
(8)
~
~
x1 X 1 ( s0 ), xi X i ( s0 , x1 ,..., xi 1 ), i = 2,..., n}

MS - Cursul 14

Cap.13. Programare dinamic

14

2. Funcii decompozabile

MS - Cursul 14

Cap.13. Programare dinamic

15

Definiie. Funcia f : R3 R este decompozabil


dac:
a) exist funciile , : R2 R astfel nct:
(9)
f ( x, y , z ) = ( x, ( y , z )) , (x, y, z)R3
b) funcia este monoton n raport cu al doilea
argument, adic:
cresctoare pentru probleme de maximizare:
(x, y1) (x, y2), xR, y1, y2R, y1 < y2 (10)
descresctoare pentru probleme de minimizare:
(x, y1) (x, y2), xR, y1, y2R, y1 < y2 (11)
MS - Cursul 14

Cap.13. Programare dinamic

16

n condiiile enunate n definiie, se mai spune


c funciile i realizeaz o descompunere a lui f.
Exemplu. Funciile f1 i f2 sunt decompozabile.
f1 : R3 R, f1(x, y, z) = x + y + z
f2 : R3 R, f2(x, y, z) = cos(x) + sin(y z)
Teorem (optimalitate). Fie funcia decompozabil
f : R3 R, cu descompunerea dat de funciile
, : R2 R. Atunci

max 3 f ( x, y, z ) = max x, max 2 ( y, z ) (12)


xR
( x , y , z )R
( y , z )R

MS - Cursul 14

Cap.13. Programare dinamic

17

Dem. Deoarece funcia f este decompozabil avem


relaia:
max ( x, ( y, z )) ( x, ( y, z )), (x, y, z)R3
( x , y , z )R 3

din care rezult:

max 3 ( x, ( y, z )) x, max 2 ( y, z ) , xR
( x , y , z )R
( y , z )R

n particular,
max 3 ( x, ( y, z )) max x, max 2 ( y, z ) (*)
xR
( x , y , z )R
( y , z )R

Deoarece funcia este cresctoare n raport cu al


doilea argument, avem:
MS - Cursul 14

Cap.13. Programare dinamic

18

x, max 2 ( y, z ) ( x, ( y, z )) , (x, y, z)R3


( y , z )R

n particular,

x, max ( y, z ) max ( x, ( y, z )), xR


( y , z )R
( y , z )R
din care deducem:
max x, max 2 ( y, z ) max max 2 ( x, ( y, z )) =
xR
( y , z )R
xR ( y , z )R

= max 3 ( x, ( y, z )) (**)
2

( x , y , z )R

Din relaiile (*) i (**) rezult egalitatea din


enunul teoremei.

MS - Cursul 14

Cap.13. Programare dinamic

19

Observaii:
1) Teorema este valabil i dac n enun operatorul
max este nlocuit cu operatorul min.
2) Teorema rmne adevrat i pentru funciile
definite pe N3 sau Z3.
3) Se pot deduce formulri analoage i pentru
funcii definite pe domenii mrginite incluse n R3.
Pentru funciile de mai mult de trei variabile
reale, conceptele i rezultatele prezentate n acest
paragraf sunt asemntoare.

MS - Cursul 14

Cap.13. Programare dinamic

20

3. Metoda programrii dinamice


regresiv

MS - Cursul 14

Cap.13. Programare dinamic

21

Definiie. Problema de optimizare secvenial (7) este


decompozabil regresiv dac exist funciile gi : R2
R (i = 2, 3,..., n), gi (a, ) monoton pentru a R,
astfel nct:
f n i +1 (vi ( si 1 , xi ),..., vn ( sn 1 , xn )) =
(13)
= g n i +1 (vi ( si 1 , xi ), f n i (vi +1 ( si , xi +1 ),..., vn ( sn 1 , xn )))

unde fn-i+1 (i = 1, 2,..., n 1) este funcia obiectiv


asociat procesului secvenial limitat la fazele i,..., n,
cu f1(vn) = vn i fn = f
sau echivalent, dac folosim funciile de transfer:
~
f n i +1 ( si 1, xi ,..., xn ) =
~
(14)
= g n i +1 (vi ( si 1, xi ), f n i (i ( si 1, xi ), xi +1,..., xn ))
MS - Cursul 14

Cap.13. Programare dinamic

22

pentru i = 1, 2,..., n -1, si -1 Si -1, xi Xi(si -1), xn


~
~ ~
Xn(sn -1), cu f1 = vn i f n = f = f .
Conform teoremei de optimalitate, formulat
pentru cazul n-dimensional, se deduc urmtoarele
ecuaii ale programrii dinamice regresive:
~
opt f n i +1 ( si 1, xi ,..., xn ) =

(15)

xi ,..., x n

~
= opt g n i +1 vi ( si 1 , xi ) , opt f n i (i ( si 1 , xi ), xi +1 ,..., xn )
xi
xi +1 ,..., x n

~
pentru i = 1,..., n 1 i opt f1 ( sn 1, xn ) = opt vn ( sn 1, xn ) .
xn

MS - Cursul 14

Cap.13. Programare dinamic

xn

23

Algoritmul programrii dinamice regresive:


Pasul 1. Se rezolv problema corespunztoare fazei n,
cu necunoscuta xn , n funcie de parametrul sn -1.
Se calculeaz:
~
opt { f1 ( sn 1, xn ) | xn X n ( sn 1 )} =
(16)
not

= opt {vn ( sn 1, xn ) | xn X n ( sn 1 )} = h1 ( sn 1 )

i se determin x*n ( sn 1 ) pentru care


h1 ( sn 1 ) = vn ( sn 1, x*n ( sn 1 ))
Pasul 2. Se rezolv, succesiv, problema corespunztoare fazei i, pentru i = n - 1, n - 2,...3, 2, cu singura
necunoscut xi, n funcie de parametrul si -1 Si - 1.
MS - Cursul 14

Cap.13. Programare dinamic

24

*
xi ( si 1 )

X i ( si 1 ) pentru care
Se determin
hn i +1 ( si 1 ) = g n i +1 (vi ( si 1, x*i ( si 1 )), hn i (i ( si 1 , x*i ( si 1 )))
(17)
Pasul 3. Se rezolv problema corespunztoare fazei 1,
cu necunoscuta x1, n funcie de parametrul s0.
Se determin x1* ( s0 ) X1 ( s0 ) i
~
~
hn ( s0 ) = opt f n ( s0 , x1 ,..., xn ) = f ( s0 , x1* ( s0 ),..., x*n ( s0 ))

unde

x1 ,..., x n
*
xi +1 ( s0 )

*
*
xi +1 (i ( s0 , xi ( s0 ))

, i = 1, 2,..., n - 1.

Pasul 4. Se determin optimul global


~
*
hn ( s0 ) = opt hn ( s0 ) = f ( s0 , x1* ( s*0 ),..., x*n ( s*0 ))

(18)

(19)

s 0 S 0

MS - Cursul 14

Cap.13. Programare dinamic

25

Soluia optim a problemei considerate este:


x* = ( x1* , x*2 ,..., x*n )

unde
*
*
* *
*
* *
x1 = x1 ( s0 ) , xi +1 = xi +1 (i ( s0 , xi )) , i = 1, 2,..., n - 1.

MS - Cursul 14

Cap.13. Programare dinamic

26

Exemplu. Clienii unei firme solicit un anumit tip


de produs, cererea fiind ealonat pe o perioad de
patru luni.
La nceputul perioadei considerate firma dispune
n depozitul su de 3 uniti de produs, capacitatea
depozitului fiind de maximum 12 uniti din acel
produs. Cererea de produs, precum i profitul unitar
ce revine firmei prin vnzarea produsului, difer de
la o lun la alta, valorile lor fiind nscrise n tabelul:

MS - Cursul 14

Cap.13. Programare dinamic

27

Firma fabric produsul pe care l depoziteaz,


livrarea ctre clieni avnd loc la sfritul fiecrei
luni calendaristice.
S se stabileasc planul de fabricaie al
produsului, optim din punct de vedere al profitului
obinut, astfel nct la sfritul perioadei celor patru
luni cererile clienilor s fie integral satisfcute, iar
firma s mai dein n depozit o unitate de produs.
Soluie. Vom utiliza pentru rezolvare metoda programrii dinamice regresiv.
Se noteaz cu xi (i = 1,..., 4) numrul de uniti
de produs vndute n decursul fiecrei luni.
MS - Cursul 14

Cap.13. Programare dinamic

28

Funcia obiectiv este profitul total al firmei, care


trebuie s fie maxim:
[max] f = 14x1 + 16x2 + 15x3 + 14x4
Pentru ca cererile clienilor s fie satisfcute
integral, este necesar ca firma s dein n depozit, la
sfritul fiecrei luni, o cantitate de produs cel puin
egal cu valoarea cererii n luna respectiv.
Pe de alt parte, cantitatea de produse aflat n
depozit, la sfritul fiecrei luni, nainte de livrare,
nu poate s depeasc capacitatea depozitului, care
este de 12 uniti.
MS - Cursul 14

Cap.13. Programare dinamic

29

Din cele dou condiii se deduc succesiv:


3 + x1 8 0 5 x 9
3 + x 12
1
1

x1 5 + x2 6 0 11 x + x 17
1
2
x 5 + x 12
2
1
x1 + x2 11 + x3 7 0
x + x 11 + x 12 18 x1 + x2 + x3 23 (*)
2
3
1

3 + x1 + x2 + x3 + x4 = 27 + 1
x1 + x2 + x3 + x4 = 25 (**)
Din (*) i (**) 2 x4 7
MS - Cursul 14

Cap.13. Programare dinamic

30

Modelul matematic al problemei este:


[max] f = 14 x1 + 16 x2 + 15x3 + 14 x4
5 x1 9

11 x1 + x2 17
0 x
3

2 x4 7
x1 + x2 + x3 + x4 = 25
Pentru a aplica metoda programrii dinamice
regresiv, problema trebuie adus la forma unui
proces secvenial de decizie.
Se noteaz cu si (i = 1,..., 4) stocul de produse la
sfritul lunii i, dup livrarea cererii ctre clieni.
MS - Cursul 14

Cap.13. Programare dinamic

31

Stocul iniial este s0 S0 = {3}.


Avem:
s1 = s0 + x1 - 8 = x1 - 5; dar 5 x1 9
s1 S1 = [0, 4]
s2 = s1 + x2 - 6 = x1 + x2 - 11; dar 11 x1 + x2 17
s2 S2 = [0, 6]
s3 = s2 + x3 - 7 = x1 + x2 + x3 - 18 = 7 - x4 ; dar
2 x4 7 s3 S3 = [0, 5]
Evident, s4 S4 = {1}.
Se determin spaiile de decizie ale celor patru
variabile x1,..., x4:
x1 X1(s0) = [5, 9]
MS - Cursul 14

Cap.13. Programare dinamic

32

0 s2 6 0 s1 + x2 - 6 6
6 - s1 x2 12 - s1
x2 X2(s1) = [6 - s1, 12 - s1]
0 s3 5 0 s2 + x3 - 7 5
7 - s2 x3 12 - s2
x3 X3(s2) = [7 - s2, 12 - s2]
s3 + x4 - 6 = 1 x4 X4(s3) = {7 - s3}.
Funciile de transfer sunt:
1(s0, x1) = s0 + x1 - 8
2(s1, x2) = s1 + x2 - 6
3(s2, x3) = s2 + x3 - 7
4(s3, x4) = 1
MS - Cursul 14

Cap.13. Programare dinamic

33

Funciile de utilitate sunt:


v1(s0, x1) = 14x1
v2(s1, x2) = 16x2
v3(s2, x3) = 15x3
v4(s3, x4) = 14x4
Funciile obiectiv ale proceselor secveniale
limitate
~ (trunchiate):
f1 = 14x + 16x + 15x + 14x
1
2
3
4
~
f 2 = 16x + 15x + 14x
2
3
4
~
f 3 = 15x + 14x
3
4
~
f 4 = 14x
4
MS - Cursul 14

Cap.13. Programare dinamic

34

Problema adus la forma unui proces secvenial,


*
cu starea iniial cunoscut s0 = s0 = 3, este decompozabil regresiv n raport cu funcia g(a, b) = a + b.
Se rezolv problemele de optim corespunztoare
fiecrei faze, folosind ecuaiile programrii dinamice
regresive.
~
Faza 4. max { f 4 | x4 X4(s3)} = max {14x4 | x4 {7 - s3}} = 14(7 - s3) = 98 - 14s3, pentru x*4 ( s3 ) = 7 - s3.
~
Faza 3. max {f 3 | x3 X3(s2)} = max {15x3 + 98 - 14s3
| x3 X3(s2)} = max {15x3 + 98 - 14(s2 + x3 - 7) | x3
X3(s2)} = max {x3 - 14 s2 + 196) | x3 [7 - s2,
*
x
12 - s2]} = 208 - 15s2, pentru 3 ( s2 ) = 12 - s2.
MS - Cursul 14

Cap.13. Programare dinamic

35

Faza 2. max { ~f2 | x2 X2(s1)} = max {16x2 + 208 -15s2 | x2 X2(s1)} = max {16x2 + 208 - 15(s1 + x2 - 6)
| x2 X2(s1)} = max {x2 - 15 s1 + 298) | x2 [6 - s1, 12
- s1]} = 310 - 16s1, pentru x*2 ( s1 ) = 12 - s1.
~
Faza 1. max { f1 | x1 X1(s0)} = max {14x1 + 310 -16s1 | x1 X1(s0)} = max {14x1 + 310 - 16(s0 + x1 - 8)
| x1 X1(s0)} = max {-2x1 - 16 s0 + 438) | x1 [5, 9]}
= 380, pentru x1* ( s*0 ) = 5, unde s *0 = s0 = 3.
Avem:
s1* = s*0 + x1* 8 = 3 + 5 - 8 = 0
x*2 = x*2 ( s1* ) = 12 s1* = 12
MS - Cursul 14

Cap.13. Programare dinamic

36

s*2 = s1* + x*2 6 = 0 + 12 - 6 = 6

x*3 = x*3 ( s*2 ) = 12 s*2 = 6


s*3 = s*2 + x*3 7 = 6 + 6 - 7 = 5
*
* *
*
x
=
x
(
s
)
=
7

s
4
4 3
3 = 2

Soluia optim x* = ( x1* , x*2 , x*3 , x*4 ) = (5, 12, 6, 2)


este unic.
Valoarea optim a funciei obiectiv (profitul total
*
f
maxim) corespunztoare este = 380 u.m.

MS - Cursul 14

Cap.13. Programare dinamic

37

4. Metoda programrii dinamice


progresiv

MS - Cursul 14

Cap.13. Programare dinamic

38

n o serie de situaii practice, starea final a unui


proces secvenial sn este impus, adic sn = s*n .
n aceste cazuri este mai eficient de a inversa
sensul de parcurgere fa de cel considerat n metoda
regresiv.
Pentru fiecare faz se definete funcia reciproc
de transfer i : Si Xi Si -1 prin relaia:
si 1 = i ( si , xi ) , xi X i ( si ) , i = 1, 2,..., n.
(20)
unde X i ( si ) reprezint mulimea tuturor deciziilor
admisibile din faza i.
Funcia utilitate (eficien) a fazei i este
vi : Si Xi R
MS - Cursul 14

Cap.13. Programare dinamic

39

vi ( si , xi ) = vi ( i ( si , xi ), xi ) , i = 1, 2,..., n

(21)

Funcia obiectiv global f devine


~
f = f (v1 ( s1, x1 ),..., vn ( sn , xn )) = f ( sn , x1,..., xn )

(22)

Definiie. Problema de optimizare secvenial (7) este


decompozabil progresiv, dac exist funciile gi : R2
R (i = 2, 3,..., n), gi (a, ) monoton pentru aR,
astfel nct:
f1 (v1 ( s1, x1 ),..., vi ( si , xi )) =
(23)
= gi (vi ( si , xi ), fi 1 (v1 ( s1 , x1 ),..., vi 1 ( si 1 , xi 1 )))
unde fi (i = 1, 2,..., n1) este funcia obiectiv asociat
procesului secvenial limitat la fazele 1, 2,..., n, cu
MS - Cursul 14

Cap.13. Programare dinamic

40

f1 ( v1 ) = v1 i f n = f

sau echivalent cu funciile reciproce de transfer:


~
fi ( si , x1,..., xi ) =
~
= gi (vi ( si , xi ), fi 1 ( i ( si , xi ), x1 ,..., xi 1 ))

(24)

pentru i = 2, 3,..., n, si Si , x1 X1 ( s1 ) , xi X i ( si ) ,
~
~ ~
cu f1 = v1 i f n = f = f .
Conform teoremei de optimalitate, formulat
pentru cazul n-dimensional, se pot deduce urmtoarele
ecuaii ale programrii dinamice progresive:
~
opt f i ( si , x1 ,..., xi ) =
x1 ,..., xi

MS - Cursul 14

Cap.13. Programare dinamic

41

= opt gi vi ( si , xi ) , opt fi 1 ( i ( si , xi ), x1 ,..., xi 1 )


xi
x1 ,..., xi 1

(25)
~
pentru i = 2, 3,..., n, cu opt f1 ( s1 , x1 ) = opt v1 ( s1, x1 ) .
x1

x1

Algoritmul programrii dinamice progresive:


Pasul 1. Se rezolv problema corespunztoare fazei 1,
cu necunoscuta x1, n funcie de parametrul s1S1.
Se calculeaz:
~
opt { f1 ( s1 , x1 ) | x1 X 1 ( s1 )} =
(26)
= opt {v1 ( s1 , x1 ) | x1 X 1 ( s1 )} = h1 ( s1 )

Se determin x1* ( s1 ) pentru care h1 ( s1 ) = v1 ( s1 , x1* ( s1 )) .


MS - Cursul 14

Cap.13. Programare dinamic

42

Pasul 2. Se rezolv, succesiv, problema corespunztoare fazei i, pentru i = 2, 3,..., n - 1, cu necunoscuta


xi, n funcie de parametrul si -1 Si - 1.
*
x
Se determin i ( si ) X i ( si ) pentru care
hi ( si ) = gi (vi ( si , x*i ( si )), hi 1 ( i ( si , x*i ( si )))

(27)

Pasul 3. Se rezolv problema corespunztoare fazei


n, cu singura necunoscut xn .
Se determin x*n ( sn ) X n ( sn ) , cu sn = s*n i
~ *
~ * * *
*
hn ( sn ) = opt f n ( sn , x1 ,..., xn ) = f ( sn , x1 ( sn ),..., x*n ( s*n ))
x ,..., x
(28)
unde x*i ( s*i ) = x*i = x*i ( i +1 ( s*i+1, x*i+1 )), i = n -1, n -2,..., 1.
1

MS - Cursul 14

Cap.13. Programare dinamic

43

Valoarea optim a funciei obiectiv f este hn ( s*n ) .


Soluia optim a problemei este x* = ( x1* , x*2 ,..., x*n ) ,
unde x*n = x*n ( s*n ) , x*i = x*i ( i +1 ( s*i+1, x*i+1 )) , i = n -1,...,1.
Observaii:
1) Dac ntr-un proces secvenial cu n faze, starea s0
(sau starea sn) este cunoscut, se efectueaz parcurgerea de la starea necunoscut spre starea cunoscut.
2) Dac strile s0 i sn sunt cunoscute (impuse) i
dac se pot defini funciile de transfer n ambele
sensuri, atunci poate fi ales oricare din cele dou
sensuri de parcurs.
MS - Cursul 14

Cap.13. Programare dinamic

44

Exemplu. S se rezolve problema din exemplul


anterior cu metoda programrii dinamice progresiv.
Soluie. Notaiile i pstreaz semnificaiile.
Starea final a procesului este cunoscut s4 = s*4 = 1.
Funciile reciproce de transfer sunt:
1 ( s1 , x1 ) = s1 - x1 + 8
2 ( s2 , x2 ) = s2 - x2 + 6
3 ( s3 , x3 ) = s3 - x3 + 7
4 ( s4 , x4 ) = s4 - x4 + 6

Funciile de utilitate sunt:


v1 ( s1 , x1 ) = 14x1 v2 ( s2 , x2 ) = 16x2
v4 ( s4 , x4 ) = 14x4
v3 ( s3 , x3 ) = 15x3
MS - Cursul 14

Cap.13. Programare dinamic

45

Funciile obiectiv ale proceselor secveniale


limitate
~ sunt:
f1 = 14x1
~
f 2 = 14x1 + 16x2
~
f 3 = 14x1 + 16x2 + 15x3
~
f 4 = 14x1 + 16x2 + 15x3 + 14x4
Se determin spaiile de decizie ale variabilelor
cu ajutorul funciilor reciproce de transfer:
s0 = 3 s1 - x1 + 8 = 3 x1 = s1 + 5
x1 X 1 ( s1 ) = {s1 + 5}.
0 s2 - x2 + 6 4 s2 + 2 x2 s2 + 6
x2 X 2 ( s2 ) = [s2 + 2, s2 + 6]
MS - Cursul 14

Cap.13. Programare dinamic

46

0 s3 - x3 + 7 6 s3 + 1 x3 s3 + 7
x3 X 3 ( s3 ) = [s3 + 1, s3 + 7]
0 s4 - x4 + 6 5 s4 + 1 x4 s4 + 6
x4 X 4 ( s4 ) = [s4 + 1, s4 + 6]
Problema este decompozabil progresiv n raport
cu funcia g ( a , b) = a + b.
Se rezolv problemele de optim corespunztoare
fazelor, cu ecuaiile programrii dinamice progresive.
~
Faza 1. max { f1 | x1 X 1 ( s1 )} = max {14x1 | x1 {s1 +
+ 5}} = 14 s1 + 70, pentru x1* ( s1 ) = s1 + 5.
~
Faza 2. max { f 2 | x2 X 2 ( s2 ) } = max {16x2 + 14s1 +
MS - Cursul 14

Cap.13. Programare dinamic

47

+ 70 | x2 X 2 ( s2 ) } = max {16x2 + 14(s2 - x2 + 6) +70 |


x2 X 2 ( s2 )} = max {2x2 + 14s2 + 154 | x2 [s2 + 2,
s2 + 6]} = 16s2 + 166, pentru x*2 ( s2 ) = s2 + 6.
~
Faza 3. max { f 3 | x3 X 3 ( s3 ) } = max {15x3 + 16s2 +
+ 166 | x3 X 3 ( s3 ) } = max {15x3 + 16(s3 - x3 + 7) +
+ 166 | x3 X 3 ( s3 )} = max {-x3 +16s3 +278 | x3 [s3 +
+ 1, s3 + 7]} = 15s3 + 277, pentru x*3 ( s3 ) = s3 + 1.
~
Faza 4. max { f 4 | x4 X 4 ( s4 )} = max {14x4 + 15s3 +
+ 277 | x4 X 4 ( s4 ) } = max {14x4 + 15(s4 - x4 + 6) +
+ 277 | x4 X 4 ( s4 ) } = max {-x4 + 15s4 + 367 | x4
[s4 + 1, s4 + 6]} = 14s4 + 366, pentru x*4 ( s4 )= s4 + 1
MS - Cursul 14

Cap.13. Programare dinamic

48

*
Cum s4 = s4 = 1
* *
*
x
pentru x4 = 4 ( s4 )

~
max { f 4 | x4 X 4 ( s4 )} = 380,
= 2.

Avem:
s*3 = s*4 x*4 + 6 = 1- 2 +6 = 5 x*3 = x*3 ( s*3 ) = s*3 + 1 = 6
*
*
*
s2 = s3 x3 + 7 = 5- 6 +7 = 6 x*2 = x*2 ( s*2 ) = s*2 + 6 = 12
s1* = s*2 x*2 + 6 = 6 -12 +6 = 0 x1* = x1* ( s1* ) = s1* + 5 = 5
s*0 = s1* x1* + 8 = 0 -5 +8 = 3
Soluia optim este identic cu cea obinut prin
metoda programrii dinamice regresiv i anume:
x* = ( x1* , x*2 , x*3 , x*4 ) = (5, 12, 6, 2)
Valoarea optim a funciei obiectiv f *= 380 u.m.
MS - Cursul 14

Cap.13. Programare dinamic

49