You are on page 1of 64

INTRODUCERE

Domeniul programrii liniare n numere ntregi ocup un loc deosebit n


teoria optimizrii att prin caracterul problemelor cercetate, ct i prin complexitatea
problemelor, a algoritmilor de soluionare. Numeroase probleme cu caracter
aplicativ pot fi formulate ca probleme de programare liniar n numere ntregi. Una
dintre aceste probleme este problema rucsacului. Problema rucsacului este o
problem NP-complex i este utilizat pe larg la cercetarea complexitii a
numeroase alte probleme.
Lucrarea dat examineaz problema rucsacului att n contextul general al
programrii liniare n numere ntregi, ct i n cadrul metodelor specifice de
rezolvare, a aplicaiilor mai importante.
Lucrarea const din cinci capitole.
Capitolul I "Probleme de programare liniar n numere ntregi. Problema
rucsacului" conine dou paragrafe.
n 1.1 sunt expuse cteva formulri ale problemei rucsacului: problema 0/1 a
rucsacului, problema rucsacului n numere ntregi, problema rucsacului cu
inegaliti (atunci cnd restricia ia forma inegalitii) i este demonstrat c toate trei
forme ale problemei rucsacului sunt echivalente.
n 1.2 este cercetat complexitatea problemei rucsacului. Se demonstreaz, c
problema 0/1 a rucsacului este NP-complex. La demonstrarea NP-complexitii
problemei rucsacului n numere ntregi reformulm problema 0/1 a rucsacului n
problema rucsacului n numere ntregi.
Capitolul II "Metode de rezolvare a problemelor de programare liniar n
numere ntregi", const din trei paragrafe, n care sunt descrise urmtoarele metode
de soluionare a problemelor liniare n numere ntregi: Metoda Gomory, Metoda
Branch and Bound, Metoda programrii dinamice.
n capitolul III, propunem un algoritm GRASP (Greedy Randomized Adaptive
Search Procedure) pentru a genera o aproximare bun a setului optimal n sensul
1
PARETO (eficient) n probleme de optimizare combinatorie multi-obiectiv .
Algoritmul este aplicat la rezolvarea problemei rucsacului 0/1 cu r-funcii
obiectiv. Aceast problem este formulat asemenea problemei clasice 0/1 a
rucsacului cu r funcii obiectiv, cu n-elemente (articole), fiecare cu costul i greutatea
respective, care trebuie introduse n r rucsacuri cu diferite capaciti pentru a
maximiza costurile totale. Algoritmul se bazeaz pe o funcie scalar ponderat
(combinaia liniar a funciilor obiectiv).
La fiecare iteraie a algoritmului, este determinat un vector prioritar, i este
alctuit o soluie lund n consideraie preferinele fiecrui caz. Soluia gsit este
nlocuit (verificat) printr-o cutare local, ncercndu-se mbuntirea funciei
scalare ponderate.
Pentru a gsi o mulime de soluii eficiente vom folosi diferii vectori de
preferin, care sunt distribuii uniform pe frontiera PARETO.
Algoritmul propus a fost testat pe problemele cu r=2,3,4, i numrul de
elemente n=250,500,750. Calitatea soluiilor aproximative este evaluat fiind
comparat cu soluiile date de 2 algoritmi genetici luai din literatura de specialitate.
n capitolul IV numit Optimizarea global prin metoda GRASP continu
prezentm o metod de optimizare global neobinuit, numit continu (C-GRASP),
care este o extensie realizat de Feo i Resende's a algoritmului GRASP din domeniul
de optimizare discret la optimizarea global continu. Aceast metod de cutare
local este simplu de implementat, este aplicat pe larg, i nu se folosete de
informaia derivat, astfel crend un suport convenabil pentru rezolvarea problemelor
de optimizare global. Noi ilustrm eficacitatea procedurii pe un set de probleme
standarde.
Capitolul V Aplicaii const din dou paragrafe.
n 5.1 este analizat i rezolvat o problem de tip rucsac: problema
investiiilor capitale n care funcia obiectiv este separabil i neliniar.
n 5.2 este expus nemijlocit problema rucsacului, metoda de rezolvare a
creia ne-o imaginm ca un proces din n etape, fiecare etap constnd din umplerea
2
optim a rucsacului cu obiecte de tip ntreg. Tot n acest paragraf e rezolvat un
exemplu particular, n care se determin costul maxim al rucsacului.
3
CAPITOLUL I
PROBLEME DE PROGRAMARE LINIAR N NUMERE NTREGI.
PROBLEMA RUCSACULUI
1.1. FORMULRI I PROPRIETI
Prin problema de programare liniar n numere ntregi se nelege o
problem de programare liniar n care pentru o parte din variabile sau pentru toate se
impune condiia s ia numai valori ntregi. Astfel de restricii apar, ca de obicei,
atunci cnd variabilele respective desemneaz cantiti indivizibile.
Problema programrii liniare n numere ntregi are forma:
c
1
x
1
+c
2
x
2
+...+c
n
x
n

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

