Sei sulla pagina 1di 6

04/02/12

Problema dello zaino - Wikipedia

Problema dello zaino


Da Wikipedia, l'enciclopedia hbera.
TIProblema dello zaino, detto anche Knapsack problem, un

problema di ottirnizzazione combnatoria posto nel modo


seguente: sia dato uno zaino che possa sopportare un determinato peso. Siano dati inoltre N oggetti, ognuno dei quali caratterizzato da un peso e un valore. TIproblema si propone di scegliere quali di questi oggetti mettere nello zaino per ottenere il maggiore valore senza eccedere nel peso sostenibile dallo zaino stesso.
Indice

In questo caso, la soluzione di mettere

1 Introduzione 2 Soluzione problema dello zaino senza limiti 3 Soluzione problema dello zaino 0-1
4

nello zaino tre scatole gialle e tre grigie

Algoritmo Greedy 5 Rilassamento continuo 6 Bibliografia

Introduzione
Il problema espresso in maniera pi formale diventa: ognuno degli N oggetti possiede un peso wi e un valore Ci; si indica con W il peso massimo sopportabile dallo zaino; la possibilit che un oggetto venga inserito o meno nello zaino espressa dalle variabili intere Xi. La funzione obiettivo :

rnax Z
I vincoli:

L
i=l

.l'-l

Ci . X'i

L ui, .
i=l
-t>

}\l

Xi

<

H/

In base al tipo di variabili Xi si ha poi la distinzione in:

04/02/12

Problema dello zaino - Wikipedia

Xi

= {O,l}

