56
Il Problema del Commesso Viaggiatore

Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Embed Size (px)

Citation preview

Page 1: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Il Problema del

Commesso Viaggiatore

Page 2: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Avete mai pianificato un viaggio in piu’ tappe?

Quale metodo avete usato per minimizzare la distanza totale percorsa?

Page 3: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Cartina alla mano non sembra cosi’ difficile...soprattutto per poche tappe

Page 4: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Mettetevi pero’ nei panni dello staff di

Obama e provate a pianificare le tappe

della campagna elettorale negli USA...

Page 5: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

?

Page 6: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Definiamo meglio il problema

Page 7: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Traveling Salesman’s Problem (TSP)

• Un commesso viaggiatore deve visitare un certo numero di città

• Conosce la distanza da una città all’altra

• Vuole determinare il percorso più breve che gli permetta di partire da casa sua e di farvi ritorno dopo aver visitato ogni città una sola volta.

• Come può fare?

Page 8: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Caratteristiche del problema

• TSP e’ uno dei problemi matematici piu’ studiati in Informatica

• Appartiene alla classe dei problemi difficili (NP-hard)

• La prima formulazione risale al 1857 e all’icosian game inventato dal matematico William Hamilton

Page 9: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Icosian Game (1857)Scopo: trovare un tour lungo gli spigoli di un dodecaedro

Page 10: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Icosian Game: Scacchiera

Il tour deve passare una sola volta da ogni nodo E’ un caso molto particolare di TSP!

Page 11: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Forma generale TSP

• La formulazione generale considera forme geometrie qualsiasi e distanze tra le citta’

• Venne introdotta tra gli anni ‘40 e ’50• Nel corso degli anni ha trovato numerose istanziazioni

interessanti:– logistica e trasporti– costruzione di circuiti stampati (pianificazione del percorso

del trapano)– protocolli di routing– DNA sequencing– ...

Page 12: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Modelliamo e Studiamo TSP

Page 13: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Quali informazioni ci servono?

Page 14: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Citta’= nodi

AOSTA

MILANO

TORINO

GENOVA

Page 15: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Distanze = archi pesati

AOSTA

MILANO

TORINO

GENOVA

140

169

246

115 142

186

Page 16: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Modello = Grafo

Nodi=citta

Archi=strade

Pesi=distanze

F G

6

8

5

6

6

7

A B

C DE

92

3

2

4

4

Page 17: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Percorso in grafo

A,C,D,E,G,B = percorso con costo 4+2+2+2=12

F G

6

8

5

6

6

7

A B

C DE

92

3

2

4

4

Page 18: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Ciclo = Percorso chiuso

A,C,D,E,B,A = ciclo con costo 4+2+4+3+6

F G

6

8

5

6

6

7

A B

C DE

92

3

2

4

4

Page 19: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Ciclo hamiltoniano (Tour)

E’ un ciclo che visita TUTTI i nodi UNA SOLA volta

F G

6

8

5

6

6

7

A B

C DE

92

3

2

4

4

Page 20: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Percorso non hamiltoniano

F G

6

8

5

6

6

7

A B

C DE

92

3

2

4

4

Non visita tutti i nodi!

Page 21: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Percorso non hamiltoniano

F G

6

8

5

6

6

7

A B

C DE

92

3

2

4

4

A,C,F,D,E,G,E,...,G,E,B,A: G ed E visitati varie volte

Page 22: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

TSP come problema sui grafi

Dato un grafo G con archi pesati

vogliamo calcolare un

Ciclo Hamiltoniano di Costo Minimo

Page 23: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Esempio di grafo pesato

A B

C D

2

5 2

3

44

...Grafo non diretto = costo A,B=costo B,A

Page 24: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

I Cammino Hamiltoniano

A B

C D

2

5 2

3

44

A,C,D,B,A costo 5+3+2+2=12

Page 25: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

II Cammino Hamiltoniano

A B

C D

2

5 2

3

44

A,B,C,D,A costo 2+4+3+4=13

Page 26: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

III Cammino Hamiltoniano

A B

C D

2

5 2

3

44

A,C,B,D,A costo 5+4+2+4=16

Page 27: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Come si risolve TSP?

Page 28: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Soluzioni a TSP

• Trovare una soluzione esatta del problema TSP (cioe’ calcolare un tour minimo) e’ difficile anche per un elaboratore

• La difficolta’ e’ legata al numero di possibili percorsi che occorre esplorare per calcolare quello minimo

Page 29: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Per capire la difficolta’ del problema... facciamo due conti

• Negli USA ci sono 49 stati continentali + un distretto

• Supponiamo che Obama programmi di fare un solo comizio in ogni stato

Page 30: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Quanti percorsi devo considerare per calcolare il migliore?

• Partendo da Washington, Obama ha 49 possibili scelte per la prima tappa

• Fissata la prima tappa, rimangono 48 scelte per la seconda tappa

• Fissata la seconda tappa, rimangono 47 scelte per la terza tappa

• ...

Page 31: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Il numero di possibili percorsi tra i quali trovare il piu’ breve e’

49! = 49 * 48 * ... * 3 * 2 * 1

... nell’ordine di 1062 cioe’ maggiore del numero di  atomi di cui è composta la Terra

Page 32: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

In generale

• Grafo completo = esiste un arco per ogni coppia di nodi

• Il numero di cicli hamiltoniani in un grafo completo con n nodi è pari a (n-1)!

