Documente Academic
Documente Profesional
Documente Cultură
max, (1)
1 1 2 2
... , 1,..., ,
, {1,..., },
i i in n
j
a x a x a x b i m
x N j M n
+ + +
'
(2)
unde N este mulimea numerelor naturale. De regul se presupune, c att
coeficienii problemei (l)-(2), ct i termenii liberi snt numere ntregi.
Dac M = {1,2,...,n }, atunci avem cazul problemei de programare liniar total
n numere ntregi, pe scurt PLT.
Dac M {l,2,...,n}, atunci avem cazul problemei de programare liniar
mixt, abreviat PLM.
Viaa cotidian ne ofer un numr enorm de probleme, care, ori pot fi
formulate ca probleme de tipul (l)-(2), ori pot fi reduse la (l)-(2) printr-o
consecutivitate de transformri elementare. E de ajuns s cerem n problema de
repartizare eficient a resurselor limitate ca necunoscutele s fie numere ntregi (la
producia garniturilor de mobil, de exemplu, necunoscutele nu pot fi fracionare
deoarece e absurd s se produc o jumtate de mas, o treime de scaun etc.) i
4
obinem o problem de programare liniar n numere ntregi. Dac n problema de
transport se examineaz ca marf de livrat de la productori la beneficiari ori
aparate TV, ori automobile, ori calculatoare etc., atunci obinem alte exemple de
probleme de tipul (l)-(2). Chiar i n problema dietei unele dintre necunoscute,
corespunztoare produselor alimentare vndute n recipiente indivizibile, trebuie s fie
ntregi. n sfrit, un numr mare de probleme de tipul (l)-(2) apar n
optimizarea combinatorie, teoria grafelor, logica matematic i n general, n
cercetarea operaional.
Un caz particular al problemei de programare liniar n numere ntregi este
problema rucsacului.
Din n obiecte cu greutile
a
1
, a
2
,..., a
n
i costurile c
1
, c
2
,..., c
n
trebuie selectate
ntr-un rucsac acele din ele, care au n sum o greutate nu mai mare dect b i un cost
total maxim posibil.
Dac obiectele nu pot fi tiate, atunci avem problema discret sau problema 0/1
a rucsacului, n care variabilele pot lua doar valorile 0 i 1. Dac pentru orice obiect
putem s lum doar o parte din el X
J
'
'
+ + +
(3)
Variabilele x
j
care pot avea numai valorile 0 i 1 mai sunt numite i
booleene, iar problema de mai sus - problem de programare booleana sau
problema de programare 0/1. Evident c o problem de programare 0/1 poate avea
mai multe restricii, ceea ce ar corespunde n problema rucsacului restriciilor de
volum, de completare etc.
Dac raportm costurile obiectelor la greutile lor, obinem costurile pe unitate
5
de greutate. La rezolvarea problemei continue, o ordonare a obiectelor n funcie de
creterea acestor raporturi ne d posibilitatea s obinem soluia optim, ncrcnd
obiectele, pe ct e posibil n ntregime i anume n aceast ordine, pn cnd rucsacul se
umple. Componentele x
j
vor lua pe rnd valorile x
j
=1, pn cnd greutatea rmas
disponibil, notat b
d
, nu mai permite s se pun un obiect ntreg. Ultimul obiect se
taie i se ia din el numai o parte x
j
=b
d
/a
j
.
Problema discret cu prere de ru e mult mai complicat i pentru n suficient
de mare nu mai poate fi rezolvat efectiv. Mai mult, din cele de mai sus reiese c
problema rucsacului n numere ntregi nu poate fi rezolvat, n general, prin
aproximarea soluiei optime a problemei continue corespunztoare pn la cea mai
apropiat soluie optim ntreag, de aceea ultima poate s ncalce ori restriciile
problemei de programare n numere ntregi, ori condiia de optimalitate. Ca rezultat
survine concluzia, c problemele de programare liniar n numere ntregi cer, n
general, alte metode de rezolvare, special adaptate la specificul lor, ceea ce nu exclude
posibilitatea, c la rezolvarea unor probleme particulare s se utilizeze metode ale
programrii liniare sau neliniare.
O alt form de scriere a problemei rucsacului este problema rucsacului n
numere ntregi:
c
1
x
1
+c
2
x
2
+...+c
n
x
n
max,
'
+ + +
. ,..., 1 ,
, ...
2 2 1 1
n j N x
b x a x a x a
j
n n
(4)
Un caz particular al problemei rucsacului este atunci cnd restricia ia
forma inegalitii:
1 1 2 2
... ,
n n
a x a x a x b + + +
(5)
obinnd n acest mod, problema rucsacului cu inegaliti.
6
Afirmaie. Toate trei formulri ale problemei rucsacului, i anume problema 0/1 a
rucsacului, problema rucsacului n numere ntregi, problema rucsacului cu
inegaliti, sunt echivalente.
Uor se demonstreaz, c problema rucsacului cu inegaliti, se reduce la
problema rucsacului n numere ntregi, adic sunt echivalente. Dac n restricia din
problema (4) adugm variabila 1 n
x N
+
, atunci echivalena acestor dou probleme
este evident.
E mai complicat de demonstrat c problema rucsacului cu inegaliti este
echivalent i cu problema 0/1 a rucsacului. Pentru a demonstra c ele sunt totui
echivalente, adugm n inegalitatea (5) expresia y (y- numr ntreg ), unde
0 1
1 2
2 2 ... 2 ,
k
n n n k
y x x x
+ + +
+ + +
2
log k b
1
1
]
, iar { }
.
1 2
, ,..., 0,1
n n n k
x x x
+ + +
nlocuind y n problema (3) obinem:
{ }
0
1 1 1
... 2 ... 2 ,
0,1 , 1, ,
k
n n
n n k
j
a x a x x x b
x j n k
'
+ +
+ + + + +
+
demonstrnd astfel echivalena acestor dou probleme.
1.2. COMPLEXITATEA PROBLEMEI
Ne intereseaz clasificarea problemelor de recunoatere a proprietilor dup
complexitatea lor. Vom nota prin P clasa problemelor de recunoatere, care pot fi
rezolvate cu ajutorul unui algoritm polinomial. Clasa P poate fi determinat exact cu
ajutorul oricrui algoritm formal de determinare, cum ar fi maina Turing. Dar, se
vede, c toate modelele de calcul posed proprietatea, c dac problema poate fi
soluionat ntr-un timp polinomial cu ajutorul unui model, atunci ea poate fi
rezolvat ntr-un timp polinomial cu orice alt model. Astfel, clasa P este stabil n
raport cu diverse schimbri n cadrul supoziiilor iniiale. De aceea, vom determina
clasa P neformal ca o clas a problemelor de recunoatere, pentru care sunt
7
cunoscui algoritmi polinomiali de soluionare. Cu alte cuvinte, P este clasa
problemelor simple de recunoatere, pentru care exist algoritmi eficieni.
Introducem clasa NP [6], o clas mai extins de probleme de recunoatere. Ca
o problem s aparin clasei NP, nu cerem ca rspunsul fiecrei probleme individuale
s fie primit ntr-o perioad polinomial de timp cu ajutorul unui oarecare algoritm.
Cerem, pur i simplu, ca n cazul, cnd pentru problema individual x obinem
rspunsul da, s existe o recunoatere scurt pentru x, adevrul creia poate fi
verificat polinomial.
Definiie. Vom spune, c problema de recunoatere x intr n clasa NP, dac
exist polinomul p(n) i algoritmul A (algoritmul de recunoatere), astfel nct se
ndeplinete urmtoarea condiie: irul de caractere x este problema individual a
problemei A cu rspunsul da numai n cazul cnd exist irul c(x) i |c(x)| < p(|x|), i
algoritmul A, primind la intrare xSc(x), ajunge la rspunsul da dup nu mai mult de
p(|x|) pai.
Trebuie de menionat, c pentru a determina apartenena unei probleme la clasa
de probleme NP, nu trebuie de explicat cum mai efectiv de recunoscut irul c(x) la
intrarea lui x. Este necesar, pur i simplu, de artat existena cel puin a unui singur ir
de caractere pentru fiecare x.. Menionm, c clasa P este submulime a clasei NP. Cu
alte cuvinte, pentru orice problem ce se rezolv efectiv putem construi
recunoateri scurte. Pentru a nelege aceasta, presupunem, c pentru problema A
exist algoritmul polinomial A
A
. Dac x este o problem individual a problemei A
cu rspunsul da, atunci algoritmul A
A
, folosit pentru x, peste un numr polinomial de
pai ofer rspunsul da. nscrierea rezultatului funcionrii algoritmului A
A
pentru
intrarea x este o confirmare convenabil c(x).ntr-adevr, pentru a controla c(x), este
de ajuns s verificm corectitudinea ndeplinirii algoritmului A
A
..
Dar, de ce NP - clasa problemelor de recunoatere ne intereseaz?
Teorem. Problema 0/1 a rucsacului este NP-complex.
8
Demonstraie. Evident, aceast problem intr n NP; n afar de aceasta
putem arta, c problema acoperirea exact 3-M se exprim polinomial n
problema 0/1 a rucsacului. Din familia F={Si,...S
n
}, format din n 3-M, vom
construi aa numere ntregi c
1
,c
2
,...,c
n
i K, iar din c
1
,c
2
,...,c
n
putem forma o submulime
cu suma K, atunci i numai atunci, cnd n F exist familia ce formeaz acoperirea
optim a mulimii S={u
1
, u
2
,..., u
3m
}.
Ne putem imagina toate mulimile din F ca vectori binari de lungime 3m, de
exemplu: {u
1
, u
5
, u
6
} i {u
2
, u
4
, u
6
} iau forma 100011 i 010101. Vom interpreta
aceti vectori binari ca numere ntregi, scrise n baza (n +1). Cu alte cuvinte, mulimii
S, i corespunde numrul ntreg
+
Sj ui
i
j
n c
1
) 1 (
. n afar de aceasta fie K-numr
ntreg, ce-i corespunde
+
1 / 3
0
) 1 (
m
j
n K
Afirmm, c n F exist subfamilii, ce acoper exact {u
1
,u
2
,...,u
3m
} numai n cazul,
dac printre c
j
exist submulimi cu suma K.
Demonstrm suficiena. Presupunem c exist mulimea
{ } n S ,..., 2 , 1
, c
S j
j
K c
, calculnd aceast sum n sistemul de numeraie cu baza n+1 observm,
c n termenii sumei se ntlnesc numai numerele 0 i 1 i n afar de aceasta
numrul termenilor este mai mic dect baza n+1. Drept urmare, la aa nmulire nu snt
transferuri. De aceea dac
S j
j
K c
aceasta nseamn, c n fiecare din 3m
poziii exist exact o unitate sau, cu alte cuvinte, subfamilia
C={Sj , j
S } exact acoper {u
1
, u
2
,..., u
3m
}.
Demonstrm necesitatea. Dac C este acoperire exact a mulimii {u
1
, u
2
,...,
u
3m
}, atunci rezult c
S j
j
K c
. Putem demonstra de asemenea c problema 0/1 a
rucsacului este NP-complex chiar i atunci, cnd K se alege egal cu
n
j
j
c
1
2 /
.
9
CAPITOLUL II
METODE DE REZOLVARE A PROBLEMELOR DE PROGRAMARE
LINIAR N NUMERE NTREGI
2.1. METODA GOMORY
Se consider problema:
max, x c
T
( 1)
'
,
,
n
N x
b Ax
(2)
unde rang(A) = m.
dintre ele avnd O metod incipient de soluionare a acestei probleme
pornete cu soluionarea problemei relaxate [3], care nu ine cont de integritatea
variabilelor.
1. Dac soluia optim x* a problemei relaxate are toate componentele ntregi,
atunci (l)-(2) este rezolvat.
2. Dac problema relaxat nu are soluii admisibile, atunci i (l)-(2) nu are soluii
admisibile.
3. Dac soluia optim z* are cel puin o component nentreag, atunci se
alctuiete o restricie liniar suplimentar, verificat de orice soluie ntreag a
problemei (1)-(2) i neverificat de soluia optim nentreag x* a problemei relaxate.
Ea se altur sistemului de restricii al problemei. Se rezolv problema extins i se
verific iari condiiile l-3.
Lesne se nelege c pasul 3 va genera iterativ o consecutivitate de probleme,
fiecare, n comparaie cu problema precedent, cu o restricie mai
10
mult. Dac procedeul de alctuire a restriciei adiionale este pus la punct, dup un numr
finit de iteraii ori se determin soluia problemei (l)-(2), ori se determin c (l)-(2) nu
are soluie. Dac procedeul de alctuire a restriciei adiionale e inadecvat, paii l-3 se
pot repeta la nesfirit, generndu-se probleme cu un numr de restricii orict de mare.
Ideea unei asemenea metode i aparine lui Dantzig. Meritul de a indica o
procedur riguroas i bine pus la punct de formare a restriciilor adiionale i aparine
lui Gomory.
Algoritmul lui Gomory de soluionare a problemei de programare liniar n
numere ntregi
La expunerea algoritmului vom avea nevoie de urmtoarele notaii:
[x] partea ntreag a lui x
R.
Sunt evidente proprietile:
[x] x , 0<{x}< 1.
Exemple :
[0,1]=0; {0,1} = 0,1.
[1,1]=1; {1,1} = 0,1.
[-0,2]= -1; {0,2} = 0,8.
Oricrei soluii admisibile de baz optime x' a problemei relaxate (l)-(2) i
corespunde un sistem (echivalent sistemului (2)):
, 1,
j jk k kj
j J
x x k m
(3)
(J este- mulimea indicilor componentelor nebazice), la care s-a ajuns printr-o
consecutivitate de pivotri ale algoritmului simplex. Sistemul (3), n notaiile de mai
sus, se scrie sub forma:
{ }
, 1,
j j jk k kj k kj
j J j J
x x x k m
1
1
' ;
1
1
]
]
+
(4)
11
Teorema 1. Dac soluia optim admisibil, de baz x' a problemei relaxate
(1)-(2) are componenta x
j k
=
k
nentreag ({
k
}>0), atunci:
I. orice soluie ntreag a sistemului (2) satisface inecuaia:
{ } { }
k j
J j
kj
x
(5)
II. soluia optim admisibil de baza (nentreag) x
1
a problemei relaxate ( l ) -
(2) nu satisface inecuaia (5).
Demonstraie . I. Fie x* o careva soluie ntreag a sistemului (2). Rezult c
x* este soluie i a sistemului (3), i a sistemului (4). Din (4) rezult c:
{ } { }
*
j
J j
kj k
x
este de asemenea ntreag, existnd dou posibiliti:
{ } { }
>
J j
j kj k
x 0
*
echivalent cu
{ } { } 1
*
J j
j kj k
x
(6) i
{ } { }
J j
j kj k
x 0
*
(7)
S artm c (6) nu este verificat de nici o soluie admisibil a problemei (1)-(2).
ntr-adevr, (6) este echivalent cu
{ } { }
<
J j
k j kj
x 0 1
*
,
care contrazice nenegativitii componentelor ,{
kj
},
*
j
x
, j
J. Ca rezultat, deoarece
(6) i (7) definesc dou semispaii reciproc complementare fa de R
n
, rezult c orice
soluie ntreag a sistemului (3), nesatisfacnd (6), va satisface (7) (echivalent cu (5)).
II. Soluia x', fiind soluie admisibil de baz a sistemului (3), are nule toate
componentele nebazice
J j x
j
,
.nlocuind aceste valori n (5), obinem 0 >{
k
}, ce
contrazice supoziiei teoremei:
{ } 0 >
k
.
Corolarul 1. Dac soluia optim x' a problemei relaxate nu este ntreag (
{ } 0 >
k
12
) i toate componentele
n j
kj
, 1 ,
, ale tabelului simplex sunt ntregi, atunci (5)
definete o inegalitate contradictorie, ceea ce nseamn c (l)-(2) nu are soluii ntregi.
Teorema 1 i corolarul 1 ne permit s concretizm ideea lui Dantzig, expus n
preambulul acestui subcapitol, prin urmtorul algoritm:
0. Se rezolv problema relaxat (l)-(2) i se determin soluia optim x*.
1. Dac x* are toate componentele ntregi, atunci (l)-(2) este rezolvat.
2. Dac problema relaxat nu are soluii admisibile, atunci i (l)-(2) nu are soluii
admisibile.
3. Se formeaz restricia adiional (5).
Dac (5) este contradictorie (vezi corolarul (1)), atunci (l)-(2) nu are soluii
ntregi.
Dac (5) nu este contradictorie, atunci problema curent se extinde cu restricia (5).
Se determin soluia optim x
*
a problemei extinse relaxate i se trece la pasul 1
o
.
Remarca 1. Restricia adiional (5) taie efectiv mulimea de soluii admisibile X
a problemei relaxate (1)-(2), nlturnd o parte a ei. Restricia adiional (5) se scrie sub
forma de ecuaie introducnd variabile ecart x
n+1
>0, care se scade din membrul stng.
Adugarea la sistemul (2) a acestei restricii conduce la problema extins relaxat:
max, 0
1
+
+ n
T
x x c
(8)
{ } { }
'
+
1 , 1 , 0
1
n j x
x x
b Ax
j
J j
k n j jk
(9)
Dac (8)-(9) are soluie ntreag, algoritmul ia sfrit. n cazul n care problema
are soluie ntreag, algoritmul continu cu formarea altei restricii adiionale i
extinderea cu ea a problemei curente.
Remarca 2. Problema (8)-(9) poate fi soluionat sau prin algoritmul simplex
13
primal, sau prin algoritmul simplex dual.
Algoritmul simplex primal se realizeaz ori prin metoda celor dou faze, ori prin
metoda coeficienilor de penalizare. n ultimul caz (8)-(9), n urma introducerii variabilei
artificiale x
n+2
0 se aduce la forma:
max, 0
2 1
+
+ + n n
T
Mx x x c
{ } { }
'
+ +
2 , 1 , 0
2 1
n j x
x x x
b Ax
j
J j
k n n j jk
unde M este coeficientul de penalizare.
Algoritmul simplex dual, la etapa de iniiere, cere nmulirea ultimei ecuaii
cu -1. Ca rezultat, termenul liber devine negativ, iar variabila x
n+1
se trasform n
variabil de baz.
Corolarul 2. Att restricia adiional, ct i coloana variabilei ecart, ce-i
corespunde n tabelul simplex, pot fi suprimate concomitent, ndat ce
variabila ecart respectiv intr n baz, obinnd valoarea pozitiv.
Demonstraie . Restricia adiional (5) este introdus cu scopul de a tia
efectiv o parte din mulimea de soluii admisibile. Att timp ct ea este activ e
satisfcut ca egalitate (din (9) reiese de asemenea c
{ } { }
+
J j
k j jk n
x x 0
1
(5)
are rost).
ndat ce restricia adiional (5) este satisfcut ca inegalitate strict
( { } { } )
+
J j
k j jk n
x x 0
1
(5) devine inutil i poate fi suprimat att ea, ct i
variabila ecart x
n+1
.
La lansarea algoritmului simplex, x
n+1
are sau valoare nul (n cazul
algoritmului primal), sau valoare negativ (n cazul algoritmului dual), ceea ce
nseamn c nu este satisfcut restricia adiional. Dac variabila ecart x
n+1
, nu este
bazic, atunci ecuaia x
n+1
=0 corespunde unuia dintre cele n hiperplane ce definesc
14
soluia admisibil de baz respectiv. Dac variabila x
n+1
ia valoare pozitiv,
atunci ea devine nesemnificativ pentru variabilele problemei iniiale (1)- (2) i att
ea, ct i restricia adiional pot fi suprimate.
Deoarece n conformitate cu corolarul 2 toate variabilele suplimentare,
ndat ce intr n baz, sunt suprimate mpreun cu restricia corespunztoare,
problemele extinse nu au mai mult dect n restricii i respectiv n-m variabile
suplimentare.
Remarca 3. Orice problem extins conine nu mai mult dect 2n-m
variabile i nu mai mult dect n restricii, n cazul n care algoritmul lui Gomory
se completeaz cu un procedeu de suprimare a variabilelor ecart bazice i a
restriciilor adiionale corespunztoare.
2.2. METODA BRANCH and BOUND
Metodele de tip Branch and Bound sunt suficient de flexibile pentru a conduce la
rezolvarea problemelor practice din diverse domenii.
Metoda Branch and Bound se bazeaz pe ideea enumerrii raionale a tuturor
punctelor posibile n problema de optimizare combinatorie. Pentru a face o descriere
mai exact a metodei putem spune, c s-a fcut o ncercare de a construi o
demonstraie a optimalitii unei soluii pe baza descompunerii consecutive a
spaiului soluiilor. Vom desfura aceast metod pentru problema de programare
liniar n numere ntregi.
Vom analiza urmtoarea problem de programare liniar n numere ntregi
z =c'x= c(x),
Problema 0. Ax
b, (1)
x
0 ntreg.
Dac rezolvm problema liniar, care este problema relaxat a problemei
date, primim soluia x, care nu va lua valori ntregi. ns costul c(x) al acestei
soluii este limita de jos a costului optim c( x
*
) (unde x
*
este soluia optim a
15
problemei 0), i dac x
0
ar lua valoare ntreag, atunci problema ar fi rezolvat. n
algoritmul seciunii am putea aduga acum restricia n problema relaxat, ceea ce
nu exclude soluiile problemei (1). Dar n loc de aceasta acum vom descompune
problema n dou subprobleme, adugnd dou relaii ce se contrazic reciproc i
epuizeaz toate variantele posibile. Fie, de exemplu, componenta x
o
1
n x nu ia
valori ntregi. Atunci cele dou probleme corespunztoare au forma:
min z = c'x = c(x),
Ax
b,
Problema 1. x
0 ntreg , (2)
x ]
0
i i
x
min z = c'x = C(X),
Ax b,
Problema 2. x 0 ntreg , (3)
x i ]
1
0
+
i
x
Soluia problemei iniiale trebuie s fie n unul din domeniile admisibile ale celor
dou probleme, deoarece una din inegalitile de mai jos trebuie s fie adevrat:
x ]
0 *
i i
x
x ]
1
0 *
+
i i
x
Alegem una din cele dou subprobleme, de exemplu problema 1, i s-o
rezolvm ca pe o problem liniar. Soluia ei x
1
, nu va fi un numr ntreg, i problema
1 o putem descompune n dou probleme, la fel cum am descompus problema 0,
obinem n rezultat problemele 3 i 4. Acest continuu proces 1 putem nchipui ca pe o
continuitate de descompuneri a domeniului admisibil. Fiecare submulime din aceast
16
descompunere prezint o careva subproblem i cu soluia relaxat x
i
i limita de jos
z
i
=c(x') pentru costul problemei iniiale n domeniul dat de descompunere.
Acest proces poate fi prezentat sub forma unui arbore. Rdcina acestui arbore
reprezint domeniul admisibil iniial, iar fiecare vrf prezint o subproblem.
Descompunerea zonei admisibile a unui vrf cu ajutorul adugrii inegalitilor se
prezint ca o ramificare a vrfului n doi feciori ai lui.
Dac domeniul admisibil al problemei liniare n numere ntregi iniiale e mrginit,
atunci acest proces nu poate fi continuat la nesfrit, deoarece inegalitatea de la unul
din vrfurile arborelui ramificat va duce la obinerea unei soluii ntregi a problemei de
programare liniar, care este soluia optim a problemei de programare liniar n
numere ntregi iniial. Procesul ramificrii la un careva vrf poate fi nclcat numai n
una din cauze:
1. soluia problemei de programare liniar ia valoare ntreag, sau
2. problema de programare liniar poate fi inadmisibil.
Totul ce este descris mai sus, conine n sine numai procesul de ramificare al
metodei Branch and Bound. Dac continum procesul ramificrii pn n momentul,
cnd toate vrfurile vor fi extremitile arborelui i vor corespunde, fie soluiilor ntregi,
fie problemelor de programare liniar inadmisibile, atunci extremitatea cu cel mai mic
cost trebuie s fie soluia optim a problemei iniiale de programare liniar n numere
ntregi. Ajungem la un moment important al acestei metode. i anume, s considerm
c soluia complet ntreag optim, gsit la acest moment, are costul z
m
i noi
continum ramificarea vrfului cu limita de jos z
r
=c(x
r
) mai mare sau egal cu z
m
.
Aceasta nseamn c orice soluie x, care poate fi primit n calitate de urma al
problemei x
r
, va avea costul c (x)
z
r
z
m
, i, drept urmare, nu va fi nevoie s
continum ramificarea din x
r
. n aa caz vom spune, c vrful x
r
e mort i subproblema o
vom numi moart. Celelalte vrf uri, din care ramificarea o vom continua, le vom numi
vii.
n acest algoritm lipsesc dou detalii importante de care trebuie s inem cont:
trebuie s hotrm, cum s alegem la fiecare pas, din care vrf s continum ramificarea i
al doilea moment este cum s alegem care variabil aleatoare s determine restriciile
17
suplimentare.
Metoda Branch and Bound se aplic nu numai la problemele de programare
liniar n numere ntregi, ci i la orice problem combinatoric.
2.3. METODA PROGRAMRII DINAMICE
Pe parcursul a mai multor ani de activitate s-a observat c exist numeroase
activiti interesante i semnificative care pot fi clasificate ca procese de decizie n mai
multe etape. Problemele matematice aprute n studierea acestor activiti depesc
hotarele convenionale ale analizei. De aceea se ivete necesitatea elaborrii noilor
metode care pot fi aplicate la studierea unor subiecte mai complexe, mai reale.
Metodele clasice ale calculului diferenial i calculul variaiilor s-au dovedit a fi
utile n aceste noi domenii, dar limitate n ceea ce privete sfera i varietatea aplicaiiilor.
Numeroasele ncercri de a obine rspunsuri numerice, aplicnd metodele deja
cunoscute, au rmas nejustificate i nesatisfactoare.
Examinarea atent i amnunit a greutilor ntlnite au constituit o motivare
suficient pentru crearea unor noi metode i teorii matematice.
Conceptul de programare dinamic a fost introdus n anii cincizeci de ctre Richard
Bellman.
Termenul de "programare dinamic" are sens larg i polivalent, el definete o
tehnic de calcul ce poate fi folosit la rezolvarea unor anumite tipuri de probleme de
optim, n particular, i a unor probleme de programare matematic.
Natura ce ne nconjoar este abundent n probleme de optimizare, care sunt
rezolvate prin nenumrate experiene n decurs de milioane de ani.
Omul pentru a realiza optimul folosete capacitile sale intelectuale, opernd cu
careva modele: machet, model matematic, desen.... Deci, problemele de optimizare
pot fi tratate i ca modele matematice ale unor probleme reale ce apar n diferite domenii:
economie, tiin s.a.
Conceptul de programare dinamic are mai multe semnificaii. n primul rnd
18
este un model matematic general al proceselor de luare a deciziilor, ce se dezvolt pe
etape n timp discret sau continuu, cu orizont limitat sau nelimitat. n al doilea rnd,
programarea dinamic reprezint o clas specific de probleme de optimizare, care nu
pot fi rezolvate efectiv nici prin metodele tradiionale ale analizei matematice, nici prin
metodele calculului variaional.
n fine programarea dinamic este o metod de studiu bazat pe folosirea ecuaiilor
funcionale i pe principiul de optimalitate, avnd n vedere potenialul mainilor numerice
de calcul.
Dezvoltarea acestei metode a impus anumite sarcini. Una dintre ele fiind
examinarea unei varieti de activiti n domeniul construciei de maini, economic,
militar, industrial cu scopul de a vedea care dintre ele pot fi formulate n termenii
programrii dinamice i la ce nivel de complexitate.
Programarea dinamic nu reprezint un ablon de rezolvare a problemelor.
Rezolvnd mai multe probleme de optimizare din diverse domenii au fost aplicate
metodele n mod diferit. Programarea dinamica poate fi folosit la rezolvarea unui ir
ntreg de probleme care reprezint interes i importan n aplicaii.
Avantajul deinerii unei metode raionale la rezolvarea ctorva clase de probleme
din domeniile matematicii este multiplu. n primul rnd avem mijlocul de a obine soluia
problemei pe ci mai simple i mai rapide.
Dup cum am menionat mai nainte metoda programrii dinamice se bazeaz
pe principiul optimalitii. Mai jos vor fi expuse laconic aceste idei, bazndu-ne pe
unele cazuri particulare semnificatoare.
Principiul optimalitii
Presupunem dac o problem de decizie [5], care cere optimizarea unei
anumite funcii prin alegerea convenabil a valorilor variabile x
1
,x
2
,...,x
n
puse unui
sistem de restricii.
Valorile optime ale variabilelor de control x
1
,x
2
,...,x
n
precum i valoarea
optim a funciei date, vor depinde de un sistem de parametri, numii parametrii de
19
stare, care descriu starea sistemului, adic determin sistemul de restricii la care
sunt supuse variabilele.
Procedeele programrii dinamice se aplic acelor probleme ce pot fi formulate
ca procese de decizie cu mai multe stadii, fiecruia dintre acestea fiindu-i proprii una sau
mai multe variabile de control.
Totodat este necesar ca problemele de decizie corespunztoare diferitor stadii s
aib o structur asemntoare.
Procedeele programrii dinamice sunt dominate de principiul optimalitii [5]
potrivit cruia: oricare ar fi decizia x
k-1
luat n etapa k-1 corespunztor strii
k
rezultat din
aceasta (
* *
1
*
,..., ,
n k k
x x x
+
) trebuie s fie optim pentru etapele rmase.
n programarea dinamic ne vom opri asupra problemei:
(R)
'
+ + +
+ + +
ntregi a a a
L a l a l a l
a a a
m
m m
m m
, 0 ,..., ,
...
... max_
2 1
2 2 1 1
2 2 1 1
n care L >l
1
>1
2
> ... > l
m
sunt ntregi pozitivi.
n seciunea precedent, (R) a aprut ca subproblem n rezolvarea relaxatei
problemei de croire unidimensionale prin metoda generrii de coloane. Este clar c
eficacitatea metodei amintite depinde de performanele algoritmilor utilizai pentru
rezolvarea problemei (R).
(R) este un progam liniar n numere ntregi foarte simplu, avnd o singur
restricie, j n literatura de specialitate este cunoscut sub numele de problema
rucsacului datorit urmtoarei interpretri: a
i
este numrul pieselor de echipament de
greutate l
i
i utilitate i
'
+ + +
+ + +
ntregi a a a
L a l a l a l
a a a
k
k k
k k
, 0 ,..., ,
...
... max_
2 1
2 2 1 1
2 2 1 1
al carei optim l notm cu
) (
k . Este clar c R=R
m
(
.
Observm c, pentru k fixat k
,
2
,..., 1 m
, m
1
1 1 1 1 1 1
| max ) (
l
a l a
L , 0
(2.1)
Pentru k>1 avem formula de recuren:
) (
k =max
( )
'
1
]
1
k
k k k k k k
l
a a a l
,... 1 , 0 |
1 (2.2)
Pentru k=m este suficient s gsim numai valoarea funciei m
n L
m
(L)=max
( )
'
1
]
1
m
m m m m m m
l
a a a l L
,... 1 , 0 |
1
Relaia (2.2) arat c funciile
2
,..., 1 m
, m
,
2
,..., 1 m
, m
i valoarea m
(L) i s
notm cu a
k (
) valoarea variabilei a
k
care pentru
1
(
) 1
]
1
1
l
. Pentru
k=m-1,...,2,1:
k
a
=
k
a
(L-S
k
) unde: S
k
= l
k+1
a
+1 k +...+l
m
a
m
Observaii
1. n termenii problemei rucsacului
k
(
,
2
,...,
1 m
,
m
, se deduc una
din alta formalizeaz - n cazul problemei (R) - principiul central al
programrii dinamice datorat lui R. BELLMAN: O strategie optim are
proprietatea c oricare ar fi starea iniial i decizia iniial, deciziile rmase
constituie strategie optim n raport cu starea care rezult din prima decizie.
22
Capitolul III
UN ALGORITM GRASP PENTRU PROBLEMA RUCSACULUI
MULTIOBIECTIV
3.1. Introducere
Multe probleme optimizare cu aspect practic implic, n general, minimizarea
(maximizarea) simultan a ctorva criterii de decizie care sunt contradictorii. De
exemplu, n design-ul unui sistem complex hard/soft, deseori costul sistemului trebuie
minimizat, n timp ce se dorete o performan maxim. Exist o contradicie ntre aceste
dou criterii. Deci, persoana care ia decizie, trebuie s aleag soluia cea mai bun, lund
n consideraie preferinele dup anumite criterii.
Scopul optimizrii combinatorii cu mai multe criterii (OCMMC) este de a
optimiza simultan r>1 criterii sau funcii obiectiv. Aceste probleme au un set de soluii
optimale (n locul unei singure soluii optimale) n sensul c mulimea de soluii optimale
const din puncte echivalente, cnd toate criteriile sunt luate n consideraie. Elementele
mulimii sunt cunoscute sub numele de soluii optimale n sensul Pareto sau soluii
eficiente.
Rezolvarea problemelor OCMMC este destul de diferit de rezolvarea
problemelor cu un singur criteriu (r=1), unde se caut o soluie optim. Dificultatea se
datoreaz nu numai complexitii, ca n cazurile unei singure funcii-obiectiv, dar de
asemenea, i datorit cutrii tuturor elementelor setului eficient, a crui cardinalitate
crete odat cu numrul criteriilor.
n literatura de specialitate, sunt propuse metode exacte de rezolvare a
problemelor de tip OCMMC. Aceste metode sunt n general valide pentru problemele bi-
criterilae, i nu pot fi uor adaptate pentru un numr de mai mare de criterii. De
asemenea, metodele exacte sunt ineficiente pentru rezolvarea problemelor de o scar
larg i a problemelor OCMMC de NPdificile.Ca i n cazurile cu un singur criteriu,
23
folosirea tehnicilor euristice pare a fi cea mai bun abordare a problemelor OCMMC
datorit eficienei, generalitii i simplitii relative a implementrii lor. Aceste tehnici
genereaz soluii bine aproximate, ntr-un timp computaional scurt. Au fost propuse mai
multe proceduri euristice pentru a rezolva probleme OCMMC, dar totui literatura este
cam srac n ce privete aceste probleme. Metodele propuse de Ulungu, Teghem(1995)
i Visee (1998) sunt bazate pe algoritmi exaci, Ben (1999), Jasskiewicz (2002) i Zitzler
i Thiele (1999) folosesc algoritmi genetici, metodele lui Gandibleux i Frevile (2000) i
Hansen (1997) sunt bazate pe cutarea tabu, iar metodele propuse de Czyzak i
Jaskiewicz (1998), Teghem (2000) i Ulungu (1998) se bazeaz pe analiza simulat.
Un scurt sumar a metodelor metaeuristice multi-obiectiv, publicat de Jones .a.
(2002), arat c 70% din articole utilizeaz algoritmi genetici ca metaeuristic primar,
24% analiza simulat i 6% cutarea tabu. Jones .a. (2002) spune c, nu este nici un
semn n literatur care este mbogit cu cele mai noi tehnici euristice, de prezen a
algoritmului GRASP aplicat n cazurile multi-obiectv. Mai recent, Festa i Resende
(2004) public o bibliografie adnotat a metaeuristicii GRASP i acolo nu exist referine
la aplicarea algoritmului GRASP la rezolvarea problemelor OCMMC.
n cadrul acestei lucrri se consider algoritmul GRASP pentru rezolvarea
problemelor OCMMC, genernd un set de soluii aproximative eficiente. Algoritmul este
testat rezolvnd problema 0/1 cu mai multe criterii. Performana algoritmului propus este
comparat cu performanele a doi algoritmi genetici: MOGLS propus de Jaskiewicz
(2002) i SPEA2 (Zitzler 2002) care e o versiune mbuntit a algoritmului SPEA
propus de Zitzler i Thiele (1999). n continuare se prezint formularea unei probleme de
tip OCMMC, se prezint conceptele de utilizare i definiia formal a problemei
rucsacului multi-obiectiv. Sa discut n detaliu algoritmul GRASP propus. Se prezint
rezultatele obinute la calculator. n sfrit, se prezint i concluziile.
24
3.2. Optimizarea multi-obiectiv
3.2.1. Alctuirea problemei i definiiile de baz
Fiind dat o funcievector din r componente f=(f
1
,,f
r
) definit pe un set finit
, se consider urmtoarea problem multi-obiectiv de optimizare combinatorie.
Se cere maximizarea concomitent a componentelor vectorului f(x)=(f
1
(x)=z
1
,
,f
r
(x)=z
r
), pentru x
. Imaginea soluiei x este punctul z=f(x) n spaiul
funciilor obiectiv. Un punct z domin punctul z
/
dac pentru orice j: z
j
=f
j
(x) z
/
j
=f
j
(x
/
) i are loc z
j
>z
/
j pentru cel puin un j.
O soluie x domin soluia x
/
dac imaginea lui x domin imaginea lui x
/
. O
soluie x
*
este Pareto optimal (sau eficient), dac nu exist nici un x , astfel
nct z=f(x) s domine z
*
=f(x
*
).
O soluie x
*
S
este nedominant dac nu exist nici un x
S
, astfel nct
z=f(x) s domine z
*
=f(x
*
).
3.2.2. Problema rucsacului multi-obiectiv (PRMO)
n literatur sunt studiate diferite versiuni a PRMO 0/1. n continuare vom folosi
aceeai formulare a problemei analizat de Zitzler, Thiele i Jaskiewicz n experimentele
lor, care consider problema multi-obiectiv prin cercetarea a r rucsacuri cu diferite
capaciti. Aceast problem poate fi formulat astfel:
f
j
(x)=
x c
n
i
ij
1
j
max
i
ij ij
n
i
ij
W x w
1
, j=1,....,r i
x
i
{0,1}, i=1,,n.
unde wij este greutatea elementului i a rucsacului j, W j -capacitatea rucsacului j i x=(x
1,,x n ) vectorul de variabile liniare astfel nct x
i
=1, dac elementul irucsacului i
25
xi =0 -n caz contrar.
3.3. Algoritmul GRASP euristic multi-obiectiv
GRASP este o metaeuristic multi-start, n care fiecare iteraie const din dou
etape: construirea i cutarea local. Faza de construcie const n aflarea unei soluii
posibile folosind algoritmul GRASP, a crei vecintate este studiat pn cnd un minim
(sau maxim) local este gsit n cadrul fazei de cutare local. Cea mai bun soluie
general este considerat ca rspuns.
3.3.1. Construcia greedy-randomized
Pentru a genera un set iniial de sluii dominante, se folosete o euristic de tip
greedy pentru a maximiza o combinaie liniar a funciilor obiectiv:
F(x)= j
r
j
j
f
(x) , unde
r
j
j
1
=1 i 0
j
1.
Vectorul preferin
) ,..., (
1 r
, n general, determin o direcie de cutare pe frontiera
mulimii optimale n sensul Pareto. Cu scopul generrii unei soluii, mai nti, este definit
un vector de preferin
r
j
j
avem
}. ,..., 0 { , / s w s w
j j j
Numrul vectorilor generai pentru r funcii-obiectiv i pentru o valoare a lui s,
Nr(s), se calculeaz astfel:
1 ) (
2
+ s s N
+ + +
s
i
s
i
s s i i N s N
0 0
2 3
2 / ) 2 )( 1 ( ) 1 ( ) ( ) (
+ +
s
i
s
i
i i i N s N
0 0
3 4
2 / ) 2 )( 1 ( ) ( ) (
Procedura SoluiaConstruit(x,
, ,
lPareto)
La intrare:
x-soluia ce trebuie alctuit ;
-vectorul preferinelor;
lPareto-lista soluiilor dominante care vor fi modificate cu x.
La ieire:
x-soluia construit.
nceput
01 Introdu fiecare element x
) 0 (
l l
x x
n lista candidaiilor (LC)
sortat (descresctor) dup condiia;
r
j
ej ej
r
j
j
w c
1 1
/
;
2 Fie CLR e o list cu
% a primelor elemente a LC
3 Alege la ntmplare un element xl din CLR.
4 Ct timp x l
x
nu ncalc w j , pentru j=1,...,r do (f)
5 nceput
6 X
); 1 (
l l
x x x
7 Elimin elementul xl din CLR;
8 Alege la ntmplare un element xl din CLR;
9 Sfrit_while
27
10 Pentru i=1 pn la LC do (f)
11 nceput (Begin)
12 X
l al i-lea element al LC;
13 Dac x l
x
nu ntrece w j , pentru j=1,...,r, atunci
14 nceput
15 x
); 1 (
l l
x x x
16 Sfrit_if
17 Sfrit_for
18 Verific nserarea lui x n lPareto;
19 ntoarce x;
Sfrit_SoluiaConstruit
Figura 1. Algoritmul de construcie
Figura 1 reprezint algoritmul de construcie implementat, care primete ca
parametri de intrare soluia x ce trebuie construit, procentajul
folosit la selecia
urmtorului element care va fi introdus n x, vectorul preferinelor
r
j
ej
r
j
ej j
w
c
1
1
(1)
Cum este artat n linia a 3-a, lista restrictiv a candidailor (LRC) este compus
din LC primul element din lista LC.
Ciclul din liniile 4-9 este responsabil de alegerea aleatoare din algoritm. Un
element e este ales la ntmplare din LRC i introdus n x. Acest proces este repetat atta
timp ct introducerea lui nu ncalc nici o restricie a problemei. Ciclul din liniile 10-17
completeaz soluia x. Aceast etap este lista CL. La linia 18 se verific dac soluia x
28
este o soluie primar, i n final, soluia x este returnat n linia 19.
3.3.2. Cutarea local
Procedure LocalSearch(x,
, ,
lPareto)
nceput
x-soluia ce trebuie gsit;
-vector ales;
lPareto-lista soluiilor principale care vor fi adugate la soluiile gsite.
Output
x-soluia recalculat.
Begin
01 For i=1 to n do
02 Marked[i]
false;
03 While exist un element e astfel nct Marked[e]=false do
04 Begin
05 y
x
06 nltur elementul nemarcat y
) 1 (
l l
y y
care reprezint cea mai mic valoare a
raportului (1). Repet acest proces pn cnd orice element y
) 0 (
o g
y y
va putea
fi ales pentru a fi inserat;
07 y
BuildSolution(y,
, ,
lPareto);
08 If f(y)<f(x) then
09 Begin
10 x
y
11 For i=1 to n do
12 Marked[i]
false;
13 Else
14 Fie c xl este elementul nemarcat a lui x care reprezint cea mai mic valoare a
raportului (1);
29
15 Marked[e]
true;
16 End_if
17 End_while
18 Return x;
End_LocalSearch
Figura 2. Algoritmul cutrii locale.
Algoritmul de cutare local este prezentat n figura 2. Programul primete drept
parametri de intrare: soluia x ce trebuie recalculat, procentajul
0;
02 For i=1 to N_iter do
03 Begin
04 x
); , 0 ( 0 i x
i
05 Definim vectorul
BuildSoution (x,
,
,lPareto);
07 x
LocalSearch(x,
, ,
lPareto);
08 End_for
09 Return lPareto;
End_Grasp_Multi
Figura 3. Implementarea algoritmului Grasp
Figura 3 reprezint algoritmul Grasp implementat care are ca parametri de
intrare: numrul de iteraii (N_iter), parametrul
n
i
ij j
w
1
5 . 0
.
3.4.2. Evaluarea rezultatelor obinute la calculator pentru optimizarea
multi-obiectv
Rezultatul soluionrii unei probleme de minimizare cu un singur criteriu este
evaluat printr-o metod simpl drept diferena dintre valoarea funciei obiectiv a acestei
soluii i valoarea unei soluii optime. n optimizarea multi-obiectiv, totui, nu exist o
msur unic natural care s poat s conin valoarea unei mulimi de aproximaii M la
mulimea optim Pareto sau mulimea dat R.
Msurm rezultatele mulimii de elemente secundare H generate de metoda
euristic, relativ la mulimea dat R folosind dou msuri:
msuri cardinale: NRS=H R (numrul soluiilor gsite prin metoda euristic )
msuri de distan: (propus de Czyzak i Jaskievicz(1998) i Ulungu (1998):
D
R z
avg
z z d
R
) , ( min
1
/
i D
)} , ( max{min
/
max
z z d
32
unde d este definit ca d(z
max ) ,
/
z
{
)} (
1
/
j j
j
z z
z
H z z
r
) ,..., (
/ /
1
/
z=(z
R z
r
) ,...,
1
i j
(folosit la etapa
cutrii locale) au fost 10 % i 50 % respectiv, reprezentnd cele mai bune rezultate.
S-a observat c este mul mai eficient de folosit
>
deoarece ne permite c la
etapa cutrii locale, un numr mai mare de elemente s poat fi introduse n locul
soluiei analizate.
Mai nti, algoritmul propus este comparat cu algoritmul generic MOGLS
(Jaskiewiez 2002).
Tabelul 2 prezint rezultatele comparate dintre algoritmul multi-GRASP i
algoritmul MOGLS. n a
1
0
max
pentru k = 2,3, ... ,n.. Dac k = 1 atunci F
1
() = f
1
()
S analizm un exemplu concret. Presupunem c asociaia const din patru
ntreprinderi (n = 4). Suma investiiilor capitale constituie 700 mii lei (b = 700),
repartizate ntreprinderilor le mprim la 100 mii lei. Valorile funciei f
j
(x
j
) sunt
indicate tab.l unde, de exemplu, numrul 88 arat c dac ntreprinderea a treia a
asociaiei , primete 600 mii lei din investiiile capitale atunci venitul va constitui 88 mii
lei.
TAB.1
x
j
0 100 200 300 400 500 600 700
f
1
(x
1
)=F
1
(x
1
) 0 20 34 46 53 55 60 60
f
2
(x
2
)=F
2
(x
2
) 0 18 29 45 62 78 90 98
f
3
(x
3
)=F
3
(x
3
) 0 25 41 52 74 82 88 90
f
4
(x
4
)=F
4
(x
4
)
0 30 52 76 90 104 116 125
44
Mai nti completm tabelul 2. Adunm valoarea f
2
(x
2
) cu valoarea
F
1
( x
2
) = f
1
( x
2
) i pe fiecare diagonal gsim cel mai mare numr, pe care l
notm cu stelu i i indicm valoarea x
2
(). Completm tab.3.
Continum procesul prin tabelarea funciilor F
3
(), x
3
() . a. m. d.
TAB. 2
x
2
0 100 200 300 400 500 600 700
X
2
F
1
( x
2
)
f
2
(x
2
)
0 20 34 46 53 55 60 60
0 0 0 20
*
34 46 53 55 60 60
100 18 18 38
*
52
*
64 71 73 78
200 29 29 49 63 75 82 84
300 45 45 65
*
79 91 98
400 62 62 82
*
96 108
500 78 78 98
*
112
*
600 90 78 110
700 98 98
TAB. 3
0 100 200 300 400 500 600 700
F
2
() 0 20 38 52 65 82 98 112
) (
2
__
x
0 0 100 100 300 400 500 500
45
TAB. 4
x
3
0 100 200 300 400 500 600 700
X
3
F
2
( x
3
)
f
3
(x
3
)
0 20 34 46 53 55 60 60
0 0 0 20 38 52 65 82 98 112
100 25 25
*
45
*
63
*
77 90 107 123
200 41 41 61 79
*
93 106 123
300 52 52 72 94
*
112 126
*
400 74 74 94
*
112
*
126
*
500 82 82 102 120
600 88 88 106
700 90 90
TAB. 5
0 100 200 300 400 500 600 700
F
3
() 0 25 45 63 79 94 112 126
) (
3
__
x
0 100 100 100 200 400 400 400
n tabelul 6 completm numai diagonala pentru = 700. Cel mai mare
numr pe aceast diagonal :
Z
max
= 155 mii lei,
ns ntreprinderii a patra trebuie s i se repartizeze
x
*
4
=
4
x
(7OO) = 3OO mii lei.
Celorlalte trei ntreprinderi le rmn 400 lei. Din tabelul 5 se observ c
celei de-a treia ntreprinderi i sunt repartizate
x
*
3
=
3
x
(7OO- x
*
4 )=
3
x
(400) = 200 mii lei.
46
Continum procesul invers i observm c
x
*
2
=
2
x
(700- x
*
4
-x
*
3
) =
2
x
(200) = 100 mii lei.
i primei ntreprinderi i revine suma
x
*
1
= 700- x
*
4
- x
*
3
- x
*
2
= 100 mii lei.
Deci cea mai binevenit repartizare a capitalului la ntreprinderi ar fi
urmtoarea : x
*
1 = 100; x
*
2 = 100; x
*
3
=200; x
*
4 =300.
Aceast repartizare va asigura asociaiei cel mai mare venit posibil : 155 mii
lei.
TAB. 6
x
4
0 100 200 300 400 500 600 700
X
4
F
3
( x
4
)
f
4
(x
4
)
0
0
20
25
38
45
52
63
65
79
82
94
98
112
112
126
0 0 126
100 30 142
200 52 146
300 76 155
*
400 90 153
500 104 149
600 116 141
700 125 125
47
5.2. Problema rucsacului
Se consider problema:
max ...
2 2 1 1
+ + +
n n
x c x c x c
b x a x a x a
n n a a
+ + + ...
1 1
, , 1 , n j N x
j
unde b, a
j
N vom
utiliza urmtoarea notaie:
N(m) = {0, l,2,...,m}.
Metoda de rezolvare a acestei probleme
Metoda de rezolvare a acestei probleme ne vom imagina-o ca un proces din
n etape, fiecare etap k, k = 1,... , n, constnd din umplerea optim a rucsacului [3]
numai cu obiectele de tipul 1,2,...,k.
La prima etap problema se rezolva elementar. Daca b se divide cu a
1
fr
rest, atunci costul rucsacului va fi egal cu:
f
1
(b)=
1
1
a
b
c
n caz contrar - se ncalc condiia de integritate a obiectelor cu care se
ncarc rucsacul i problema de ncrcare cu obiecte numai de tipul 1 nu are soluie
n numere ntregi, convenional notnd n acest caz f
1
(b) = -.
Aadar, n prima etap se utilizeaz funcia:
'
contrar caz n
a cu devide se dac
a
c
f
_ _ ,
_ _ _ _ _ ,
) (
1
1
1
1
48
unde
,
_
1
]
1
1
a
b
N
La etapa a doua se rezolva ecuaia funcional:
)} ( { ) (
2 2 1 2 2
0
2 max
2
2
x a b f x c b f
a
b
x
+
1
]
1
Clar c o soluionare efectiv necesit valorile funciei f
1
() n
,
_
1
]
1
1
a
b
N
, nsi metoda constnd din tabelarea funciei c
2
x
2
+fi (b-a
2
x
2
)
corespunztor lui x
2
N( 1
]
1
2
a
b
) i alegerea variantei pentru care c
2
x
2
+fj(b-a
2
x
2
)
este maxim. Evident c ecuaia are soluie numai n cazul n care exist
cel puin o valoare x
2
N( 1
]
1
2
a
b
)pentru care are loc f
1
(b-a
2
x
2
)-. Dac
pentru o careva valoare x
2
N( 1
]
1
2
a
b
) are loc f
1
(b-a
2
x
2
)= -, atunci perechea
x
1
= b-a
2
x
2,
x
2
nu satisface restricia problemei rucsacului.
La etapa a treia se consider ecuaia funcional:
)} ( { ) (
3 3 2 3 3
0
3 max
3
2
x a b f x c b f
a
b
x
+
1
]
1
rezolvarea creea necesit valorile funciei f
2
() n
,
_
1
]
1
2
a
b
N
Metoda de
rezolvare ramne aceiai: tabelarea n x
3
N 1
]
1
3
a
b
a funciei c
3
x
3
+f
2
(b-a
3
x
3
),
urmat de alegerea maxime a funciei c
3
x
3
+f
2
(b-a
3
x
3
), urmat de alegerea maximei.
mod analogic, la etapa k, k > 3, se consider ecuaia funcional
recurent.
Avem ecuaia recursiv :
49
)} ( { ) (
1
0
max k k k k k
a
b
x
k
x a b f x c b f
k
k
+
1
]
1
Ea se rezolv prin tabelarea funciei
) (
1 k k k k k
x a b f x c +
n corespundere cu
x
k
N( 1
]
1
k
a
b
) i prin alegerea n fine a maximei.
Deoarece la etapa k+1 se utilizeaz valorile funciei f
k
()
,
_
1
]
1
k
a
b
N
e
rezonabil ca la etapa k s se tabeleze nu numai funcia
) (
1 k k k k k
x a b f x c +
ci i
funcia f
k
(). Excepie fac numai: etapa 1, n care se tabeleaz doar funcia
f
1
(), corespunztor lui
,
_
1
]
1
k
a
b
N
i etapa n, n care se tabeleaz doar funcia
) (
1 n n n n n
x a b f x c +
pentru x
n
N( 1
]
1
n
a
b
) .Sumnd cele expuse, putem trage
concluzia c algoritmul de soluionate a problemei rucsacului se reduce la o
consecutivitate de n pai, pasul k, k=l,n, constnd din construirea unui tabel din patru
colonie, ultimele dou, la trecerea la pasul k+1, fiind nlocuite cu valorile
*
k
x
pentru care au soluii ecuaiile funcionale:
)} ( { ) (
1
0
max k k k k k
a
b
x
k
x a b f x c b f
k
k
+
1
]
1
=0,b
Aadar, n etapa (pasu1 10) k soluiile ecuaiilor funcionale se determin
din tabelul:
50
f
k
() X
k
) (
1 k k k k k
x a f x c
=0 f
k
(0) 0 f
k-1
(0)
=1 f
k
(1) 0
1
]
1
k
a
1
f
k-1
(1)
])
1
[ 1 (
1
1
k
k k
k
k
a
a f
a
c +
1
]
1
=b f
k
(b) 0
1
2
...
1
]
1
k
a
b
f
k-1
(b)
) (
1 k k k
a b f c +
) 2 ( 2
1 k k k
a b f c +
]) [ (
1
k
k k
k
k
a
b
a b f
a
b
c +
1
]
1
Cnd se trece la etapa(pasul) k+l, tabelul de mai sus se salveaz sub forma:
f
k
()
*
k
x
=0
f
k
(0) 0
=l
f
k
(1) ) 1 (
*
k
x
=b
f
k
(b) ) (
*
k
x
unde
) (
*
k
x
este soluia ecuaiei funcionale corespunztoare lui .
La ultima etap, e suficient s se determine pentru funcia f
n
() numai
valoarea f
n
(b)
n concluzie, problema rucsacului se rezolv n baza relaiilor:f
1
()=
1
1
a
c
,
dac k=1 i se divide cu a
1
f
1
()=-, dac k=1 i se divide cu a
1
)} ( { ) (
1
0
max k k k k k
a
b
x
k
x a b f x c b f
k
k
+
1
]
1
=0,b, dac k>1
51
Exemplu particular
S se soluioneze problema rucsacului:
z=3x
1
+2x
2
+5x
3
+x
4
+4x
5
max
2x
1
+2x
2
+3x
3
+x
4
+2x
5
=8
x
j
N
5 , 1 j
Rezolvare. Conform celor expuse, la pasul 1 alctuim tabelul:
La pasul 2 avem ecuaiile recurente:
)} 2 ( 2 { ) (
1 2
2
0
2 max
2
k
x
x f x f +
1
]
1
=0,8
f
1
()
*
1
x
0 0 0
1 -
2 3 1
3 -
4 6 2
5 -
6 9 3
7 -
8 12 4
52
n baza lor alctuim tabelul:
T
f
1
() X
2
2x
2+
f
1
(-2x
k
)
T
f
1
() X
2
2x
2+
f
1
(-2x
k
)
0
0 0 0+f
1
(0)
6
9
0
1
2
3
0+f
1
(6)= 9
2+f
1
(4)= 8
4+f
1
(2)= 7
6+f
1
(0)= 6
1 0
0+f
1
(1)= -
7 0
i
1
2
3
0+f
1
(7)= -
2+f
1
(5)= -
4+f
1
(3)= -
6+f
1
(1)= -
2
3
0
1
0+f
1
(2)= 3
2+f
1
(0)=2
8
12
0
1
2
3
4
0+f
1
(8)=12
2+f
1
(6)=11
4+f
1
(4)= 10
6+f
1
(2)=9
8+f
1
(0)=0
3 0
0+f
1
(3)= -
2+f
1
(1)= -
4
6
0
1
0+f
1
(4)= 6
2+f
1
(2)=5
4+f
1
(0)=4
5 0
1
2
0+f
1
(5)= -
2+f
1
(3)= -
4+f
1
(1)= -
S menionm c n coloana a doua se nscriu valorile maxime
(corespunztoare valorii ) din coloana a patra, adic nscrierile n coloana a doua
53
se efectueaz numai dup efectuarea nscrierilor de rigoare n coloana a patra.
Trecnd la pasul urmtor, tabelul obinut l salvm sub forma:
54
f
2
()
*
2
x
0
0+f
1
(0)=0
0
1
-
0
2
2*0+f
1
(2)= 3
0
3
-
0
4 2*0+f
1
(4)=6 0
f
2
()
*
2
x
5
-
0
6 2*0+f
1
(6)=9 0
7
-
0
8 2*0+f
1
(8)=12 0
La pasul trei se rezolv ecuaiile:
f
3
() = max {5x
3
-f
2
(-3x
3
)},
= 0,
n mod analogic se construiete tabelul pasului trei, care la trecere la
pasul patru se memorizeaz sub forma:
f
3
()
*
3
x
f
3
()
*
3
x
0 5*0+f
2
(0)=0 0 5 5*1+f
2
(2)=8 1
1
-
0 6 5*2+f
2
(0)=10 2
2 5*0+f
2
(2)=3 0
5*1-f
2
(4) =11 1
3
5*1+f
2
(0)=5
1 8
5*2+f
2
(2)=13
2
4 5*0+f
2
(4)=6 0
La pasul patru se rezolv:
f
4
() = max {x
4
+f
3
(-x
4
)},= 0,8
care au soluiile:
f
4
()
*
4
x
f
4
()
*
4
x
0
0
0 5
0+f
3
(5)=8 0
1
1+f
3
(0)=1
1 6
0+f
3
(6)=10 1
2
0+f
3
(2)=3
0
1+f
3
(6)=11 0
3 0+f
3
(3)=5 0 8 0+f
3
(8)=13
0
4 1+f
3
(3)=6 1
La ultimul pas ne putem limita la rezolvarea doar a ecuaiei funcionale:
f
5
() = max {4x
5
+f
4
(-2x
5
)},= 0,8
vom obine soluiile chiar a 9 probleme, corespunztor valorilor
8 , 0
f
5
()
*
5
x
f
5
()
*
5
x
0 0 0 5 4*2+f
4
(1)=9 2
1 0+f
4
(1)=1 1 6 4*3+f
4
(0)=12 3
2 4*1+f
4
(0)=4 1 7 4*3+f
4
(1)=13 3
3 4*1+f
4
(1)=5 1 8 4*4+f
4
(0)=16 4
4 4*2+f
4
(0)=8 2
Din ultimul tabel aflm c maxima funciei obiectiv a problemei date este egal cu
=16. Soluia problemei pentru o careva valoare se determina prin parcurgerea n ordine
invers a tabelelor pailor 4,3,2,1, n care se selecteaz valorile componentelor optime
corespunztoare.
De exemplu, pentru =7, f
5
(7) = =4*3+f
4
(1) = 13, x
5
*=3. Valoarea variabilei x
4
o
determinm din tabelul pasului patru - din linia corespunztoare lui f
4
(1)=1+f
3
(0). Din ea
reiese ca
*
4
x
=1. Valoarea x
3
*=0 se determin din linia corespunztoare lui f
3
(0). n
continuare aflm ca
*
2
x
=0 i
*
1
x
=0
Exact prin acelai procedeu se determin soluia corespunztoare lui
f
5
(8)=4*4+f
4
(0) = I6, care este egal cu x=(0,0,0,04)
T.
Rspuns: Costul maxim z
max
= 16 rucsacul l are dac e incarcat cu patru obiecte de tipul
cinci. Deci x*=(0.0,0,0,4).
T
Anex
Listingul programului
#include<stdio.h>
#include <stdlib.h>
#include<conio.h>
int i,par,min,k,j,s,x[100],xmin[100],a[100],c[100];
int b,n;
int f(int x[100], int c[100]);
{
int i,s=0;
for(i=0;i<n;i++)
s+=c[i]*x[i];
return s;
}
void generate()
{
int i;
for(i=0;i<n;i++)
{
x[i]=random(b/a[i]);
printf("x=%i ",x[i]);
}
printf("\n");
}
void localsearch()
{
par=-1;
for(i=0;i<n;i++)
{
x[i]+=1-random(3);
if(x[i]b/a[i]) x[i]=b/a[i];
if(x[i]<0) x[i]=0;
printf("x=%i ",x[i]);
}
printf("\n");
}
void suma()
{
s=0;
for(i=0;i<n;i++)
s+=a[i]*x[i];
}
void comparare_f()
{
par=1;
printf("F=%i",f(x,c));
if(minf(x,c))
{
min=f(x,c);
for(i=0;i<n;i++)
xmin[i]=x[i];
}
}
void rezultate(FILE *out)
{
fprintf(out,"\n Problema rucsacului este");
fprintf(out,"%s%i\n ","pentru n=",n);
fprintf(out,"%i \n ",min);
printf("\n\nmin=%i\n\n",min);
for(i=0;i<n;i++)
{
printf("x=%i ",xmin[i]);
fprintf(out,"%i ",xmin[i]);
}
printf("\nValorile c sunt\n");
for(i=0;i<n;i++)
printf("%4d",c[i]);
printf("\nValorile a sunt\n");
for(i=0;i<n;i++)
printf("%4d",a[i]);
printf("\nCu valoarea lui b=%d\n",b);
fprintf(out,"\n\nValorile c sunt\n");
for(i=0;i<n;i++)
fprintf(out,"%4d",c[i]);
fprintf(out,"\nValorile a sunt\n");
for(i=0;i<n;i++)
fprintf(out,"%4d",a[i]);
fprintf(out,"\nCu valoarea lui b=%d\n",b);
}
void main()
{
FILE *in, *out;
if ((out = fopen("d:\\Rezultat.txt", "wt"))== NULL)
{
printf("Cannot open output file.\n");
}
if ((in = fopen("c:\\Date.txt", "rt"))== NULL)
{
printf("Cannot open input file.\n");
}
int i;int ty;
for (ty=0;ty<8;ty++)
{
par=1;min=5000;
fscanf(in,"%d",&n);
for (i=0;i<n;i++)
fscanf(in,"%d",&c[i]);
for (i=0;i<n;i++)
fscanf(in,"%d",&a[i]);
fscanf(in,"%d",&b);
randomize(); int o=0;
acolo:clrscr();
for(j=0;j<1000;j++)
{
if(par==1)
generate();
suma();
if(s==b)
comparare_f();
else localsearch();
}
if (min==5000)
rezultate(out);
getch();
}
fclose(out);
fclose(in);
}
Rezultatele testrii programului
Problema rucsacului pentru n=1:
min=14
x=7
Valorile c sunt
2
Valorile a sunt
3
Cu valoarea lui b=21
Problema rucsacului pentru n=2:
min=6
x=6 x=0
Valorile c sunt
1 2
Valorile a sunt
2 3
Cu valoarea lui b=12
Problema rucsacului pentru n=3:
min=8
x=2 x=0 x=2
Valorile c sunt
1 2 3
Valorile a sunt
3 3 4
Cu valoarea lui b=14
Problema rucsacului pentru n=4:
min=45
x=1 x=4 x=6 x=6
Valorile c sunt
1 2 3 3
Valorile a sunt
4 3 2 1
Cu valoarea lui b=34
Problema rucsacului pentru n=5:
min=31
x=2 x=1 x=2 x=4 x=1
Valorile c sunt
1 2 3 4 5
Valorile a sunt
8 7 5 1 7
Cu valoarea lui b=44
Problema rucsacului pentru n=6:
min=34
x=0 x=8 x=2 x=0 x=0 x=2
Valorile c sunt
4 2 6 4 2 3
Valorile a sunt
6 2 1 6 3 1
Cu valoarea lui b=20
Problema rucsacului pentru n=7:
min=41
x=0 x=1 x=0 x=1 x=9 x=2 x=0
Valorile c sunt
1 5 2 1 3 4 1
Valorile a sunt
5 2 4 7 1 2 1
Cu valoarea lui b=22
Problema rucsacului pentru n=8:
min=9
x=0 x=0 x=0 x=4 x=1 x=0 x=1 x=0
Valorile c sunt
7 2 5 1 4 6 1 8
Valorile a sunt
8 2 5 1 7 3 6 2
Cu valoarea lui b=17
BIBLIOGRAFIA
1. Valeriu Ungureanu. Programarea matematic, Chiinu, 2001.
2. Emil Boro, Dumitru Opri. Introducere n optimizarea liniar i aplicaii,
Timioara, Facla, 1979.
3. Vasile Nica, Capitole speciale ale cercetrilor operaionale. Tipografia ASE Bucureti,
2004.
4. C. H. Mihoc, A. tefanescu. Progamarea matematic, Bucureti, 1973.
5. .. , , 1960.
6. X. , . . , , , 1985.
7. . , . , K. . , , ,
1979.