Sunteți pe pagina 1din 5

Problema rucsacului

Problema rucsacului este o problemă fundamentală de optimizare combinatorială. În


forma sa cea mai generală, problema poate fi formulată ı̂n felul următor:
Dată fiind o mulţime de elemente, fiecare cu o greutate şi o valoare, să se determine
numărul din fiecare element al mulţimii care poate fi inclus ı̂ntr-o colect, ie, astfel ı̂ncât greu-
tatea totală să fie mai mică sau egală cu o anumită limită şi valoarea totală să fie cât mai
mare.

Figure 1: Exemplu de problemă a rucsacului unidimensională (cu o singură constrângere):


care cutii ar trebui să fie alese pentru a maximiza valoarea cutiilor alese ı̂n timp ce păstrează
ı̂ncă greutatea totală sub 15 kg

Soluţie: dacă este disponibil orice număr din fiecare cutie, atunci trei cutii galbene şi trei
cutii gri; dacă doar cele prezentate sunt disponibile, atunci toate, mai puţin cutia verde.

1 Aplicaţii

O aplicaţie timpurie a problemei rucsacului a fost ı̂n construcţia şi notarea testelor ı̂n care
cei care dau testul au de ales la care ı̂ntrebări să răspundă. Pentru exemple mici, procesul
este destul de simplu. De exemplu, dacă un examen conţine 12 ı̂ntrebări, fiecare ı̂n valoare de
10 puncte, examinaţii au nevoie să răspundă la doar 10 ı̂ntrebări pentru a obţine punctajul
maxim de 100 de puncte. Cu toate acestea, pe teste cu o distribuţie eterogenă a valorilor
ı̂ntrebărilor, de exemplu, diferite ı̂ntrebări au punctaje diferite, este mult mai dificil să se facă
o alegere. Feuerman şi Weiss au propus un sistem ı̂n care elevii primesc un test eterogen cu
un total de 125 de puncte posibile. Elevii sunt rugaţi să răspundă la toate ı̂ntrebările după
cum pot ei mai bine. Dintre posibilele submulţimi de ı̂ntrebări al căror punctaj total ajunge
la 100, un algoritm de problema rucsacului ar determina care submulţime oferă fiecărui elev
cel mai mare scor posibil.
O altă aplicaţie este ı̂n construirea portofoliului financiar: se consideră un set de “operaţiuni
financiare” (acţiuni), fiecare fiind caracterizată printr-un cost şi un profit; se doreşte selecţia
acţiunilor al căror cost total nu depăşeşte suma disponibilă pentru investiţii şi pentru care
profitul este maxim.
Alte aplicaţii ale problemei rucsacului apar ı̂n lumea reală ı̂n procesele de luare a decizi-
ilor ı̂ntr-o varietate de domenii, cum ar fi găsirea unei metode de a tăia materia primă cu
risipă minimă, probleme de ı̂mpachetare, selecţia de investiţii şi portofolii, ı̂n sistemele de
criptografie cu chei publice, cum ar fi criptosistemul Merkle-Hellman şi alte criptosisteme.

2 Modele matematice
2.1 Problema rucsacului 0-1
Cea mai frecventă versiune a problemei rucsacului este problema rucsacului 0-1, care
restricţionează numărul xi de exemplare din fiecare tip de articol la zero sau unu. Având
ı̂n vedere o mulţime de n elemente, numerotate de la 1 la n, fiecare cu o greutate wi şi o
valoare vi , ı̂mpreună cu o capacitate maximă de greutate W , modelul matematic al problemei
rucsacului 0-1 este:

n
X
max vi xi
i=1
Xn
wi x i ≤ W (1)
i=1
xi ∈ {0, 1}, ∀ i ∈ {1, ..., n}.

Modelul matematic este bazat pe programarea liniară binară.

2.2 Problema rucsacului mărginită


În acest caz se elimină restricţia ca fiecare element să fie luat o singură dată, dar limitează
numărul de exemplare din fiecare tip de articol la o valoare maximă ı̂ntreagă nenegativă.
Modelul matematic al problemei rucsacului varianta mărginită este:

n
X
max vi xi
i=1
Xn
wi x i ≤ W (2)
i=1
0 ≤ xi ≤ c, ∀ i ∈ {1, ..., n}.

Modelul matematic este bazat pe programarea liniară ı̂n numere ı̂ntregi.

2.3 Problema rucsacului nemărginită


În acest caz nu pune nicio limită superioară la numărul de exemplare din fiecare tip de produs
şi poate fi formulată ca mai sus, cu excepţia că singura restricţie asupra lui este că acesta
este un număr ı̂ntreg nenegativ.

2
n
X
max vi xi
i=1
Xn
wi xi ≤ W (3)
i=1
xi ∈ Z+ , ∀ i ∈ {1, ..., n}.
Modelul matematic este bazat pe programarea liniară ı̂n numere ı̂ntregi.
Problema rucsacului este interesantă din mai multe motive:

