Esercizi · Problemi di ottimizzazione combinatoria¶
Esercizi · Capitolo 1 · ogni soluzione si apre con un clic · Capitolo 1: Ottimizzazione combinatoria · Eserciziario, volume 1 (PDF)
Esercizio 1.1: Insieme base, soluzioni ammissibili e obiettivo
Consideriamo l'insieme base \(\mathscr{U}=\{1,\dots,6\}\) con i pesi
Un sottoinsieme \(S\subseteq\mathscr{U}\) è ammissibile se non contiene due elementi consecutivi (\(j\) e \(j+1\)), e l'obiettivo \(f(S)=\sum_{j\in S} c_j\) è da massimizzare.
Domande
-
Calcolare il numero di soluzioni candidate. Stabilire se \(\{1,3,4\}\) è ammissibile, e se lo è \(\{2,4,6\}\).
-
Contare i sottoinsiemi ammissibili, raggruppati per numero di elementi.
-
Trovare la soluzione ottima e \(z(I)\).
-
Applicare la regola greedy: prendere l'elemento di peso massimo, scartare i suoi vicini e ripetere sugli elementi rimasti. Dare il bound primale e il suo gap relativo rispetto a \(z(I)\).
Soluzione
-
Le candidate sono i \(2^6=64\) sottoinsiemi di \(\mathscr{U}\). Il sottoinsieme \(\{1,3,4\}\) non è ammissibile, poiché contiene \(3\) e \(4\); il sottoinsieme \(\{2,4,6\}\) è ammissibile.
-
Un sottoinsieme ammissibile di \(6\) elementi ha al più \(3\) elementi. Per enumerazione:
elementi sottoinsiemi ammissibili \(0\) \(1\) \(1\) \(6\) \(2\) \(10\) \(3\) \(4\) totale \(21\) I sottoinsiemi con \(2\) elementi sono le \(\binom{6}{2}=15\) coppie meno le \(5\) coppie consecutive: \(10\). Solo \(21\) delle \(64\) candidate sono ammissibili.
-
I sottoinsiemi ammissibili con \(3\) elementi sono \(\{1,3,5\}\) (\(f=18\)), \(\{1,3,6\}\) (\(f=15\)), \(\{1,4,6\}\) (\(f=12\)), \(\{2,4,6\}\) (\(f=15\)). Un sottoinsieme con al più \(2\) elementi ha valore al più \(7+8=15\). Quindi la soluzione ottima è \(\tilde S=\{1,3,5\}\), con \(z(I)=18\); è l'unica soluzione ottima.
-
La regola greedy procede così:
-
prendiamo l'elemento \(2\) (peso \(8\)) e scartiamo i suoi vicini \(1, 3\);
-
prendiamo l'elemento \(5\) (peso \(7\)) e scartiamo i suoi vicini \(4, 6\);
Restituisce \(\bar S=\{2,5\}\), di valore \(15\): un bound primale \(\mathrm{LB}=15\). Il gap relativo rispetto a \(z(I)\) è \(\frac{18-15}{15}=\frac{1}{5}\approx 20.0\%\): prendere per primo l'elemento più pesante vieta due suoi vicini, i cui pesi insieme sono maggiori.
-
Solo \(21\) dei \(64\) sottoinsiemi sono ammissibili; l'ottimo è \(\tilde S=\{1,3,5\}\) con \(z(I)=18\), mentre la regola greedy dà \(15\).
Esercizio 1.2: Contare le soluzioni
Contiamo gli oggetti combinatori di piccoli insiemi finiti.
-
(a) I sottoinsiemi di un insieme con \(6\) elementi.
-
(b) Gli ordinamenti e gli ordinamenti ciclici di \(6\) elementi.
-
(c) Le partizioni dell'insieme \(\{1,2,3,4,5\}\).
-
(d) Gli assegnamenti di \(4\) elementi a \(2\) etichette.
Domande
-
Calcolare quanti sottoinsiemi ha l'insieme (a) e quanti di essi hanno esattamente \(2\) elementi.
-
Calcolare quanti sono gli ordinamenti dei \(6\) elementi di (b), quanti di essi descrivono lo stesso ordinamento ciclico e quanti sono gli ordinamenti ciclici distinti.
-
Calcolare i numeri di Bell \(B(1),\dots,B(5)\) con la ricorsione del capitolo e dedurre quante partizioni ha l'insieme (c).
-
Contare, per enumerazione, le partizioni dell'insieme (c), raggruppate per numero di blocchi.
-
Calcolare quanti assegnamenti ha (d) e quante soluzioni distinte restano se le due etichette sono intercambiabili.
Soluzione
-
I sottoinsiemi sono \(2^6=64\); quelli con \(2\) elementi sono \(\binom{6}{2}=15\).
-
Gli ordinamenti sono \(6!=720\). Un ordinamento ciclico è descritto da \(6\) ordinamenti, uno per ogni elemento di partenza, e da altri \(6\) letti nel verso opposto: \(2\cdot 6=12\) ordinamenti ciascuno. Gli ordinamenti ciclici distinti sono \(\frac{720}{12}=60=\frac{(6-1)!}{2}\).
-
Con \(B(0)=1\) e \(B(n)=\sum_{k=0}^{n-1}\binom{n-1}{k}B(k)\), ogni termine è un coefficiente binomiale per un numero di Bell già calcolato:
\[\begin{align*} B(1)&=1\cdot 1=1\\ B(2)&=1\cdot 1+1\cdot 1=2\\ B(3)&=1\cdot 1+2\cdot 1+1\cdot 2=5\\ B(4)&=1\cdot 1+3\cdot 1+3\cdot 2+1\cdot 5=15\\ B(5)&=1\cdot 1+4\cdot 1+6\cdot 2+4\cdot 5+1\cdot 15=52. \end{align*}\]L'insieme (c) ha \(B(5)=52\) partizioni.
-
Per enumerazione:
blocchi partizioni \(1\) \(1\) \(2\) \(15\) \(3\) \(25\) \(4\) \(10\) \(5\) \(1\) totale \(52\) Per esempio, le \(10\) partizioni in \(4\) blocchi mettono insieme due elementi, e le coppie sono \(\binom{5}{2}=10\).
-
Ogni elemento va a una delle \(2\) etichette: \(2^4=16\) assegnamenti. Se le etichette sono intercambiabili, un assegnamento e quello con le due etichette scambiate sono la stessa soluzione. Gli assegnamenti con tutti gli elementi su un'etichetta danno \(1\) soluzione (contata due volte fra i \(16\)), gli altri \(14\) danno \(\frac{14}{2}=7\) soluzioni con due blocchi non vuoti: \(8\) soluzioni distinte, le partizioni dei \(4\) elementi in al più \(2\) blocchi.
Le candidate sono \(2^n\) sottoinsiemi, \(n!\) ordinamenti, \((n-1)!/2\) ordinamenti ciclici, \(B(n)\) partizioni e \(m^n\) assegnamenti; con etichette intercambiabili, gli assegnamenti diventano partizioni in al più \(m\) blocchi.
Esercizio 1.3: Forza bruta e tempo di calcolo
Un calcolatore valuta \(10^9\) soluzioni candidate al secondo, e concediamo un giorno di calcolo (\(86\,400\) secondi).
Domande
-
Calcolare quante candidate si possono valutare in un giorno.
-
Determinare il massimo numero \(n\) di elementi per cui si possono enumerare in un giorno tutti i sottoinsiemi, tutti gli ordinamenti ciclici e tutte le partizioni.
-
Rispondere alla stessa domanda per un calcolatore \(1000\) volte più veloce. Calcolare quanti elementi guadagna in ciascun caso.
Soluzione
-
\(86\,400\cdot 10^9\approx 8.64\cdot 10^{13}\) candidate.
-
Cerchiamo il massimo \(n\) il cui numero di candidate non supera il budget:
-
sottoinsiemi: \(2^{46}\approx 7.04\cdot 10^{13}\le 8.64\cdot 10^{13}<2^{47}\approx 1.41\cdot 10^{14}\), quindi \(n=46\);
-
ordinamenti ciclici: \(16!/2\approx 1.05\cdot 10^{13}\le 8.64\cdot 10^{13}<17!/2\approx 1.78\cdot 10^{14}\), quindi \(n=17\);
-
partizioni: \(B(20)\approx 5.17\cdot 10^{13}\le 8.64\cdot 10^{13}<B(21)\approx 4.75\cdot 10^{14}\), quindi \(n=20\);
-
-
Il budget diventa \(\approx 8.64\cdot 10^{16}\):
-
sottoinsiemi: \(2^{56}\approx 7.21\cdot 10^{16}\le 8.64\cdot 10^{16}<2^{57}\approx 1.44\cdot 10^{17}\), quindi \(n=56\);
-
ordinamenti ciclici: \(19!/2\approx 6.08\cdot 10^{16}\le 8.64\cdot 10^{16}<20!/2\approx 1.22\cdot 10^{18}\), quindi \(n=20\);
-
partizioni: \(B(23)\approx 4.42\cdot 10^{16}\le 8.64\cdot 10^{16}<B(24)\approx 4.46\cdot 10^{17}\), quindi \(n=23\);
Il calcolatore più veloce guadagna \(10\) elementi per i sottoinsiemi, \(3\) per le partizioni e \(3\) per gli ordinamenti ciclici: un fattore \(1000\) in velocità sposta il limite solo di pochi elementi.
-
In un giorno la forza bruta tratta circa \(46\) elementi per i sottoinsiemi, \(20\) per le partizioni e \(17\) per gli ordinamenti ciclici; un calcolatore \(1000\) volte più veloce aggiunge solo pochi elementi.
Esercizio 1.4: Bound primale, bound duale e gap
Consideriamo l'insieme base \(\mathscr{U}=\{1,\dots,5\}\), i pesi \(\vet{c}=(4,6,3,5,2)\), l'obiettivo \(f(S)=\sum_{j\in S}c_j\) da minimizzare e le soluzioni ammissibili
Domande
-
Calcolare quante sono le soluzioni candidate e quante quelle ammissibili.
-
La soluzione \(\{1,2\}\) è ammissibile: stabilire quale bound fornisce.
-
Ogni sottoinsieme ammissibile ha almeno \(2\) elementi: ricavarne un bound duale. Calcolare il gap assoluto e il gap relativo.
-
Migliorare il bound duale esaminando separatamente i sottoinsiemi ammissibili con \(2\) elementi e quelli con almeno \(3\) elementi. Trovare una soluzione ottima e spiegare perché è ottima.
Soluzione
-
Le candidate sono i \(2^5=32\) sottoinsiemi di \(\mathscr{U}\); \(7\) di essi sono ammissibili.
-
\(f(\{1,2\})=4+6=10\) è il valore di una soluzione ammissibile di un problema di minimo, quindi un bound primale: \(\mathrm{UB}=10\).
-
Un sottoinsieme con almeno \(2\) elementi pesa almeno quanto i due pesi più piccoli: \(f(S)\ge 2+3=5\) per ogni \(S\in\mathcal{F}\), quindi \(\mathrm{LB}=5\). Il gap assoluto è \(10-5=5\) e il gap relativo, diviso per il lower bound, è \(\frac{5}{5}\approx 100.0\%\).
-
I sottoinsiemi ammissibili con \(2\) elementi sono \(\{1,2\}\) (\(f=10\)), \(\{1,4\}\) (\(f=9\)), \(\{3,4\}\) (\(f=8\)): il loro minimo è \(8\). Un sottoinsieme con almeno \(3\) elementi pesa almeno \(2+3+4=9\). Quindi \(\mathrm{LB}=8\). La soluzione ammissibile \(\{3,4\}\) ha valore \(3+5=8=\mathrm{LB}\): il gap è nullo, quindi è ottima e \(z(I)=8\).
\(\{1,2\}\) dà \(\mathrm{UB}=10\), l'argomento sulla cardinalità dà \(\mathrm{LB}=5\) e l'argomento per casi dà \(\mathrm{LB}=8\), raggiunto da \(\{3,4\}\): \(z(I)=8\).
Esercizio 1.5: Riconoscere l'oggetto combinatorio
Per ogni situazione, indicare l'oggetto combinatorio di una soluzione (sottoinsieme, ordinamento, ordinamento ciclico, partizione, assegnamento) e il numero di soluzioni candidate.
Domande
-
Un fondo di ricerca deve scegliere quali fra \(12\) proposte finanziare con un budget fissato.
-
Una tecnica deve visitare \(8\) sedi (compreso il suo ufficio) e tornare in ufficio.
-
\(8\) scatole devono essere caricate su furgoni identici della stessa capacità (contare i modi di raggruppare le scatole).
-
\(8\) lavori devono essere assegnati a \(3\) macchine (contare gli assegnamenti).
-
Una fabbrica deve decidere in quali delle prossime \(12\) settimane attrezzare la sua linea.
Soluzione
-
Un sottoinsieme delle proposte: \(2^{12} = 4096\) sottoinsiemi.
-
Un ordinamento ciclico delle \(8\) sedi: \((8-1)!/2 = 5040/2 = 2520\) ordinamenti ciclici.
-
Una partizione delle scatole: \(B(8) = 4140\) partizioni.
-
Un assegnamento dei lavori alle macchine: \(3^8 = 6561\) assegnamenti.
-
Un sottoinsieme delle settimane: \(2^{12} = 4096\) scelte.
Esercizio 1.6: Forza bruta, bound e gap
Consideriamo l'insieme base \(\mathscr{U} = \{1,2,3,4\}\), i pesi \(\vet{c} = (8,5,4,3)\), l'obiettivo \(f(S) = \sum_{j \in S} c_j\) da massimizzare e le soluzioni ammissibili
Domande
-
Calcolare quante sono le soluzioni candidate e quante quelle ammissibili.
-
La soluzione \(\{1,4\}\) è ammissibile: stabilire quale bound fornisce.
-
Trovare un bound duale distinguendo i sottoinsiemi ammissibili che contengono l'elemento \(1\) da quelli che non lo contengono, e calcolare il gap assoluto e il gap relativo.
-
Trovare una soluzione ottima e spiegare perché è ottima.
Soluzione
-
Le candidate sono i \(2^4 = 16\) sottoinsiemi di \(\mathscr{U}\); \(10\) di essi sono ammissibili.
-
\(f(\{1,4\}) = 8+3 = 11\) è il valore di una soluzione ammissibile di un problema di massimo, quindi un bound primale: \(\mathrm{LB} = 11\).
-
I sottoinsiemi ammissibili che contengono \(1\) sono \(\{1\}\) e \(\{1,4\}\), di valore al più \(8+3 = 11\). Un sottoinsieme ammissibile senza \(1\) ha valore al più \(5+4+3 = 12\). Quindi \(f(S) \le 12\) per ogni \(S \in \mathcal{F}\), e \(\mathrm{UB} = 12\). Il gap assoluto è \(12-11 = 1\) e il gap relativo è \(\tfrac{1}{11} \approx 9.1\%\).
-
La soluzione ammissibile \(\{2,3,4\}\) ha valore \(5+4+3 = 12 = \mathrm{UB}\). Il gap è nullo, quindi è ottima e \(z(I) = 12\): l'elemento di peso massimo non è nella soluzione ottima.
Esercizio 1.7: Quanto può essere grande n?
Un calcolatore valuta \(10^9\) soluzioni candidate al secondo, e concediamo un'ora di calcolo.
Domande
-
Determinare il massimo numero \(n\) di elementi per cui si possono enumerare tutti i sottoinsiemi.
-
Determinare il massimo numero \(n\) di elementi per cui si possono enumerare tutti gli ordinamenti ciclici.
-
Rispondere alle stesse domande per un calcolatore \(1000\) volte più veloce.
Soluzione
In un'ora il calcolatore valuta \(3600 \cdot 10^9 = 3.6 \cdot 10^{12}\) candidate.
-
\(2^{41} \approx 2.20 \cdot 10^{12} \le 3.6 \cdot 10^{12} < 2^{42} \approx 4.40 \cdot 10^{12}\), quindi \(n = 41\) elementi.
-
Per \(16\) elementi \(15!/2 \approx 6.54 \cdot 10^{11} \le 3.6 \cdot 10^{12}\), mentre per \(17\) elementi \(16!/2 \approx 1.05 \cdot 10^{13} > 3.6 \cdot 10^{12}\); quindi \(n = 16\) elementi.
-
Il budget diventa \(3.6 \cdot 10^{15}\). Per i sottoinsiemi, \(2^{51} \approx 2.25 \cdot 10^{15} \le 3.6 \cdot 10^{15} < 2^{52} \approx 4.50 \cdot 10^{15}\), quindi \(n = 51\) elementi: \(10\) in più. Per gli ordinamenti ciclici, \(18!/2 \approx 3.20 \cdot 10^{15} \le 3.6 \cdot 10^{15} < 19!/2 \approx 6.08 \cdot 10^{16}\), quindi \(n = 19\) elementi: solo \(3\) in più.
Esercizio 1.8: Arrotondare i bound duali
In due istanze tutte le soluzioni ammissibili hanno valore intero.
Domande
-
In un'istanza di massimo, un'euristica trova una soluzione di valore \(11\) e un rilassamento dà il bound duale \(12.6\). Dare \(\mathrm{LB}\), \(\mathrm{UB}\) e il gap relativo, prima e dopo l'arrotondamento del bound duale.
-
Si trova poi una soluzione di valore \(12\): stabilire che cosa si può concludere.
-
In un'istanza di minimo, un'euristica trova una soluzione di valore \(15\) e un argomento dà il bound duale \(13.2\). Dare \(\mathrm{LB}\), \(\mathrm{UB}\) e il gap relativo dopo l'arrotondamento.
Soluzione
-
\(\mathrm{LB} = 11\) (primale) e \(\mathrm{UB} = 12.6\) (duale): il gap relativo è \(\tfrac{1.6}{11} \approx 14.5\%\). Poiché i valori sono interi, anche \(\lfloor 12.6 \rfloor = 12\) è un bound duale, e il gap diventa \(\tfrac{1}{11} \approx 9.1\%\).
-
Ora \(\mathrm{LB} = 12 = \mathrm{UB}\): il gap è nullo e la soluzione di valore \(12\) è ottima.
-
Nella forma di minimo il bound primale è \(\mathrm{UB} = 15\) e il bound duale è \(\mathrm{LB} = \lceil 13.2 \rceil = 14\). Il gap relativo, diviso per il lower bound, è \(\tfrac{15-14}{14} = \tfrac{1}{14} \approx 7.1\%\).