Esercizi · Problemi di routing¶
Esercizi · Capitolo 6 · ogni soluzione si apre con un clic · Capitolo 6: Problemi di routing · Eserciziario, volume 1 (PDF)
Esercizio 6.1: I giri e la loro lunghezza (TSP)
Consideriamo l'istanza del TSP con \(6\) città, \(\mathscr{V}=\{1,\dots,6\}\), e le distanze simmetriche
e le permutazioni
Domande
-
Calcolare la lunghezza di ogni permutazione, letta come un giro.
-
Stabilire quali permutazioni descrivono lo stesso giro, motivando la risposta.
-
Contare le permutazioni delle \(6\) città e i giri distinti.
-
I due cicli \((1,2,3)\) e \((4,5,6)\) visitano ogni città esattamente una volta. Stabilire se formano un giro e confrontare la loro lunghezza totale con la lunghezza di \(\sigma^4\).
Soluzione
-
Includendo l'arco di ritorno \(d_{\sigma_n\sigma_1}\):
\[\begin{align*} L(\sigma^{1})&=4+3+4+3+5+5=24\\ L(\sigma^{2})&=3+5+5+4+3+4=24\\ L(\sigma^{3})&=5+5+3+4+3+4=24\\ L(\sigma^{4})&=3+3+4+3+8+5=26. \end{align*}\] -
\(\sigma^2\) parte dalla città \(4\) e visita le città nello stesso ordine ciclico di \(\sigma^1\); \(\sigma^3\) è \(\sigma^1\) percorsa all'indietro. Le tre permutazioni usano gli stessi \(6\) archi e descrivono lo stesso giro, di lunghezza \(24\). La permutazione \(\sigma^4\) usa l'arco \(\{1,5\}\), che non è in \(\sigma^1\): è un giro diverso.
-
Le permutazioni sono \(6!=720\); ogni giro è descritto da \(6\) città di partenza per \(2\) versi, quindi i giri sono \(\frac{720}{12}=\frac{(6-1)!}{2}=60\).
-
No: un giro è un unico ciclo attraverso tutte le città, e i due cicli sono disgiunti. La loro lunghezza totale è \((4+3+7)+(3+5+4)=26\), non minore di \(L(\sigma^4)=26\), ma non è la lunghezza di una soluzione ammissibile.
\(\sigma^1,\sigma^2,\sigma^3\) sono lo stesso giro, di lunghezza \(24\); \(\sigma^4\) è un giro diverso, di lunghezza \(26\). Due cicli disgiunti non sono un giro.
Esercizio 6.2: Enumerazione dei giri (TSP)
Consideriamo l'istanza del TSP con \(5\) città e le distanze simmetriche
Domande
-
Costruire un giro con la nearest neighbour rule dalla città \(1\) (pareggi risolti con l'indice minimo) e calcolarne la lunghezza.
-
Enumerare tutti i giri, trovarne uno ottimo e stabilire se è unico.
-
Disegnare il giro ottimo sul grafo completo dell'istanza.
Soluzione
-
-
da \(1\) le città non visitate più vicine sono \(3, 5\), a distanza \(3\): andiamo in \(3\);
-
da \(3\) la città non visitata più vicina è \(4\), a distanza \(4\);
-
da \(4\) la città non visitata più vicina è \(5\), a distanza \(4\);
-
da \(5\) la città non visitata più vicina è \(2\), a distanza \(10\);
-
ritorniamo da \(2\) a \(1\), a distanza \(12\).
Il giro è \((1,3,4,5,2)\), di lunghezza \(3+4+4+10+12=33\).
-
-
I giri sono \((5-1)!/2=12\), tutti scritti a partire dalla città \(1\):
giro \(L\) giro \(L\) giro \(L\) \((1,3,2,4,5)\) \(\mathbf{26}\) \((1,2,4,3,5)\) \(31\) \((1,2,3,4,5)\) \(32\) \((1,3,4,2,5)\) \(27\) \((1,2,4,5,3)\) \(31\) \((1,2,5,4,3)\) \(33\) \((1,4,2,3,5)\) \(29\) \((1,3,2,5,4)\) \(31\) \((1,2,3,5,4)\) \(35\) \((1,3,5,2,4)\) \(30\) \((1,4,3,2,5)\) \(31\) \((1,2,5,3,4)\) \(36\) Il giro \(\tilde\sigma=(1,3,2,4,5)\) è l'unico ottimo, con \(z(I)=26\); il giro nearest neighbour è più lungo di \(7\).
-
Il giro ottimo sul grafo completo dell'istanza:
Gli archi in grassetto costano \(3+9+7+4+3=26\). Il giro evita gli archi lunghi della città \(2\), che è lontana da tutte le altre città, e vi entra e ne esce con i suoi due archi più corti, \(7\) e \(9\).
Il nearest neighbour dalla città \(1\) dà \(33\); l'enumerazione dei \(12\) giri dà l'unico giro ottimo \((1,3,2,4,5)\), con \(z(I)=26\).
Esercizio 6.3: Nearest neighbour da ogni città e un lower bound (TSP)
Consideriamo di nuovo l'istanza del TSP con \(5\) città e le distanze simmetriche
il cui giro ottimo ha lunghezza \(z(I)=26\).
Domande
-
Applicare la nearest neighbour rule da ogni città di partenza (pareggi risolti con l'indice minimo) e indicare la città di partenza che dà il giro migliore.
-
Calcolare il bound duale \(\left\lceil \frac12\sum_i(a_i+b_i)\right\rceil\) dei due archi più corti.
-
Calcolare il gap assoluto e il gap relativo fra il miglior giro nearest neighbour e il bound duale. Stabilire se il solo bound può certificare che questo giro è ottimo.
Soluzione
-
I giri costruiti dalle cinque città di partenza sono:
partenza giro lunghezza \(1\) \((1,3,4,5,2)\) \(3+4+4+10+12=33\) \(2\) \((2,4,3,1,5)\) \(7+4+3+3+10=27\) \(3\) \((3,1,5,4,2)\) \(3+3+4+7+9=26\) \(4\) \((4,3,1,5,2)\) \(4+3+3+10+7=27\) \(5\) \((5,1,3,4,2)\) \(3+3+4+7+10=27\) Il giro migliore parte dalla città \(3\): scritto a partire dalla città \(1\) è \((1,3,2,4,5)\), di lunghezza \(26\), ossia il giro ottimo. La città di partenza conta: dalla città \(1\) la regola lascia gli archi lunghi per la fine.
-
Le due distanze più piccole di ogni città sono:
città \(i\) \(1\) \(2\) \(3\) \(4\) \(5\) somma \(a_i\) \(3\) \(7\) \(3\) \(4\) \(3\) \(b_i\) \(3\) \(9\) \(4\) \(4\) \(4\) \(a_i+b_i\) \(6\) \(16\) \(7\) \(8\) \(7\) \(44\) Quindi \(\mathrm{LB}=44/2=22\).
-
Il gap assoluto è \(26-22=4\) e il gap relativo è \(\frac{4}{22}=\frac{2}{11}\approx 18.2\%\). Il solo bound non può certificare l'ottimo: solo l'enumerazione dei \(12\) giri mostra che nessun giro è più corto di \(26\).
Partendo dalla città \(3\) la nearest neighbour rule trova il giro ottimo, di lunghezza \(26\); i due archi più corti danno \(\mathrm{LB}=22\), e il gap \(4\) resta aperto senza enumerazione.
Esercizio 6.4: La disuguaglianza triangolare (TSP metrico)
Consideriamo l'istanza del TSP con \(4\) città e le distanze simmetriche
Domande
-
Contare le disuguaglianze triangolari \(d_{ij}\le d_{ik}+d_{kj}\) da verificare e individuare quelle violate.
-
Determinare il valore massimo di \(d_{13}\) che rende l'istanza metrica, lasciando invariate tutte le altre distanze.
-
Calcolare le lunghezze dei giri per il valore originale di \(d_{13}\) e per il valore della Domanda 2. Stabilire se il giro ottimo cambia.
Soluzione
-
Una disuguaglianza per ogni terna ordinata di città distinte: \(4\cdot3\cdot2=24\). Quelle violate sono quelle con \(d_{13}=d_{31}=10\) a sinistra:
\[ d_{13}=10>d_{12}+d_{23}=4+5=9,\qquad d_{13}=10>d_{14}+d_{43}=3+6=9, \]e le stesse due con \(d_{31}\). Tutte le altre \(20\) disuguaglianze valgono. Andare da \(1\) a \(3\) direttamente è più lungo che passare per la città \(2\) o per la città \(4\).
-
\(d_{13}\) deve soddisfare \(d_{13}\le d_{12}+d_{23}=9\) e \(d_{13}\le d_{14}+d_{43}=9\); quando \(d_{13}\) è a destra, diminuirlo da \(10\) non può violare una disuguaglianza che già vale. Il valore massimo è \(d_{13}=9\).
-
I tre giri sono:
giro \(d_{13}=10\) \(d_{13}=9\) \((1,2,3,4)\) \(4+5+6+3=18\) \(4+5+6+3=18\) \((1,2,4,3)\) \(4+2+6+10=22\) \(4+2+6+9=21\) \((1,3,2,4)\) \(10+5+2+3=20\) \(9+5+2+3=19\) In entrambi i casi il giro ottimo è \((1,2,3,4)\), di lunghezza \(18\): non usa l'arco \(\{1,3\}\), quindi non cambia. I due giri che usano l'arco \(\{1,3\}\) si accorciano di \(1\).
L'istanza non è metrica a causa di \(d_{13}=10\); con \(d_{13}\le 9\) diventa metrica. Il giro ottimo \((1,2,3,4)\), di lunghezza \(18\), non cambia.
Esercizio 6.5: Distanze asimmetriche (ATSP)
Consideriamo l'istanza dell'ATSP con \(4\) città e le distanze asimmetriche (\(d_{ij}\) è la distanza dalla città \(i\) alla città \(j\))
Domande
-
Contare i giri distinti dell'istanza e spiegare perché sono più di quelli di un'istanza simmetrica con \(4\) città.
-
Calcolare la lunghezza di ogni giro, accoppiando ogni giro con lo stesso giro percorso all'indietro.
-
Trovare il giro ottimo e disegnarlo.
Soluzione
-
Ogni giro può partire dalla città \(1\), e le altre \(3\) città si possono ordinare in \(3!=6\) modi: \((4-1)!=6\) giri. Nel caso simmetrico un giro e il suo inverso hanno la stessa lunghezza e sono un'unica soluzione, \((4-1)!/2=3\); qui il verso conta.
-
Ogni giro, scritto a partire dalla città \(1\), è accoppiato con il suo inverso:
giro lunghezza inverso lunghezza \((1,2,3,4)\) \(3+2+3+2=\mathbf{10}\) \((1,4,3,2)\) \(23\) \((1,2,4,3)\) \(3+9+5+4=21\) \((1,3,4,2)\) \(23\) \((1,3,2,4)\) \(8+7+9+2=26\) \((1,4,2,3)\) \(17\) Un giro e il suo inverso usano le stesse coppie di città, ma in versi opposti, e le loro lunghezze sono diverse.
-
Il giro ottimo è \(\tilde\sigma=(1,2,3,4)\), con \(z(I)=10\); il suo inverso ha lunghezza \(23\).
L'istanza dell'ATSP ha \((4-1)!=6\) giri; quello ottimo è \((1,2,3,4)\), con \(z(I)=10\), mentre lo stesso ciclo percorso all'indietro è molto più lungo.
Esercizio 6.6: Insieme base, soluzioni ammissibili e obiettivo (TSP)
Consideriamo l'istanza del TSP con \(4\) città, \(\mathscr{V}=\{1,2,3,4\}\), e le distanze simmetriche
L'istanza è disegnata come un grafo completo, con la distanza su ogni arco:
Domande
-
Il Capitolo 1 «Problemi di ottimizzazione combinatoria» dà la definizione di problema di ottimizzazione combinatoria. Scrivere l'istanza in questa forma: prendere come insieme base \(\mathscr{U}\) l'insieme degli archi, e descrivere le soluzioni ammissibili \(\mathcal{F}\) e la funzione obiettivo \(f\). Contare i sottoinsiemi di \(\mathscr{U}\).
-
Contare i sottoinsiemi di \(\mathscr{U}\) con esattamente \(4\) archi e quanti di essi sono giri. Spiegare perché gli altri non sono ammissibili.
-
Calcolare \(f\) per ogni soluzione ammissibile e trovare la soluzione ottima e \(z(I)\).
-
Confrontare il numero di soluzioni ammissibili con la formula \((n-1)!/2\) del capitolo.
Soluzione
-
L'insieme base è l'insieme dei \(6\) archi del grafo completo,
\[ \mathscr{U}=\{\{1,2\},\{1,3\},\{1,4\},\{2,3\},\{2,4\},\{3,4\}\}. \]Un sottoinsieme \(S\subseteq\mathscr{U}\) è ammissibile, \(S\in\mathcal{F}\), quando i suoi archi formano un unico ciclo attraverso tutte le città, ossia un giro. La funzione obiettivo è additiva, con le distanze come pesi:
\[ f(S)=\sum_{\{i,j\}\in S} d_{ij}. \]L'insieme base ha \(2^{6}=64\) sottoinsiemi.
-
Un giro di \(4\) città usa esattamente \(4\) archi, e ci sono \(\binom{6}{4}=15\) sottoinsiemi con \(4\) archi. Ognuno di essi lascia fuori \(2\) archi.
-
Se i \(2\) archi mancanti non hanno città in comune, ogni città conserva \(2\) archi: i \(4\) archi formano un ciclo attraverso tutte le città. Ci sono \(3\) coppie di questo tipo, \(\{\{1,2\},\{3,4\}\}\), \(\{\{1,3\},\{2,4\}\}\) e \(\{\{1,4\},\{2,3\}\}\): \(3\) giri.
-
Se i \(2\) archi mancanti si incontrano in una città \(v\), la città \(v\) conserva solo \(1\) arco e le altre tre città formano un triangolo: non è un giro. Ci sono \(4\cdot 3=12\) sottoinsiemi di questo tipo (\(4\) scelte di \(v\) e \(\binom{3}{2}=3\) coppie di archi in \(v\)).
Quindi solo \(3\) dei \(64\) sottoinsiemi di \(\mathscr{U}\) sono ammissibili.
-
-
I tre giri, scritti come sequenze a partire dalla città \(1\) e come insiemi di archi, sono:
giro \(\sigma\) archi \(S\) \(f(S)=L(\sigma)\) \((1,2,3,4)\) \(\{1,2\},\{1,4\},\{2,3\},\{3,4\}\) \(3+4+5+7=19\) \((1,2,4,3)\) \(\{1,2\},\{1,3\},\{2,4\},\{3,4\}\) \(3+6+2+7=18\) \((1,3,2,4)\) \(\{1,3\},\{1,4\},\{2,3\},\{2,4\}\) \(6+4+5+2=\mathbf{17}\) La soluzione ottima è il giro \(\tilde\sigma=(1,3,2,4)\), con \(z(I)=17\):
Un modo rapido per vederlo: le \(6\) distanze sommano a \(27\), e un giro lascia fuori due archi senza città in comune. Il giro migliore lascia fuori la coppia di questo tipo più costosa, \(\{1,2\}\) e \(\{3,4\}\), di totale \(3+7=10\), e \(27-10=17\).
-
La formula dà \((4-1)!/2=3\) giri, lo stesso numero trovato nella Domanda 2. I candidati della definizione, i \(64\) sottoinsiemi di archi, sono molti di più delle soluzioni ammissibili.
Vista come problema di ottimizzazione combinatoria sull'insieme base degli archi, l'istanza ha \(2^6=64\) sottoinsiemi candidati e solo \(3\) soluzioni ammissibili, i giri. Il giro ottimo è \((1,3,2,4)\), con \(z(I)=17\).
Esercizio 6.7: Bound primale, bound duale e gap (TSP)
Consideriamo l'istanza del TSP con \(5\) città e le distanze simmetriche
Domande
-
Costruire un giro con la nearest neighbour rule dalla città \(1\) (pareggi risolti con l'indice minimo), calcolarne la lunghezza e stabilire se è un bound primale o duale.
-
Calcolare il bound duale \(\left\lceil \frac12 \sum_i (a_i+b_i)\right\rceil\), dove \(a_i\le b_i\) sono le due distanze più piccole dalla città \(i\).
-
Enumerare i \((5-1)!/2\) giri e trovare quello ottimo.
-
Calcolare il gap assoluto e il gap relativo del giro nearest neighbour, rispetto al bound duale e rispetto a \(z(I)\). Spiegare perché qui la scelta greedy della città più vicina non è ottima.
Soluzione
-
La nearest neighbour rule procede come segue:
-
da \(1\) le città non visitate più vicine sono \(2, 3\), a distanza \(2\): andiamo in \(2\) (indice minimo);
-
da \(2\) la città non visitata più vicina è \(3\), a distanza \(4\);
-
da \(3\) la città non visitata più vicina è \(5\), a distanza \(4\);
-
da \(5\) la città non visitata più vicina è \(4\), a distanza \(8\);
-
ritorniamo da \(4\) a \(1\), a distanza \(d_{41}=9\).
Il giro è \(\bar\sigma=(1,2,3,5,4)\), di lunghezza \(L(\bar\sigma)=2+4+4+8+9=27\). È la lunghezza di una soluzione ammissibile di un problema di minimizzazione, quindi un bound primale: \(\mathrm{UB}=27\).
-
-
Le due distanze più piccole di ogni città sono:
città \(i\) \(1\) \(2\) \(3\) \(4\) \(5\) somma \(a_i\) \(2\) \(2\) \(2\) \(5\) \(4\) \(b_i\) \(2\) \(4\) \(4\) \(5\) \(8\) \(a_i+b_i\) \(4\) \(6\) \(6\) \(10\) \(12\) \(38\) Quindi \(\mathrm{LB}=\frac{38}{2}=19\) (la somma è pari, non serve arrotondare).
-
I \(12\) giri, tutti a partire dalla città \(1\), sono:
giro \(L\) giro \(L\) giro \(L\) \((1,2,4,5,3)\) \(\mathbf{21}\) \((1,2,3,4,5)\) \(28\) \((1,3,4,2,5)\) \(30\) \((1,2,4,3,5)\) \(25\) \((1,3,2,4,5)\) \(28\) \((1,4,2,3,5)\) \(31\) \((1,2,5,4,3)\) \(26\) \((1,2,5,3,4)\) \(29\) \((1,3,2,5,4)\) \(32\) \((1,2,3,5,4)\) \(27\) \((1,3,5,2,4)\) \(29\) \((1,4,3,2,5)\) \(36\) Il giro ottimo è \(\tilde\sigma=(1,2,4,5,3)\), l'unico di lunghezza \(z(I)=21\):
-
Rispetto al bound duale il gap assoluto è \(27-19=8\) e il gap relativo è \(\frac{8}{19}\approx 42.1\%\). Rispetto all'ottimo il gap assoluto è \(27-21=6\) e il gap relativo è \(\frac{6}{21}=\frac{2}{7}\approx 28.6\%\). La regola prende sempre l'arco disponibile più corto e lascia al caso gli ultimi archi: gli archi di chiusura \(\{5,4\}\) e \(\{4,1\}\) costano \(8\) e \(9\).
Il nearest neighbour dà \(\mathrm{UB}=27\), i due archi più corti danno \(\mathrm{LB}=19\), e l'enumerazione dei \(12\) giri dà \(z(I)=21\): \(19\le z(I)=21\le 27\).