[0, 1], atunci spunem c avem problema


continu a rucsacului.
Notnd x
j
=
1, _ _ _ _ _ ,
0, _ _ ,
dac obiectul este pus n rucsac
n caz contrar

'

obinem urmtorul model matematic al problemei discrete:


1 1 2 2
... max
n n
c x c x c x + + +

1 1 2 2
... ,
{0,1}, 1,..., .
n n
j
a x a x a x b
x j n

'

+ + +

(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 cel mai mare numr ntreg, mai mic dect x;


{x}= x-[x] partea fracionar 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

; care trebuie luate ntr-o excursie ntr-un rucsac ce suport o


greutate maxim L. ntrebare: ce piese de echipament trebuie alese i n cte exemplare
vor fi acestea introduse n rucsac astfel nct utilitatea ncrcturii s fie maxim?
Firete, (R) poate fi rezolvat prin metodele specifice programrii n numere
ntregi (plane de seciune, Branch & Bound etc). Faptul c (R) are o singur restricie
permite abordarea ei prin programare dinamic. Mai precis, pentru fiecare k =
m , 1
i
fiecare ntreg
L ,..., 1 , 0
considerm problema:
20
R
k
(

'

+ + +
+ + +
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
(

) i c maximul funciei obiectiv


din R este
) (L
m

.
Observm c, pentru k fixat k

este o funcie de o singur variabil ale crei


valori admisibile sunt O, l,... ,L.
Funciile
1

,
2

,..., 1 m

, m

pot fi determinate astfel:



{ }
1
]
1


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

rezult nite procese de


optimizare unidimensionale.
S presupunem cunoscute funciile
1

,
2

,..., 1 m

, m

i valoarea m

(L) i s
notm cu a

k (

) valoarea variabilei a
k
care pentru

dat realizeaz maximul din


formula de recuren (2.2). Pentru k=1 avem a

1
(

) 1
]
1

1
l

Atunci, o soluie optim a problemei (R) se gsete astfel:


) (L a a
m m

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

) este valoarea maxim a unei ncrcri a


rucsacului ce nu depete n greutate plafonul

i care este format numai din


primele k tipuri de echipament.
21
2. Prin programarea dinamic rezolvarea problemei de optimizare
multidimensional (R) este nlocuit cu o secven de optimizri unidmensionale
bazate pe formula de recuren (2.2)
3. Ecuaia funcional (2.2), prin care funciile
1

,
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

. Pentru acest vector este generat o soluie x, a crei funcie


ponderat f(x) este maximizat.
Murata .a. (2001) introduce un mod de generare a vectorului de preferin
distribuite uniform pe frontiera Pareto. Aceti vectori sunt generai prin combinarea a r
numere ntregi nenegative cu suma lui s:
w r
w w + + + ...
2 1 =s, unde w
i
{0,1,2,,s}.
De exemplu dac r=2 funcii-obiectiv i s=5 avem vectorii:
(5,0),(4,1),(3,2),(2,3),(1,4),(0,5).
Pentru r=3 i s=3, avem 10 vectori:
(3,0,0),(2,1,0),(1,2,0),(1,1,1),(0,2,1),(0,3,0),(1,0,2),(0,1,2),(0,0,3).
26
Cu scopul de a obine preferine normalizate (
) 1
1

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 ;

-procentajul folosit la definirea candidaiilor listei restrictive (CLR);

-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

i lista Pareto unde


sunt situate soluiile.
La ieire, algoritmul ntoarce soluia x.
n linia 1, este definit lista candidailor (LC). n aceast list sunt introduse
toate elementele cu x i =0. Lista LC este sortat (n ordine descresctoare) conform
urmtorului raport:

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;