• Il numero di cicli hamiltoniani cresce esponenzialmente col numero dei nodi

Page 33: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Si puo’ veramente risolvere?

Page 34: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Si, e’stato calcolato nel 1954!

Page 35: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Si puo’ fare anche per molte piu’ citta’!  Es. 13,509 citta’

Page 36: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Metodi di risoluzione per TSP

Page 37: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Come si puo’ fare?• Per poter affrontare questo tipo di problemi

dobbiamo necessariamente programmare delle soluzioni su uno o piu’ elaboratori

• Per calcolare le soluzioni usiamo quindi dei programmi che rappresentano i passi che l’elaboratore deve eseguire (algoritmo)

• Lo sviluppo di algoritmi per risolvere problemi come TSP e’ uno degli obiettivi principali dell’Informatica

Page 38: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Algoritmo

• Algoritmo: sequenza di istruzioni che deve eseguire l’elaboratore

• Si scrivono usando i linguaggi di programmazione• Esempi di istruzioni:

– memorizza ... in ...

- confronta ... con ...

- per ogni valore in ... esegui....

- ripeti ... fino a che ... diventa vera

Page 39: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Algoritmi per TSP

Algoritmi esatti

Applicabili solo a problemi con un numero di città relativamente basso

Algoritmi euristici

Producono soluzioni probabilmente buone, ma impossibili da provare essere ottimali

Page 40: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Un algoritmo esatto

Generate & TestPer ogni permutazione P di [1...N]– calcola il costo di C dei pesi sugli archi del

ciclo indotto da P– se P e’ minore dei precedenti calcolati

memorizza il cammino in Min

Alla fine Min contiene un ciclo “minimo”

Page 41: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Raffinamento

MinD=MAX_INT

MinP=nullo

Per ogni permutazione P=[i1,....,iN] di [1...N]

– S=dist(i1,i2)+....+dist(iN,i1)

– se S < MinD allora MinP=P MinD=S

Alla fine MinP contiene tour minimo

Page 42: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Problema

• Abbiamo visto che per TSP con molte citta’ il numero di possibili percorsi puo’ essere astronomico!

• Provate a pensare e scrivere un algoritmo euristico... quello che probabilmente usate nei vostri viaggi...

Page 43: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Un Algoritmo Euristico

Nearest Neighbour (NN)

• Partendo da un nodo iniziale scelto a piacere, ci muoviamo sempre verso la citta’ piu’ vicina non ancora visitata

• L’algoritmo termina quando abbiamo visitato tutte le citta’

Page 44: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Esempio Nearest Neighbour

2

5 2

3

4

A B

CD

4

...

Page 45: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Algoritmo Nearest Neighbour

• I = nodo iniziale

• Fino a che ho ancora nodi da visitare – Sia J il nodo non ancora visitato piu’ vicino ad I

• marco J come visitato

– proseguo la ricerca ponendo I=J

• La sequenza dei nodi marcati rappresenta il ciclo hamiltoniano

Page 46: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Osservazioni su NN

• E’ un algoritmo intuitivo• L’algoritmo Nearest Neighbour non da’ sempre la

soluzione ottimale (cercare di ottenere un vantaggio immediato non sempre e’ la scelta migliore...)

• Tuttavia e’ una buona approssimazione dell’algoritmo ottimale

Page 47: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Esistono molti altri algoritmi

• Algoritmi basati su programmazione intera lineare (LIP)– si codifica il problema come un insieme di

disequazioni ed una funzione costo– si usano euristiche per problemi di LIP

• Algoritmi genetici

• ...

Page 48: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Sistemi per risolvere TSP

• Concorde: http://www.tsp.gatech.edu/

• Nel 2004 ha calcolato un tour minimo attraverso24.978 citta’ in Svezia (72.500 km)

• Idea: si calcola una soluzione con unalgoritmo euristico e poi si controlla che sia ottimale

Page 49: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Uso del calcolo dei percorsi minimi

• Google map: http://maps.google.it/

• Trenitalia: http://trenitalia.it/

• AMT: http://www.amt.genova.it/pianifica/calcola_percorso.asp

• ...

Page 50: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Prima della pratica ... un po’ di esercizi di riepilogo...

Page 51: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Quanti e quali cicli hamiltoniani contiene il seguente grafo?

2

5 6

3

A B

CD

4

31

1

Page 52: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Applicate l’algoritmo Nearest Neighbour al seguente grafo a partire dal nodo A

F G

6

8

5

6

6

3

A B

C DE

92

3

2

4

1

4

3

5

8

Page 53: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Applicate l’algoritmo Nearest Neighbour al seguente grafo a partire dal nodo E

F G

6

8

5

6

6

3

A B

C DE

92

3

2

4

1

4

3

5

8

Page 54: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Aggiungete pesi (qualsiasi) sugli archi in modo che la soluzione calcolata con l’algoritmo NN a

partire dal nodo A non sia quella ottimale

A B

C D

Page 55: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

.

Disegnate un grafo nel piano Cartesiano (nodi=punti, pesi sugli archi=distanze tra i

punti) per il quale NN non restituisce la soluzione ottimale

Page 56: Il Problema del Commesso Viaggiatore. Avete mai pianificato un viaggio in piu tappe? Quale metodo avete usato per minimizzare la distanza totale percorsa?

Provate a risolvere l’icosian game...Cioe’ a calcolare un tour nel seguente grafo