Vi = 1, ..., N
(ZArNO

ogni oggetto pu esserci o non esserci senza ripetizioni;


problema dello zaino con limiti O - i')

z, < b; Vi = 1, ... , l'l


ogni oggetto non pu apparire nello zaino pi di un certo mnnero di volte;
problema dello zaino senza limiti
Xi

EN

Vi = 1, ... , N

ogni oggetto pu apparire nello zaino un numero arbitrario di volte.

Il problema dello zaino risolto spesso usando la progrannnazione dinamica, anche se noto che tale metodo abbia un tempo di risoluzione non lineare per questo genere di problema. Il problema generale dello zaino un problema NP-difficile, e questo ha indirizzato la ricerca verso il problema Subset-sum come base per il sistema di crittografia a chiave pubblica, come Merkle-Helhnan. Questi tentativi usavano tipicamente alcuni gruppi oltre agli interi Merkle- Hellman e altri algoritmi similivennero presto abbandonati, in quanto i sottoproblemi di sorrnna che producevano erano risolvioili da algoritmi lineari La versione decisionale di questo problema NP-completa e infatti uno dei 21 problemi NP-completi di Karp. Il problema dello zaino, nella versione di ottimizzazione, di fondamentale importanza in quanto, per molte istanze di comune applicazione, pu essere risolto in maniera soddisfacente; per questo problema, infatti, sono dispombili buone euristiche e buoni rilassamenti. Un algoritmo di emnrerazione implicita (ad esempio Branch and bound) normahnente non impiega molto tempo per risolverlo.

Soluzione problema dello zaino senza limiti


Viene descritta di seguito la soluzione per ilproblema dello zaino senza limiti. Si indichino con Cl, ... , Cn i guadagni offerti dagli oggetti, e con wl, ... ,11..'n i pesi di ogni oggetto. Si desidera massimizzare il guadagno complessivo rispettando il vincolo che il peso complessivo sia inferiore al peso massimo consentito W Ora, si indichi con A( i) il valore massimo di guadagno che si pu ottenere rispettando il vincolo che il peso complessivo sia minore od uguale ad soluzione del nostro problema. Si definiscono

i. Owiamente i

< Hl, e A( W) sar la

gliA(i)

ricorsivamente come di seguito:

A(O)

= 0,

A(1.) = max{Cj

+ ..4(1. -

Wj)IWj

< i}.
A(O)
fino a A(

Qui si considera zero il massimo dell'insieme vuoto. Se si tabulano i risultati a partire da ottiene la soluzione. Dato che il calcolo di ogniA(i)

W')

si

implica l'esame di n oggetti (che sono tutti stati calcolati in

04/02/12

Problema dello zaino - Wil<.ipedia

O(nW).
Ci non contraddice il fatto che il problema dello zaino NP-completo, dato che

W, al contrario

di n, non

polinomiale rispetto alla lunghezza dell'input del problema. Tale lunghezza proporzionale al numero di bit in e non a W stesso.

W,

Soluzione problema dello zaino 0-1


Come sopra, si indicano i costi con Cl, ...
, C'n

e i corrispondenti valori con Vl, ...

, Vn.

Si vuole una

massimizzare il valore totale soggetto al vincolo che il costo totale deve essere minore di

C. Si definisce

f.mzionericorsiva A( i J) che sia il massimo valore che pu essere ottenuto con un peso minore o uguale a j utilizzando fino a i oggetti. Si pu definire A(iJ) in modo ricorsivo come di seguito:

A(OJ)

0,

A(i,O) = 0, A(iJ) = A(i - lJ) se ci> j, A(iJ) = max {A(i - lJ),A(i - lJ - Ci)

+ Vi}

se

Ci

< j.

La soluzione pu essere allora trovata calcolando A( n,e). Per farlo in modo efficiente si pu usare una tabella che memorizzi i calcoli fatti precedentemente. Questa soluzione impiegher quindi un tempo proporzionale a

O(ne) e uno spazio anch'esso proporzionale a O(ne), anche se con alcune piccole modifiche si pu ridurre
lo spazio utilizzato a O( e).

Algoritmo Greedy
Martello e Toth (1990) proposero un'euristica greedy per risolvere il problema dello zaino. La loro versione ordina gli oggetti in ordine decrescente di peso per inserirli nello zaino fino all'esaurimento dello spazio dispombile. Se k il massimo mnnero di oggetti che possono essere inseriti nello zaino, l'algoritmo greedy garantisce che ne siano inseriti nello zaino almeno k.

2
Sono possibili molte variazioni di questo algoritmo, la pi efficiente prevede di ordinare gli elementi in base al loro costo unitario, vale a dire
Ci
'HI_

ed inserirli in ordine decrescente (euristica CUD).

u.z

bene far notare come questi algoritmi siano euristici: essi, quindi, non garantiscono l'ottimalit della soluzione ma sono in grado di fornire una ''buona'' soluzione in tempo ragionevole; spesso questo tipo di algoritmi viene utilizzato in approcci di emnnerazione implicita come gli algoritmi Branch and bound.

04102112

Problema dello zamo - \N\K\ped\a

Si dimostra che il rilassamento continuo del problema dello zaino equivalente all'euristica CUD quando si permettono valori in [O, 1] delle variabili xi (in particolare una sola variabile avr valore non binario). In questo modo euristica e rilassamento possono essere risolti simultaneamente in maniera efficiente.

Bibliografia
Michael R Garey; David S. Johnson, Computers and Intractability: A Guide to the Theory of NPCompleteness, W.H. Freeman, 1979. ISBN 0716710455 Silvano Martello; Paolo Toth, Knapsack Problems: Algorithms and Computer Implementations, Wiley, 1990. ISBN 0471924202 Categorie: Algoritmi

I Ricerca

operativa

I [altre]

-_._--_ ... ----_ ....._- Ultima modifica per la pagina: 03:05,30 gen 2012. Il testo disponibile secondo la licenza Creative Commons Attnbuzione-Condividi allo stesso modo; possono applicarsi condizioni ulteriori Vedi le condizioni d'uso per i dettagli. Wikipedia un marchio registrato della Wikimedia F oundation, Inc.

ALGORITMI II (a.a. 2006-2007)


Esercizio 1

Esonero del 14 GIUGNO 2007

Si dispone di uno ZAINO di capacit e in cui possibile inserire oggetti di n tipi diversi. Ciascun oggetto caratterizzato da un valore v ed un peso p, diversi per ogni oggetto. possibile inserire nello zaino quante copie si vuole di ciascun oggetto a patto che il peso complessivo non superi la capacit dello zaino. Il valore dello zaino dato dalla somma dei valori degli oggetti inseriti. Si vuole individuare quanti oggetti di ciascun tipo inserire in modo da ottenere lo zaino di valore massimo Esempio. Supponiamo che n = 3, C = 18 e i valori ed i pesi dei tre tipi di oggetto sono specificati nella seguente tabella: oggetto 1 oggetto 2 peso valore
9 6 5

oggetto 3 4
3

In tal caso la combinazione di oggetti che massimizza il valore dello zaino quella che prevede zero oggetti di tipo 1, due oggetti di tipo 2 e due oggetti di tipo 3. Tale combinazione comporta un peso dello zaino pari a O x 9 + 2 x 5 + 2 x 4 = 18 ed un valore dello zaino pari a O x 6 + 2 x 4 + 2 x 3 = 14. Dati i pesi PI, ... Pn e i valori
1. (max 10 punti)
VI, ... Vn

degli oggetti e la capacit

e dello

zaino:

Proporre un algoritmo che in tempo O(ne) calcoli il valore massimo ottenibile tra gli inserimenti possibili nello zaino. (sull'istanza dell'esempio deve calcolare 14).

2. (max 10 punti) Modificare l'algoritmo proposto al punto l in modo da avere in output gli oggetti da inserire per avere lo zaino di valore massimo. La modifica deve avere costo additivo O( e). (sull'istanza dell'esempio deve produrre il vettore ~)
Soluzione Esercizio 1

Si mantenga un vettore T di dimensione

e tale

che

T[i]

valore massimo che si pu ottenere con uno zaino di capacit i.

La soluzione al problema originario il valore T[e]. Per costruire T si pu utilizzare la seguente regola:

E' facile calcolare i valori del vettore T spendendo tempo O(n) su ogni cella e quindi ottenendo un tempo di esecuzione O(n . C). Lo pseudo-codice il seguente: VALORE-ZAINO: INPUT l'intero e i pesi PI, ... Pn e i valori VI, ... Vn OUTPUT il valore dell'inserimento di valore massimo FOR i = O TO e DO

T[i]

t--

O
t--

FOR j = 1 TO n DO IF Pj ::; i AND T[i - Pj] + Vj > T[i] THEN T[i] ENDFOR ENDFOR OUTPUT T[e]

T[i -

Pj]

+ Vj

Dati i valori del vettore T, gli oggetti da inserire nello zaino per ottenere il valore T[ C] possono essere facilmente individuati in tempo O(C) procedendo dall'ultima verso la prima cella del vettore e spendendo tempo 0(1) per cella. OGGETTI: INPUT l'intero C, i pesi PI, .. -P. i valori VI, ... Vn e il vettore T OUTPUT l'array SOL (di dimensione n) tale che SOL[i] il numero di oggetti di tipo i presi dalla soluzione capacita t- C FaR i = l TO n DO SOL[i] t- O WHILE capacita> Pi AND T[capacita - Pi] = T[capacita] - Vi DO
SOL

[i]

tt-

SOL[i]

+l

capacita ENDWHILE ENDFOR RETURN SOL

capacita - Pi