-procentajul folosit pentru recalcularea soluiei x;


-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

care este folosit la


etapa de recalculare a soluiei, un vector oarecare

i lista Pareto, unde sunt introduse


soluiile principale. Ca date de ieire algoritmul returneaz soluia final x. Ciclul din
liniile 1-2 iniializeaz toate poziiile irului marcat cu valoarea fals. Un element e poate
fi mutat din rucsac doar dac Marked[e]=false. Acest ir este foarte important pentru
finalul algoritmului. La linia 5, soluia x este atribuit soluiei auxiliare y. La linia 6 din
y sunt nlturate elementele ce reprezint cea mai mic valoare a raportului (1). Acest
proces se repet atta timp ct exist un element ce nu aparine rucsacului i poate fi
introdus fr a nclca orice restricie a problemei. La linia 7 procedura BuilSolution
este efectuat pn cnd se gsete y. Dac noua soluie y este mai bun ca x, atunci se
calculeaz soluia x n linia 10 i irul Marked este reiniializat la linia 11-12. Astfel,
procesul este repetat avnd o nou soluie x. Dac y nu este mai bun ca x atunci la linia
15 este marcat primul element care este nlturat din y n timpul etapei descrise la linia 6.
La linia 18, soluia recalculat x este returnat. Numrul de iteraii a algoritmului de
cutare local depinde de valoarea soluiei x ce este primit ca parametru.
30
3.3.3. Grasp multi-euristic
Procedure Grasp-multi euristic(N_iter,
,
)
Input
N_iter-numrul de iteraii Grasp

-procentajul (parametrul ) folosit la etapa de calculare;

-procentajul folosit la etape cutrii locale


Output
lPareto-lista soluiilor principale;
Begin
01 lPareto