• Forma de problemă a deciziei a problemei rucsacului (Se poate obţine o valoare de cel
puţin V fără a depăşi greutatea W ?) este NP-completă, adică nu se ştie nici un algoritm
care să fie atât corect cât şi rapid (ı̂n timp polinomial) ı̂n toate cazurile.
• Deşi problema deciziei este NP-completă, problema optimizării este NP-hard, rezolvarea
ei fiind cel puţin la fel de dificilă ca problema deciziei, şi nu se cunoaşte un algoritm ı̂n
timp polinomial care să poată spune dacă o soluţie dată este optimă (ceea ce ar ı̂nsemna
că nu există nicio soluţie cu V mai mare, rezolvând astfel problema deciziei, care este
NP-completă).
• Există un algoritm de rezolvare a problemei rucsacului ı̂n timp pseudo-polinomial ce
foloseşte programarea dinamică.
• Există un algorithm de aproximare ı̂n timp polinomial complet, care foloseşte un algo-
ritm pseudo-polinomial ca subrutină.
• Multe cazuri care apar ı̂n practică, şi ”instanţe aleatoare” din unele distribuţii, pot
totuşi să fie rezolvate exact.

Definiţia 1. În teoria computabilităţii şi teoria complexităţii computaţionale, o problemă


de decizie este o problemă care poate fi pusă ca o ı̂ntrebare da-nu a valorilor de intrare.

Un exemplu de problemă de decizie este de a decide dacă un număr natural dat este prim.
O altă problemă este ”date fiind două numere x şi y, x divide y?”. Răspunsul este ”da” sau
”nu”, ı̂n funcţie de valorile x şi y.
Definiţia 2. În teoria complexităţii computaţionale, un algoritm numeric rulează ı̂n timp
pseudo-polinomial dacă timpul său de rulare este un polinom ı̂n valoarea numerică a intrării
(cel mai mare număr ı̂ntreg prezent la intrare) - dar nu neapărat ı̂n lungimea intrării (numărul
biţilor necesari pentru a-l reprezenta), ceea ce este cazul algoritmilor de timp polinomial.
În general, valoarea numerică a intrării este exponenţială ı̂n lungimea de intrare, motiv
pentru care un algoritm de timp pseudo-polinomial nu rulează neapărat ı̂n timp polinomial
ı̂n raport cu lungimea datelor de intrare.
Să notăm o instanţă a unei probleme cu I. Fie OP T (I) valoarea soluţiei optime pentru
acea instanţă (care există, dar pe care nu ştim s-o calculăm eficient) şi fie A(I) valoarea
calculată de algoritmul nostru de aproximare.

Vom ilustra ı̂n cele ce urmează două rezultate diferite din teoria algoritmilor de aproxi-
mare:

3
Figure 2: O problemă de decizie are doar două ieşiri (outputs) posibile (da sau nu) pe orice
intrare (input).

1. algoritmi de aproximare relativă a soluţiei;

2. algoritmi de aproximare absolută a soluţiei.

Definiţia 3. Numim aproximaţia absolută dacă există un număr K, independent de


instanţa I, care are proprietatea că:

|OP T (I) − A(I)| < K.


Definiţia 4. Numim aproximaţia relativă dacă există un număr R (numit performanţă)
astfel ca pentru orice instanţă I avem:

A(I)
< R.
OP T (I)

Dacă problema caută un maximum, atunci fracţia din definiţie trebuie inversată.

Exerciţiu:
Considerăm problema rucsacului cu un volum W = 12 şi 6 obiecte (articole) care pot fi
selectate.
Table 1: Valorile şi greutăţile obiectelor

obiectul 1 2 3 4 5 6
valoarea 2 3 7 5 11 6
greutatea 2 2 4 3 6 5

Să se dea o soluţie a problemei folosind algoritmul greedy.

4
Algoritmi greedy

• Un algoritm greedy construie cste soluţia pas cu pas. Iniţial, mulţimea candidaţilor
selectaţi este vidă. La fiecare pas, ı̂ncercăm să adăugăm acestei mulţimi cel mai
promiţător candidat, conform funcţiei de selecţie.

• Dacă, după o astfel de adăugare, muţimea de candidaţi selectaţi nu mai este fez-
abilă, eliminăm ultimul candidat adăugat; acesta nu va mai fi niciodată considerat.
Dacă, după adăugare, mulţimea de candidaţi este fezabilă, ultimul candidat adăugat
va rămâne de acum ı̂ncolo ı̂n ea.

• De fiecare dată când lărgim mulţimea candidaţilor selectaţi, verificăm dacă această
mulţime nu constituie o soluţie posibilă a problemei noastre.

Rezolvare
Criteriu de selecţie:

1. În ordinea crescătoare a greutăţii, wi (selectează cât mai multe obiecte).

2. În ordinea descrescătoare a valorii, vi (selectează cele mai valoroase obiecte).

3. În ordinea descrescătoare a profitului relativ, vi /wi (selectează obiectele mici şi val-
oroase).

BIBLIOGRAFIE

1. P.C. Pop, Modelare şi Programare Matematică. Teorie şi Aplicaţii, Editura Univer-
sităţii de Nord Baia Mare, 2009.

2. Wikipedia contributors. Kanpsack problem. Wikipedia, The Free Encyclopedia,


https://en.wikipedia.org/wiki/Knapsack problem

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