Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1 Introduzione 2 Soluzione problema dello zaino senza limiti 3 Soluzione problema dello zaino 0-1
4
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/
04/02/12
Xi
= {O,l}
Vi = 1, ..., N
(ZArNO
EN
Vi = 1, ... , N
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.
i. Owiamente i
gliA(i)
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
04/02/12
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,
, 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_
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
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.
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
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
e tale
che
T[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 - Pi