0;
02 For i=1 to N_iter do
03 Begin
04 x
); , 0 ( 0 i x
i

05 Definim vectorul

pentru iteraia i potrivit metodei descrise la paragraful 1.3.1


06 x

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

folosit la etapa de cutare local. Ca


date de ieire, algoritmul returneaz lista Pareto, unde sunt introduse soluiile principale.
La linia 1, lista Pareto este iniializat. Ciclul din liniile 2-8 efectueaz iteraiile Grasp
N_iter. La linia 4, soluia x este iniializat. La linia 5, vectorul ales

este definit dup


metoda descris anterior. Soluia x este calculat la linia 6 i recalculat la linia 7. n
sfrit, lista Pareto este returnat.
3.4. Execuia algoritmilor la calculator
31
Toate compilrile algoritmilor au fost efectuate pe un calculator Pentium 4 de
2 GHz i cu un Gbyte de memorie RAM. Algoritmul Grasp-multi a fost implementat n
C, versiunea 6.0 a compilatorului Miccrosoft Visual C.
3.4.1. Exemple
n acest program am folosit aceleai date pe care le-au folosit Zitzler i Thiele
(1999). Ei au introdus date ce conin 250, 500 i 750 elemente i 2, 3, i 4 obiective.
Profiturile i cantitile care nu se potrivesc (nu sunt egale ) au fost generate la
ntmplare n interiorul [10:100]. Capacitile rucsacului au fost fixate la jumtate din
greutatea total potrivit rucsacului: w

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

este un ir de funcii obiectiv f j .


De notat c Davg este distana medie de la punctul zR la cel mai apropiat
punct din H, n timp ce Dmax reprezint distana maxim de la punctul zR la orice
punct din H.
Cnd mulimea de valori optime Pareto nu este cunoscut, iar H este mulimea
punctelor secundare generate de o alt euristic, definim mulimea de date R drept puncte
secundare a (H H
/
) i folosim aceleai msuri menionate mai sus pentru a obine
aproximaiile lui H i H
/
relativ la R.
3.4.3. Compararea rezultatelor
S-au executat N_iter=1000 GRASP iteraii pentru fiecare etap descris n
tabelul 1. n acest tabel sunt descrise, pentru fiecare etap numrul r de funcii-obiectiv i
numrul n de elemente. Timpul de compilare, msurat n secunde, a algoritmului multi-
GRASP este scris n ultima coloan.
Valorile parametrilor

(folosind la etapa de calculare ) i

(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

-a coloan este prezentat nr


R
de soluii. n urmtoarea
coloan sunt prezentate pentru fiecare algoritm i fiecare etap, numrul total de soluii
obinute (TNS), numrul de soluii (NRS), i distana medie (Davg ).
33
Iteraie Timpul
consumat
Nume Obiective Elemente
Kn250_2 2 250 10
Kn250_3 3 250 94
Kn250_4 4 250 467
Kn500_2 2 500 67
Kn500_3 3 500 542
Kn500_4 4 500 1960
Kn750_2 2 750 204
Kn750_3 3 750 1259
Kn750_4 4 750 4120
Tabelul 1. Timpul consumat pentru fiecare iteraie.
Etapa
R
MOGLS GRASP-MULTI
TNS NRS Davg TNS NRS Davg
Kn250_2 209 178 0 1.22e-02 209 209 0
Kn250_3 5485 1464 1078 1.75e-02 4279 4242 4.40e-05
Kn250_4 22674 3952 3299 2.87e-02 19190 19099 1.23e-04
Kn500_2 357 249 0 1.68e-02 357 357 0
Kn500_3 13314 2360 1460 2.70e-02 11806 11803 3.54e-07
Kn500_4 46489 5699 4204 4.00e-02 42157 42157 6.47e-06
Kn750_2 555 356 3 1.75e-02 552 552 3.14e-06
Kn750_3 20286 2910 1073 2.97e-02 18561 18561 1.64e-07
Kn750_4 64796 6971 5178 4.53e-02 59515 59515 8.20e-06
Tabelul 2. Compararea algoritmilor MOGLS i GRASP-MULTI (e-k=*10
k
).
Rezultatele arat c algoritmul multi-GRASP obine un numr mai mare de
soluii de referin i c acest algoritm este mai bun ca MOGLS n ceea ce privete
calcularea distanei.
Algoritmul propus de asemenea este comparat cu algoritmul genetic Spea2
(Zitzler 2002) pentru etape cu n=750 elemente.
Etape
R
SPEA2 GRASP-MULTI
TNS NRS Davg TNS NRS Davg
Kn750_2 552 250 0 1.51e-01 552 552 0
Kn750_3 18670 300 109 2.46e-01 18561 18561 0
Kn750_4 59636 350 121 3.58e-01 59515 59515 0
Tabelul 3. Compararea algoritmilor SPEA2 i GRASP-MULTI (e-k=*10
k
)
34
Tabelul 3 arat numrul de soluii de referin
R
generate de SPEA2 i multi-
GRASP. n acest tabel de asemenea este artat, pentru fiecare algoritm i fiecare etap,
numrul total de soluii obinute, numrul soluiilor de referin (NRS) i distana medie
(Davg ).
Rezultatele arat c algoritmul multi-GRASP este mai eficient ca algoritmul
SPEA2 pentru probleme cu n=750 elemente.
3.5. Concluzii
Algoritmul GRASP genereaz o aproximaie bun a unei mulimi de soluii
optime Pareto, a problemei combinatorii de optimizare multi-obiectiv. Algoritmul este
folosit pentru a rezolva problema rucsacului cu r funcii-obiectiv i este comparat cu
algoritmul MOGLS i SPEA2. Rezultatele de la calculator arat c metoda propus,
multi-GRASP, a obinut pentru toate etapele efectuate, un numr de soluii de referin
mult mai mare ca cele ale altor algoritmi euristici. Este de asemenea cea mai eficient
metod n ceea ce privete rezultatul soluiilor obinute (msurate dup distana dintre
soluiile Davg ). Bazndu-ne pe rezultatele obinute, putem conchide c algoritmul meta-
euristic GRASP poate fi folosit eficient pentru a rezolva probleme combinatorii de
optimizare multi-obiectiv.
35
CAPITOLUL IV
OPTIMIZAREA GLOBAL PRIN METODA GRASP CONTINU
4.1. Introducere
Problemele de optimizare apar n cadre numeroase, incluznd decizii, inginerie,
i tiin. n multe situaii, convexitatea funciei obiectiv (sau domeniul realizabil) nu
poate fi uor verificat, i este rezonabil pentru a presupune c problema este de
optimizare global multiextremal. Optimizarea global se ocup de problemele de
optimizare cu multiple soluii de extrem. Optimizarea n problemele globale poate fi
discret sau continu. Din punctul de vedere matematic, minimizarea global
(optimizarea) caut o soluie x*S

R
n
astfel ca f (x*)f(x), xS, unde S este un
domeniu din R
n
i funcia obiectiv f este definit cu f :S R.. Aa o soluie x* se
numete soluie minim global. O soluie x' este minim local dac ntr-o vecintate
local S
0
S, se verific f (x
1
) f(x), xS
0
. Optimizarea global abund apare n multe
domenii, incluznd: biologia, chimia, genetica, tiina militar, energetica, robotica,
tiina de transportare etc.
n continuare prezentm o metod neobinuit de optimizare global, numit
Continuous-GRASP (C-GRASP), care extinde procedura de cutare GRASP de Feo i
Resend din domeniul de optimizare discret la aceea de optimizare global continu.
Euristici pentru optimizarea global nu prea sunt n literatura de specialitate. Scopul
nostru este de a analiza o metod local de cutare aleatorie care este simpl pentru a o
pune n aplicare, poate fi aplicat pe un domeniu larg de probleme, i care nu se
folosete de informaii derivate, astfel crend un acces convenabil pentru rezolvarea
problemelor de optimizare global. Se ilustreaz eficacitatea procedurii pe un set de
probleme standard precum i pe dou probleme dificile de optimizare global.
36
Procedure C-GRASP
(n,l,u,f(
.
),MaxIters,MaxNumIterNoImpro,NumTimesToRun,MaxDirToTry,)
1 f
*
;
2 for j=1,..., NumTimesToRun do
3 xUnifRand(l,u);h;NumIterNoImprov0;
4 for Iter=1,..., MaxIters do
5 xConstructGreedyRandomized(x, f(
.
),n,h,l,u, );
6 xLocalSearch(x, f(
.
),n,h,l,u,MaxDirToTry);
7 if f(x)<f
*
then
8 x
*
x; f
*
f(x); NumIterNoImprov0;
9 else
10 NumIterNoImprov NumIterNoImprov+1;
11 end if
if NumIterNoImprov MaxNumIterNoImpro then
hh/2; NumIterNoImprov0;
14 end if
15 end for
16 end for
17 return(x
*
);
end C-GRASP;
Figura 1. Pseudo-cod pentru C-GRASP
4.2. Metoda GRASP continu
Feo i Resende descriu euristica GRASP ca multi-pornire local, unde
procedura GRASP a fiecrei iteraii se compune din dou faze, o faza de construire i o
faz de cutare local. Construirea combin procedeul greedz i aranjarea aleatorie. Se
produce un set de pornire ca apoi s se porneasc cutarea local. Soluia cea mai bun
peste toate iteraiile este pstrat ca soluie final. GRASP a fost aplicat anterior la
37
numeroase probleme discrete de optimizare combinatorie. Aici ne oprim la optimizare
continu global.
Se prezint euristica C-GRASP pentru rezolvarea problemelor de optimizare
global continu. Fr a pierde din generalitate, noi lum domeniul S ca un hiper
dreptunghi
S = {x =( x
1
,.. x
n
)R
n
: l x u},
unde lR
n
i uR
n
nct u
i
l
i,
, pentru i=1,...,n.
Se consider problema:
x* = argmin{f(x) | l x u }, unde f: R
n
R, i l,x,uR
n
.
Pseudo-codul pentru C-GRASP este prezentat n Figur. Procedura ia
dimensiunea n de intrare a problemei, marginea inferioar i superioar a vectorilor l i u,
funcia obiectiv f(
.
), precum i parametrii MaxIter, MaxNumIterNoImprov,
MaxDirToTry, NumTimesToRun, i .
n linia 1 din pseudo-cod, valoarea funciei obiectiv a celei mai bune soluii
gsite (f*) este setat la infinit.
C-GRASP este o procedur multi-start. Este repetat timpul NumTimesToRun n
ciclul de la linia 2 la linia 16. La fiecare iteratie, n linie 3, o soluie iniial x este punct
de pornire aleator distribuit n mod uniform peste R
n
definit cu l i u.
Procedure ConstructGredyRandomiyed (x, f(
.
),n,h,l,u,)
S{1,...,n};
While S0 do
Min+; max-;
for i=1,...,n do
if iS then
z
i
LineSerch(x,h,i,n, f(
.
),l,u);
g
i
f(z
i
);
if min>g
i
then ming
i
;
if max<g
i
then maxg
i
;
38
end if
end for
RCL0;
for i=1,...,n do
if iS and g
i
(1-)*min+*max then
RCLRCL{i};
End if
end for
JRandomlySelectElement(RCL);
x
j
z
j
;SS\{j};
end while
return(x);
end ConstructGreedyRandomized;
Figura 2. Pseudo-codul pentru C-GRASP faza de construire.
Parametrul h care controleaz spaiul de cutare discret, este readus la 1.
Gsirea soluiei noi dup cutarea local este comparat cu cea mai bun soluie
curent n linia 7. Dac soluia nou are o valoare obiectiv mai mic dect cea mai bun
soluie curent, atunci, n linia 8, cea mai bun soluie curent este actualizat cu soluia
nou, i variabila NumIterNoImprov, care controleaz grila densitii de cutare, este
reiniializat la 0. Altfel, n linia 10, NumIterNoImprov este sporit cu una. Dac
NumIterNoImprov devine mai mare dect MaxNumIterNoImprov, grila densitii este
sporit n linia 13, unde h este njumtit i NumIterNoImprov este reiniializat la 0.
Aceasta permite ca C-GRASP s nceap cu o discretizare i o sporire a densitii
adaptabile dup dorin, n felul acesta intensificnd cutarea ntr-o mai dens discretizare
cnd o soluie bun are s fie gsit. Soluia cea mai bun gsit, peste toate iteraiile
NumTimesToRun, este reintoars.
Procedurile ConstructGreedyRandomized i LocalSearch numite din C-GRASP
sunt descrise n pseudo-coduri. Faza de construire (vedei pseudo-codul n Figura 2) ia o
39
soluie de intrare x. ncepem s permitem a schimba toate coordonatele de x. Pe rnd, n
linia 6 a pseudo-codului o linie caut sa fie executat n fiecare direcie de coordonate
desprit i de x cu alte n-1 coordonate ocupate de x la valorile lor curente. Valoarea z
i
pentru i-th coordoneaz minimizarea funciei obiectiv salvat, de asemenea ca valoarea
funciei obiectiv g
i
n liniile 6 i 7 de pseudo-cod.
Procedure LocalSearch(x, f(
.
),n,h,l,u,MaxDirToTry)
1 Improvedtrue;D0;
2 x
*
x; f
*
f(x);
3 NumDirToTrymin{3
n
-1,NumDirToTry};
4 while Improved do
5 Improvedfalse;
6 while D NumDirToTry and not Improved do
7 Generate rUnifRand(1,3
n
-1)1D;
8 DD{r};
9 dTernary
1
(r);xx
*
+h*d;
10 if lxu then
11 if f(x)<f
*
then
12 x
*
x; f
*
f(x);
13 D0;
14 Improvedtrue;
15 end if
16 end if
17 end while
18 end while
19 return(x
*
);
end LocalSerch;
40
Figura 3. Pseudo-codul pentru C-GRASP faza de cutare local.
Alegerea coordonatei n acest mod garanteaz caracterul aleatoriu n faza de
construire. Noi continum procedura de mai sus pn ce toate n coordonate au fost fixate.
La acea etap, x este returnat de la faza de construire.
Faza cutrii locale cu pseudo-cod este artat n figura 3. Nu folosim
gradientele n C-GRASP deoarece gradientul nu este eficient calculabil pentru toate
funciie. De la o intrare, un punct dat xR
n
, algoritmul de cutare local genereaz un set
de instruciuni i determin direcia, n cazul cnd, valoarea funciei de optimizare se
mbuntete.
Pentru o problem n dou dimensiuni (i cu uurin generalizat la n
dimensiuni), i pentru un punct dat x, obinem direciile posibile pentru a fi analizate n
algoritmul de cutrii locale. Ele sunt urmtoarele {(1,0),(0,1),(-1,0),(0,-1),(1,1),(-1,1),
(1,-1),(-1,-1)}. n general n spaiul R
n
, fiecare direcie va fi un vector de lungimea n,
fiecare component fiind egal cu una dintre valorile {-1,0,1}. Este uor de vzut c sunt
n total 3
n
-1 direcii posibile ( noi excludem cazul cnd toate direciile vectorului sunt
nule).
Tabelul 1. Tripletele (n=2)
i Ternary(i) Ternary
1
(i) i Ternary(i) Ternary
1
(i)
1 01 {0,1}
3 10 {1,0}
5 12 {1,-1}
7 21 {-1,1}
2 02 {0,-1}
4 11 {1,1}
6 20 {-1,0}
8 22 {-1,-1}
Tabelul 2. C-GRASP valoarea parametrilor
Parametri Valoarea Parametri Valoarea
0.4
MaxDirToTry 30
MaxNumIterNoImprov 20
h(valoarea start) 1
MaxIters 200
NumTimesToRun 20
41
Pornind la punct x*, n ciclul de la linia 6 la linia 17, noi construim ascendent
direciile distincte aleatorii. n linia 9, direcia d este construit, i punctul de test x =
x*+h*d este calculat, unde h este parametrul definit mai devreme care controleaz
densitatea de discretizare. Dac punctul de test x este realizabil i este mai bun decat x*,
atunci x* este aezat la x i se restarteaz procesul cu x* ca pornire a soluiei. Este
important de notat c alegerea setului de direcie poate schimba de fiecare dat acest
proces , precum i ordinea n care aceste direcii sunt luate n consideraie. Cnd noi
gsim un punct x* cu f( x*) f(x*+h*d) pentru fiecare din NumDirToTry sunt alese
direciile d, noi declarm x* s fie optim local i returnat.
4.3. Concluzii
n acest capitol, noi am prezentat o nou euristic numit GRASP continu, sau
C-GRASP, pentru optimizarea global continu. Dup cum se vede n Seciunea 2,
algoritmul este uor de descris i implementat. n plus, nu se folosete de nici o derivat,
de nici o informaie suplimentar, fiind o metod de rezolvare ideal pentru probleme de
tipul cutiei negre. Poate fi artat c pentru un set de funcii testate standard, C-GRASP
euristic aproape ntotdeauna se concentreaz la optimul global n foarte scurt timp.
42
CAPITOLUL V
APLICAII
5.1. Repartizarea investiiilor capitale
Programarea dinamic este i o metod de calcul pentru rezolvarea
problemelor de optimizare de o anumit structur. Problema dat cu n variabile se
prezint ca un proces cu mai muli pai de luare a deciziilor. La fiecare pas se
determin extremul funciei de o singur variabil.
Cunoaterea metodei programrii dinamice e cel mai bine de nceput cu
analiza problemei neliniare de repartizare a resurselor la ntreprinderile unei
asociaii sau ramurii. Putem considera c e vorba de repartizarea investiiilor
capitale.
Fie c sunt indicate n puncte unde trebuiesc construite sau reconstruite
ntreprinderile aceleiai ramuri, pentru aceasta fiind alocat suma de b lei. Vom
nota prin f
j
( x
j
) creterea capacitii sau venitul la ntreprinderea cu numrul j,
dac ea va primi x
j
lei din investiiile capitale. Trebuie gsit aa un mod de
repartizare a investiiilor capitale (x
1
, ,x
2
,...,x
n
) la ntreprinderi, care maximizeaz
suma veniturilor:
z = f(x
1
) + f(x
2
) + ... + f(x
n
),
pstreaz suma investiiilor capitale
x
1
+x
2
+...+x
n
=b
i vom considera c variabilele x
j
pot lua doar valori ntregi
x
j
n j N , 1 ,
.
Funciile f
j
(x
j
) le considerm date, dar observm c determinarea lor este o
problem economic complicat.
Vom folosi metoda programrii dinamice la rezolvarea acestei probleme.
Introducem parametrul strii i determinm funcia strii. Pentru parametrul strii
primim suma de lei, alocat pentru cteva ntreprinderi, iar funcia strii F
k
() o
43
determinm ca venitul maximal al primelor k ntreprinderi, dac ele mpreun
primesc suma de lei. Parametrul poate lua valori de la 0 la b. Dac din lei
ntreprinderea k primete x
k
lei, atunci restul - x
k
trebuie s fie repartizai
ntreprinderilor de la prima pn la (k-1), aa nct s primeasc venitul maximal F
k-1
( -
x
k
). Atunci venitul a k ntreprinderi va fi egal cu
f
k
( x
k
) + F
k - 1
(-x
k
)
Trebuie de ales pentru x
k
o valoare ntre 0 i nct suma aceasta s fie maxim i
ajungem la forma recurent
( ) ( ) ( ) { }
k k k k
x
k
x F x f F
k
+


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, j=1,...,n, N- mulimea numerelor naturale. Pentru m

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.

You might also like