Esercizi · Problemi di zaino¶
Esercizi · Capitolo 2 · ogni soluzione si apre con un clic · Capitolo 2: Problemi di zaino · Eserciziario, volume 1 (PDF)
Esercizio 2.1: Ammissibilità, valore e bound (KP)
Consideriamo l'istanza di zaino con capacità \(c=12\) e \(n=5\) oggetti, \(\mathscr{I}=\{1,\dots,5\}\), con i seguenti profitti e pesi:
Domande
-
Verificare le due ipotesi sui dati del KP.
-
Per ciascuno dei sottoinsiemi \(S_1=\{1,2,5\}\), \(S_2=\{2,4\}\), \(S_3=\{1,2,3\}\), calcolare il peso totale, stabilire se è ammissibile e, in caso affermativo, darne il profitto.
-
Calcolare il bound di cardinalità \(\bar k\) e il bound duale che ne deriva.
-
Calcolare il bound duale del rilassamento continuo (gli oggetti si possono prendere in modo frazionario, in ordine di efficienza non crescente) e arrotondarlo.
-
Trovare una soluzione ottima elencando i sottoinsiemi ammissibili, e calcolare il gap fra il miglior bound duale e \(z(I)\).
Soluzione
-
Il peso totale è \(3+4+5+6+8=26>12\), quindi non tutti gli oggetti entrano; l'oggetto più pesante pesa \(8\le 12\), quindi ogni oggetto entra da solo. Entrambe le ipotesi valgono.
-
-
\(S_1\): peso \(3+4+8=15>12\), non ammissibile;
-
\(S_2\): peso \(4+6=10\le 12\), ammissibile, profitto \(12+13=25\);
-
\(S_3\): peso \(3+4+5=12\le 12\), ammissibile, profitto \(6+12+5=23\);
-
-
I pesi in ordine non decrescente sono \(3, 4, 5, 6, 8\): i \(3\) oggetti più leggeri pesano \(3+4+5=12\le 12\), i \(4\) più leggeri pesano \(18>12\). Quindi \(\bar k=3\): un sottoinsieme ammissibile ha al più \(3\) oggetti, e i \(3\) profitti più grandi danno
\[ \mathrm{UB}=13+12+8=33. \] -
Le efficienze sono \(\frac{6}{3}=2,\ \frac{12}{4}=3,\ \frac{5}{5}=1,\ \frac{13}{6},\ \frac{8}{8}=1\), quindi l'ordine è \(2,4,1,3,5\). Gli oggetti \(2, 4\) pesano \(10\), e la frazione \(\frac{2}{3}\) dell'oggetto \(1\) riempie la capacità residua \(2\):
\[ \mathrm{UB}=12+13+\frac{2}{3}\cdot 6=29. \]I profitti sono interi, quindi \(\mathrm{UB}=\lfloor 29\rfloor=29\); è più forte del bound di cardinalità.
-
I sottoinsiemi ammissibili sono \(15\):
\(S\) peso profitto \(S\) peso profitto \(\emptyset\) \(0\) \(0\) \(\{1,4\}\) \(9\) \(19\) \(\{1\}\) \(3\) \(6\) \(\{1,5\}\) \(11\) \(14\) \(\{2\}\) \(4\) \(12\) \(\{2,3\}\) \(9\) \(17\) \(\{3\}\) \(5\) \(5\) \(\{2,4\}\) \(10\) \(\mathbf{25}\) \(\{4\}\) \(6\) \(13\) \(\{2,5\}\) \(12\) \(20\) \(\{5\}\) \(8\) \(8\) \(\{3,4\}\) \(11\) \(18\) \(\{1,2\}\) \(7\) \(18\) \(\{1,2,3\}\) \(12\) \(23\) \(\{1,3\}\) \(8\) \(11\) La soluzione ottima è \(\tilde S=\{2,4\}\), l'unica con profitto \(z(I)=25\):
Il gap fra il bound continuo e l'ottimo è \(29-25=4\): il bound da solo non certifica l'ottimo, l'enumerazione sì.
La soluzione ottima è \(\tilde S=\{2,4\}\) con \(z(I)=25\); i bound duali sono \(33\) (cardinalità) e \(29\) (rilassamento continuo).
Esercizio 2.2: Il subset sum e la sua soluzione come KP (SSP)
Consideriamo l'istanza di subset sum con \(n=6\) oggetti e i pesi
con il valore obiettivo \(c=15\).
Domande
-
Verificare le due ipotesi del SSP.
-
Stabilire se il sottoinsieme \(\{1,4,6\}\) è ammissibile, e se lo è il sottoinsieme \(\{3,4,6\}\).
-
Trovare tutti i sottoinsiemi ammissibili per il valore obiettivo \(c=15\), con una breve giustificazione.
-
Ora il valore obiettivo è \(c=16\). Risolvere l'istanza come un KP con \(p_j=w_j\) e dare la risposta al SSP.
Soluzione
-
Il peso totale è \(47\ge 15\) e l'oggetto più pesante pesa \(15\le 15\): entrambe le ipotesi valgono.
-
\(w_1+w_4+w_6=5+6+4=15=15\): ammissibile. \(w_3+w_4+w_6=3+6+4=13\neq 15\): non ammissibile.
-
Esaminiamo i sottoinsiemi in base al loro oggetto più pesante, nell'ordine \(5, 2, 4, 1, 6, 3\) di peso non crescente.
-
L'oggetto \(5\) (peso \(15\)) raggiunge da solo il valore obiettivo: \(\{5\}\).
-
L'oggetto \(2\) (peso \(14\)) lascia \(1\), e nessun oggetto pesa \(1\).
-
Senza gli oggetti \(5\) e \(2\) i pesi restanti \(6, 5, 4, 3\) sommano a \(18\): un loro sottoinsieme pesa \(15\) esattamente quando gli oggetti esclusi pesano \(3\), e l'unica scelta di questo tipo è escludere l'oggetto \(3\). Si ottiene \(\{1,4,6\}\): \(5+6+4=15\).
I sottoinsiemi ammissibili sono \(\{5\}\) e \(\{1,4,6\}\): la risposta è sì.
-
-
Con \(p_j=w_j\) il KP massimizza il peso totale di un sottoinsieme di peso al più \(16\). Nessun sottoinsieme pesa \(16\):
-
con l'oggetto \(5\) o l'oggetto \(2\) servono ancora \(1\) o \(2\), e nessun oggetto ha questo peso;
-
senza di essi, gli oggetti esclusi dovrebbero pesare \(18-16=2\), meno del peso minimo \(3\).
I sottoinsiemi migliori pesano \(z=15\), per esempio \(\{5\}\). Poiché \(z=15<16\), la risposta al SSP con valore obiettivo \(16\) è no.
-
Valore obiettivo \(15\): sì, con \(\{5\}\) e \(\{1,4,6\}\). Valore obiettivo \(16\): no, il KP con \(p_j=w_j\) raggiunge al più \(15\).
Esercizio 2.3: Copie degli oggetti (BKP e UKP)
Consideriamo \(n=3\) oggetti con i seguenti profitti, pesi e copie disponibili, e uno zaino di capacità \(c=10\):
Domande
-
Verificare le ipotesi del BKP e scrivere l'insieme esteso degli oggetti \(\hat{\mathscr{I}}\).
-
Una soluzione del BKP è il vettore \((x_1,x_2,x_3)\) dei numeri di copie, con \(0\le x_j\le b_j\). Calcolare quanti sono questi vettori. Stabilire se \((1,1,1)\) è ammissibile, e se lo è \((0,2,1)\).
-
Trovare una soluzione ottima del BKP per enumerazione, con una breve giustificazione.
-
Ora gli oggetti sono disponibili in un numero illimitato di copie (UKP). Calcolare i massimi numeri ammissibili di copie \(\hat b_j\), il numero di vettori candidati e una soluzione ottima.
Soluzione
-
\(\sum_j b_j w_j=1\cdot 3+2\cdot 5+2\cdot 2=17>10\); ogni oggetto entra (\(w_j\le 10\)) e così tutte le sue copie: \(b_jw_j=3, 10, 4\le 10\). L'insieme esteso ha \(\sum_j b_j=5\) copie:
\[ \hat{\mathscr{I}}=\{(1,1),(2,1),(2,2),(3,1),(3,2)\}. \] -
I vettori sono \(\prod_j (b_j+1)=2\cdot 3\cdot 3=18\), di cui \(12\) ammissibili. Il vettore \((1,1,1)\) pesa \(10\le 10\), ammissibile, profitto \(30\); il vettore \((0,2,1)\) pesa \(12\), non ammissibile.
-
L'oggetto \(3\) ha l'efficienza massima, \(\frac{13}{2}\), e l'oggetto \(2\) la seconda, \(\frac{13}{5}\). Prendere tutte le copie degli oggetti \(3\) e \(2\) peserebbe \(14>10\). Con \(x_3=2\) (peso \(4\)) la capacità residua \(6\) contiene una copia dell'oggetto \(2\), e l'ultima \(1\) unità non contiene nulla. L'enumerazione dei \(12\) vettori ammissibili conferma che \(\tilde x=(0,1,2)\), di peso \(9\), è l'unica soluzione ottima, con \(z(I)=39\).
-
\(\hat b_j=\lfloor c/w_j\rfloor\) dà \(\hat b=(3,2,5)\), e i vettori candidati sono \(\prod_j(\hat b_j+1)=4\cdot 3\cdot 6=72\), di cui \(20\) ammissibili. L'oggetto \(3\) è il più efficiente e il suo peso \(2\) divide \(c=10\): la soluzione \(\tilde x=(0,0,5)\) riempie lo zaino con l'oggetto più efficiente, quindi nessuna soluzione ha un profitto maggiore di \(\frac{13}{2}\cdot 10=65\). È l'unica soluzione ottima, \(z(I)=65\).
BKP: \(\tilde x=(0,1,2)\), \(z(I)=39\). UKP: \(\tilde x=(0,0,5)\), \(z(I)=65\). Più copie possono solo aumentare il valore ottimo.
Esercizio 2.4: Due zaini (MKP)
Consideriamo l'istanza di zaini multipli con \(m=2\) zaini di capacità \(c_1=10\) e \(c_2=6\), e \(n=5\) oggetti con i seguenti profitti e pesi:
Domande
-
Stabilire se si possono inserire tutti gli oggetti. Calcolare quante sono le soluzioni candidate, se ogni oggetto va in uno degli zaini o in nessuno.
-
Stabilire se la soluzione \(S_1=\{1,2,3\}\), \(S_2=\{4,5\}\) è ammissibile e calcolarne il profitto.
-
Ogni soluzione ammissibile dell'MKP è anche una soluzione ammissibile di un KP con capacità \(c_1+c_2=16\). Usare questo fatto per calcolare un bound duale.
-
Trovare una soluzione ottima dell'MKP.
Soluzione
-
Il peso totale è \(18>c_1+c_2=16\): non si possono inserire tutti gli oggetti. Ogni oggetto ha \(m+1=3\) scelte, quindi le soluzioni candidate sono \(3^5=243\); \(100\) di esse sono ammissibili.
-
\(S_1\) pesa \(2+5+2=9\le 10\) e \(S_2\) pesa \(6+3=9>6\): la soluzione non è ammissibile.
-
Se \(S_1,S_2\) è ammissibile per l'MKP, l'unione \(S_1\cup S_2\) pesa al più \(c_1+c_2=16\), quindi il suo profitto è al più il valore ottimo del KP con capacità \(16\). Il KP ha la soluzione ottima \(\{2,3,4,5\}\), di peso \(16\) e profitto \(40\): \(\mathrm{UB}=40\).
-
Gli oggetti \(\{2,3,4,5\}\) della soluzione del KP si possono dividere fra i due zaini: \(S_1=\{2,3,5\}\) pesa \(10\le 10\) e \(S_2=\{4\}\) pesa \(6\le 6\). Il suo profitto \(40\) raggiunge il bound duale, quindi è ottima: \(z(I)=40\). L'enumerazione delle \(100\) soluzioni ammissibili mostra che è l'unica ottima.
La soluzione ottima mette \(\{2,3,5\}\) nello zaino \(1\) e \(\{4\}\) nello zaino \(2\), con \(z(I)=40\), uguale al bound duale del KP con capacità \(c_1+c_2\).
Esercizio 2.5: Un oggetto per classe (MCKP)
Consideriamo l'istanza di zaino a scelta multipla con capacità \(c=16\) e \(n=7\) oggetti, partizionati nelle classi \(\mathscr{J}_1=\{1,2\}\), \(\mathscr{J}_2=\{3,4,5\}\), \(\mathscr{J}_3=\{6,7\}\), con i seguenti profitti e pesi:
Domande
-
Verificare la condizione di ammissibilità \(\sum_h \min_{j\in\mathscr{J}_h} w_j\le c\) delle ipotesi.
-
Calcolare quante sono le soluzioni candidate. Stabilire se la scelta dell'oggetto più redditizio di ogni classe è ammissibile.
-
Trovare la soluzione ottima per enumerazione.
Soluzione
-
Gli oggetti più leggeri delle classi pesano \(6, 4, 2\), e \(6+4+2=12\le 16\): l'istanza ha una soluzione ammissibile.
-
Una soluzione candidata prende un oggetto per classe: \(2\cdot 3\cdot 2=12\) candidate. Gli oggetti più redditizi sono \(2, 3, 6\), di peso totale \(9+4+8=21>16\): questa scelta non è ammissibile.
-
Le candidate sono:
\(S\) peso profitto ammissibile \(S\) peso profitto ammissibile \(\{1,3,6\}\) \(18\) \(31\) no \(\{2,3,6\}\) \(21\) \(34\) no \(\{1,3,7\}\) \(12\) \(25\) sì \(\{2,3,7\}\) \(15\) \(\mathbf{28}\) sì \(\{1,4,6\}\) \(20\) \(30\) no \(\{2,4,6\}\) \(23\) \(33\) no \(\{1,4,7\}\) \(14\) \(24\) sì \(\{2,4,7\}\) \(17\) \(27\) no \(\{1,5,6\}\) \(21\) \(28\) no \(\{2,5,6\}\) \(24\) \(31\) no \(\{1,5,7\}\) \(15\) \(22\) sì \(\{2,5,7\}\) \(18\) \(25\) no Solo \(4\) candidate sono ammissibili, e la migliore è \(\tilde S=\{2,3,7\}\), di peso \(15\), con \(z(I)=28\); è l'unica soluzione ottima.
La soluzione ottima prende gli oggetti \(2, 3, 7\), uno per classe, con \(z(I)=28\): scegliere l'oggetto più redditizio di ogni classe non è ammissibile.
Esercizio 2.6: Una scelta greedy non ottima (KP)
Un fondo ha un budget \(c=14\) e \(n=5\) progetti candidati, gli oggetti \(\mathscr{I}=\{1,\dots,5\}\) di un'istanza di zaino, con i seguenti profitti e costi (pesi):
Domande
-
Scrivere l'istanza come problema di ottimizzazione combinatoria: insieme base, soluzioni ammissibili e funzione obiettivo. Calcolare quante sono le soluzioni candidate.
-
Elencare i sottoinsiemi ammissibili, con peso e profitto, e trovare la soluzione ottima per forza bruta.
-
Applicare l'algoritmo greedy per efficienza: ordinare gli oggetti per efficienza \(p_j/w_j\) non crescente (a parità, per indice minimo) e inserire ogni oggetto che entra. Stabilire se la soluzione greedy è ottima.
-
Calcolare il bound duale del rilassamento continuo, in cui gli oggetti si possono prendere in modo frazionario, e arrotondarlo. Calcolare i gap relativi della soluzione greedy rispetto a questo bound e rispetto a \(z(I)\).
Soluzione
-
L'insieme base è \(\mathscr{U}=\mathscr{I}=\{1,2,3,4,5\}\). Un sottoinsieme \(S\subseteq\mathscr{U}\) è ammissibile se \(\sum_{j\in S} w_j\le 14\), e l'obiettivo è \(f(S)=\sum_{j\in S} p_j\), da massimizzare. Le soluzioni candidate sono i \(2^5=32\) sottoinsiemi.
-
I tre oggetti più leggeri pesano \(2+6+7=15>14\), quindi un sottoinsieme ammissibile ha al più \(2\) oggetti. I \(12\) sottoinsiemi ammissibili sono:
\(S\) peso profitto \(S\) peso profitto \(\emptyset\) \(0\) \(0\) \(\{1,2\}\) \(9\) \(23\) \(\{1\}\) \(7\) \(14\) \(\{1,4\}\) \(13\) \(\mathbf{27}\) \(\{2\}\) \(2\) \(9\) \(\{2,3\}\) \(11\) \(24\) \(\{3\}\) \(9\) \(15\) \(\{2,4\}\) \(8\) \(22\) \(\{4\}\) \(6\) \(13\) \(\{2,5\}\) \(10\) \(20\) \(\{5\}\) \(8\) \(11\) \(\{4,5\}\) \(14\) \(24\) La soluzione ottima è \(\tilde S=\{1,4\}\), di peso \(13\), con \(z(I)=27\); è l'unico sottoinsieme con questo profitto.
-
Le efficienze sono
\[ \frac{p_1}{w_1}=\frac{14}{7}=2,\quad \frac{p_2}{w_2}=\frac{9}{2},\quad \frac{p_3}{w_3}=\frac{15}{9}=\frac{5}{3},\quad \frac{p_4}{w_4}=\frac{13}{6},\quad \frac{p_5}{w_5}=\frac{11}{8}, \]quindi l'ordine è \(2,4,1,3,5\). L'algoritmo greedy esamina gli oggetti in questo ordine:
-
l'oggetto \(2\) entra (peso \(2\)): capacità residua \(12\);
-
l'oggetto \(4\) entra (peso \(6\)): capacità residua \(6\);
-
l'oggetto \(1\) non entra (peso \(7 > 6\));
-
l'oggetto \(3\) non entra (peso \(9 > 6\));
-
l'oggetto \(5\) non entra (peso \(8 > 6\));
Restituisce \(\bar S=\{2,4\}\), di profitto \(22\): un bound primale \(\mathrm{LB}=22\). Non è ottima, poiché \(z(I)=27\). I due oggetti efficienti occupano \(8\) unità del budget, e la capacità residua \(6\) è troppo piccola per qualunque altro oggetto; la soluzione ottima rinuncia all'oggetto \(2\), il più efficiente, e usa \(13\) delle \(14\) unità del budget con gli oggetti \(1\) e \(4\).
-
-
Nel rilassamento continuo gli oggetti si prendono nello stesso ordine: gli oggetti \(2, 4\) occupano \(8\) unità, e la frazione \(\frac{6}{7}\) dell'oggetto \(1\) riempie la capacità residua \(6\):
\[ \mathrm{UB}=9+13+\frac{6}{7}\cdot 14=34. \]Il bound è intero, non serve arrotondare. Rispetto al bound, il gap relativo della soluzione greedy è \(\frac{34-22}{22}=\frac{6}{11}\approx 54.5\%\); rispetto all'ottimo è \(\frac{27-22}{22}=\frac{5}{22}\approx 22.7\%\). Senza l'enumerazione, il bound da solo non può certificare l'ottimo.
La scelta greedy per efficienza dà profitto \(22\), mentre l'ottimo, trovato per forza bruta sui \(12\) sottoinsiemi ammissibili, è \(z(I)=27\) con \(\tilde S=\{1,4\}\): \(22\le z(I)=27\le 34\).