TSP con eliminazione di sottocicli



Documenti analoghi
TSP con eliminazione di sottocicli

Problema del Trasporto. Container vuoti Verona 10 Perugia 12 Roma 20 Pescara 24 Taranto 18 Lamezia 40

Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza

b i 1,1,1 1,1,1 0,1,2 0,3,4

Pianificazione di Produzione in DEC

Problema della produzione dei monitor

Ottimizzazione Multi Obiettivo

3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Il Metodo Branch and Bound

MATEMATICA DEL DISCRETO elementi di teoria dei grafi. anno acc. 2009/2010

Problema del trasporto

Ottimizzazione Combinatoria

1 Breve introduzione ad AMPL

Introduzione. AMPL Introduzione. F. Rinaldi. Dipartimento di Matematica Università di Padova. Corso di Laurea Matematica. F. Rinaldi AMPL Introduzione

Intelligenza Artificiale

Introduzione al MATLAB c Parte 2

Esercizi Capitolo 6 - Alberi binari di ricerca

Ricerca Automatica. Esercitazione 3. Ascensore. Ascensore. Ascensore

PROVA FINALE V. AULETTA G. PERSIANO ALGORITMI II - -MAGIS INFO

Teoria in sintesi 10. Attività di sportello 1, 24 - Attività di sportello 2, 24 - Verifica conclusiva, 25. Teoria in sintesi 26

1. Considerazioni generali

Sistemi Operativi mod. B. Sistemi Operativi mod. B A B C A B C P P P P P P < P 1, >

Gestione Impresa. Mese Unità richieste

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Ricerca Operativa A.A. 2007/2008

Capitolo 5: Ottimizzazione Discreta. E. Amaldi DEI, Politecnico di Milano

Scopo del laboratorio

Metodi e Modelli per l Ottimizzazione Combinatoria Il problema del flusso di costo minimo

Seconda Prova di Ricerca Operativa. Cognome Nome Numero Matricola A 1/12 A 2/12

ESEMPIO P.L. : PIANIFICAZIONE DI INVESTIMENTI

Linguaggi di modellizzazione

SPC e distribuzione normale con Access

40 Algoritmi sui Grafi

H1 Hrms Gestione eventi/scadenze automatiche

Ricerca Operativa Esercizi sul metodo del simplesso. Luigi De Giovanni, Laura Brentegani

Sequenziamento a minimo costo di commutazione in macchine o celle con costo lineare e posizione home (In generale il metodo di ottimizzazione

Progetto di Reti di Telecomunicazione Modelli in Programmazione Lineare Problemi di flusso

mese richiesta

Schedulazione delle attività di un progetto in presenza di multi-calendari e di vincoli sulle risorse

STRUTTURE NON LINEARI

Algoritmi e strutture dati. Codici di Huffman

min 4x 1 +x 2 +x 3 2x 1 +x 2 +2x 3 = 4 3x 1 +3x 2 +x 3 = 3 x 1 +x 2 3x 3 = 5 Innanzitutto scriviamo il problema in forma standard: x 1 x 2 +3x 3 = 5

Ricerca Operativa e Logistica

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Esercizio 1 Dato il gioco ({1, 2, 3}, v) con v funzione caratteristica tale che:

Progetto e ottimizzazione di reti 2

Programmazione dinamica

Il problema del commesso viaggiatore

Esercizi di Ricerca Operativa I

Barriere assorbenti nelle catene di Markov e una loro applicazione al web

Appunti di Algoritmi e Strutture Dati. Grafi. Gianfranco Gallizia

La Programmazione Lineare

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme

Obiettivi dell esercitazione. Requisiti (cont.) Requisiti. Università di Roma La Sapienza A.A Facoltà di Ingegneria Sede di Latina

e-dva - eni-depth Velocity Analysis

Metodi Computazionali

Forze come grandezze vettoriali

IL PROBLEMA DELLO SHORTEST SPANNING TREE

Anno 3. Funzioni: dominio, codominio e campo di esistenza

Note del Corso di Modelli Biologici Discreti: Un paio di algoritmi DNA per risolvere SAT

L espressione torna invece sempre vera (quindi la soluzione originale) se cambiamo contemporaneamente il verso: 1 < 0.

1. Sia dato un poliedro. Dire quali delle seguenti affermazioni sono corrette.

Corrispondenze e funzioni

Capitolo 3: Ottimizzazione Discreta. E. Amaldi DEIB, Politecnico di Milano

- Trovare soluzione ottima primale ( con il simplesso o algoritmo analogo)

Algoritmi e Strutture Dati

Algoritmo proposto. Maria Silvia Pini, Francesca Rossi, K. Brent Venable. Dipartimento di Matematica Pura e Applicata Università di Padova

1. PRIME PROPRIETÀ 2

Esame di Ricerca Operativa del 19/01/2016

Laboratorio di Ricerca Operativa Cad Ingegneria Gestionale (BGER3 - I semestre) a.a Homework n 33. Docente: Laura Palagi

Ricerca Operativa e Logistica

Un modello matematico di investimento ottimale

Minimo Albero Ricoprente

Verifica della correttezza formale del numero di partita IVA

Fondamenti di Ricerca Operativa

Le Macchine di Turing

~ Copyright Ripetizionando - All rights reserved ~ STUDIO DI FUNZIONE

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Daniela Lera A.A

Modelli di Programmazione Lineare. PRTLC - Modelli

Ammortamento di un debito

Esame di Ricerca Operativa del 19/01/2016

Utilizzo delle formule in Excel

Guida all uso di Java Diagrammi ER

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE

Laboratorio di Algoritmi e Strutture Dati

Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora:

Crittografia. Primalità e Fattorizzazione. Corso di Laurea Specialistica. in Informatica

Sommario della lezione

Equilibrio bayesiano perfetto. Giochi di segnalazione

x u v(p(x, fx) q(u, v)), e poi

Ottimizzazione nella gestione dei progetti Capitolo 4: la gestione dei costi (Programmazione multimodale): formulazioni

Modelli di programmazione lineare. Il metodo grafico è basato su linearità della funzione obiettivo linearità dei vincoli

Esercizio su MT. Svolgimento

Esempio. Approssimazione con il criterio dei minimi quadrati. Esempio. Esempio. Risultati sperimentali. Interpolazione con spline cubica.

Prodotto Disponibilità Costo e rispettando le seguenti regole di composizione delle benzine:

Alberi binari di ricerca

risulta (x) = 1 se x < 0.

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

Transcript:

TSP con eliminazione di sottocicli Un commesso viaggiatore deve visitare 7 clienti in modo da minimizzare la distanza percorsa. Le distanze (in Km) tra ognuno dei clienti sono come segue: 7-8 9 7 9-8 79 9-7 7 7-9 9-8 9-8 (la matrice delle distanze è simmetrica). Formulare un modello di PLI e proporre un programma in AMPL che risolva il problema. Approfondimento (opzionale) Si parli di un possibile approccio euristico per la soluzione del TSP, considerando che sulla matrice delle distanze vale la disuguaglianza triangolare. Documento preparato da Leo Liberti

Soluzione Formalizziamo il problema come un grafo diretto completo G(V, A) dove V sono i clienti e A sono tutti gli archi possibili tra i nodi in V. I pesi sugli archi sono le distanze tra i clienti. Si deve cercare un cammino di peso minimo che tocchi tutti i nodi una e una sola volta. Formulazione Parametri:. sia V l insieme dei clienti da visitare;. per ogni i, j V sia d ij la distanza tra il cliente i e il cliente j. Variabili: per ogni i j V, sia x ij = se il commesso viaggia direttamente tra i e j, e altrimenti (x ij {, ). Funzione obiettivo: min i j V d ij x ij. Vincoli: x ij = i V (solo un successore) j V,j i i V,i j i S,j V \S x ij = j V (solo un predecessore) x ij S V (nessun sottociclo) x ij {, i j V. L ultimo vincolo dice che per ogni partizione dei vertici, ci dev essere almeno un arco nel taglio corrispondente. Questo impedisce la formazione di sottocicli non triviali (che ovviamente definirebbero una partizione dei vertici con un taglio associato vuoto). Dato che il numero dei sottoinsiemi propri S di un insieme V è un numero esponenziale nella cardinalità di V, la dimensione di un istanza del problema esposto sopra è esponenziale (e dunque non accettabile). Bisogna dunque adottare un opportuna strategia di soluzione. Inizialmente, il problema viene rilassato cancellando completamente il vincolo nessun sottociclo (in tal modo la dimensione dell istanza è polinomiale). Il rilassamento ottenuto viene risolto tramite le comuni tecniche di PLI. La soluzione trovata può non essere ammissibile per il vincolo nessun sottociclo : ovvero, potrebbero esserci dei sottocicli non banali. Cerchiamo quindi il sottociclo più piccolo, inseriamo nel problema rilassato un solo vincolo della classe di vincoli nessun sottociclo in modo che il sottociclo trovato venga rotto, e ri-ottimizziamo il problema. Si continua iterativamente finché la soluzione non presenta più alcun sottociclo. A quel punto la soluzione trovata è quella ottima. Documento preparato da Leo Liberti

Tentiamo prima un approccio manuale alla generazione dei cicli da rompere. Risolviamo prima il modello seguente. Modello AMPL # modello per tsp param n >, integer; set V :=..n; param d{v,v >= ; param numerocicli >=, integer, default ; set ciclo{..numerocicli; var x{v,v binary; minimize costociclo : sum{i in V, j in V : i!= j d[i,j]*x[i,j]; subject to successore {i in V : sum{j in V : i!= j x[i,j] = ; subject to predecessore {j in V : sum{i in V : i!= j x[i,j] = ; subject to nocicli {k in..numerocicli : sum{i in ciclo[k], j in V diff ciclo[k] x[i,j] >= ; Dati AMPL # tsp.dat param n := 7; param d : 7 := 8 9 7 9 8 79 9 7 7 7 9 9 8 9 8 7 ; Per risolverlo, usiamo il seguente file.run, in cui si inizializza la matrice delle distanze in modo che sia simmetrica. Algoritmo AMPL: file tsp-simple.run # leggi modello e dati model tsp.mod; data tsp.dat; # rendi simmetrica la matrice delle distanze for {i in V, j in V : i > j { let d[i,j] := d[j,i]; # risolvi option solver cplex; solve; # stampa display costociclo; display x; Si noti che siccome ciclo e inizializzato a una lista di insiemi vuoti, i vincoli di rottura dei sottocicli di fatto non sono stati inseriti. Otteniamo la soluzione seguente, che corrisponde infatti a tre cicli distinti: (,,, ), (,, ) e (, 7, ). Soluzione CPLEX (non ottima) Documento preparato da Leo Liberti

costociclo = 7 x [*,*] : 7 := 7 ; In pratica, abbiamo la situazione come nella figura qui sotto. 7 Aggiungiamo perciò un vincolo di rottura del sottociclo (,,, ) al modello: per S = {,, si impone i S,j V \S x ij. In AMPL, è sufficiente aggiungere le istruzioni seguenti nel file tsp-simple.run, prima dell istruzione solve;, e risolvere nuovamente il modello lanciando ampl < tsp-simple.run. let numerocicli := ; let ciclo[] := {,, ; Si ottiene la soluzione seguente, che essendo un ciclo Hamiltoniano, è ottima. Soluzione CPLEX (ottima) costociclo = x [*,*] : 7 := 7 ; La ciclo Hamiltoniano ottimo è (,,, 7,,,, ), raffigurato sotto. In generale, la soluzione non è unica (possono esistere più cicli Hamiltoniani con lo stesso costo), quindi si potrebbe trovare una soluzione diversa da questa. 7 Documento preparato da Leo Liberti

Descriviamo ora un algoritmo in AMPL per la generazione automatica dei sottocicli da rompere (per eseguirlo, usare il comando ampl < tsp.run). Algoritmo AMPL: file tsp.run # tsp.run - algoritmo per la rottura dei sottocicli # usa cplex e non stampare i messaggi del solutore numerico option solver cplex; option solver_msg ; # leggi modello e dati model tsp.mod; data tsp.dat; let numerocicli := ; # strutture dati per l algoritmo param nodosuccessore{v >=, integer; param nodocorrente >=, integer; # rendi simmetrica la matrice delle distanze for {i in V, j in V : i > j { let d[i,j] := d[j,i]; # algoritmo: risolvi il modello senza vincoli di rottura # dei sottocicli, trova un sottociclo, aggiungi il vincolo # corrispondente, e quando non esistono piu sottocicli propri, esci param termination binary; let termination := ; repeat while (termination = ) { # risolvi il problema solve; let numerocicli := numerocicli + ; # trova i successori di ogni nodo for {i in V { let nodosuccessore[i] := sum{j in V : j!= i j * x[i,j]; # trova un sottociclo let nodocorrente := ; let ciclo[numerocicli] := {; repeat { let ciclo[numerocicli] := ciclo[numerocicli] union {nodocorrente; let nodocorrente := nodosuccessore[nodocorrente]; until (nodocorrente = ); # stampa il sottociclo che vogliamo rompere printf "ciclo: ("; for {i in ciclo[numerocicli] { printf "%d, ", i ; printf ")\n"; # verifica se si puo terminare if (card(ciclo[numerocicli]) >= n) then { # se il sottociclo include tutti i nodi e Hamiltoniano, esci let termination := ; Documento preparato da Leo Liberti

printf "costo del ciclo hamiltoniano minimo: %d\n", costociclo; Soluzione numerica ciclo: (,,, ) ciclo: (,,, 7,,,, ) costo del ciclo hamiltoniano minimo: Documento preparato da Leo Liberti

Approfondimento: Soluzione Euristica Per la soluzione euristica, si consideri l euristica -approssimata per il TSP Euclideo (cioè la cui matrice delle distanze rispetta la disuguaglianza triangolare) ideata da Christofides. L euristica costruisce un ciclo Hamiltoniano nel modo seguente.. Si costruisce l albero di supporto di costo minimo T nel grafo G.. Si costruisce il matching M di costo minimo tra i vertici del grafo con cardinalità dispari.. Si forma un ciclo Euleriano che consiste dell unione di T e M. Si noti che ogni nodo ha un numero pari di lati adiacenti.. Per ogni vertice v tale che δ(v) (T M) > (ovvero per ogni v da cui si dipartono più di lati di T e M), si contraggono tutte le coppie di lati adiacenti a v tranne una. L operazione di contrazione di una coppia di lati {u, v, {v, w consiste nel sostituire questi lati con il lato {u, w (l operazione è sempre possibile perché il grafo è completo). Effettuando quest operazione per tutte le coppie di lati adiacenti a v tranne una, si rispettano i vincoli di predecessore e successore, perché v a quel punto avrà esattamente lati adiacenti. Applichiamo l euristica descritta all istanza in questione. Le figure sotto rappresentano: il grafo originale, l albero di supporto di costo minimo, il matching di costo minimo tra vertici di stella con cardinalità dispari, e l unione dei due a formare un ciclo Euleriano. Si noti tuttavia che in questa particolare istanza tutti i nodi hanno già grado, quindi il ciclo è già Hamiltoniano. Il costo del ciclo ottenuto con quest euristica è, e quindi in questo caso l euristica trova un ciclo Hamiltoniano di costo minimo. / / 9 original graph / 9 / 7 / 7 7 / / 8 / 8 / 8 / 9 / 7 / 9 / 7 / 9 8 / 8 9 / 9 / 8 9 / / / Figure : Il grafo originale. Documento preparato da Leo Liberti 7

/ / 9 sptree cost = 8 / 9 / 7 / 7 7 / / 8 / 8 / 8 / 9 / 7 / 9 / 7 / 9 8 / 8 9 / 9 / 8 9 / / / Figure : L albero di costo minimo. / / 9 matching cost: 9 / 9 / 7 / 7 7 / / 8 / 8 / 8 / 9 / 7 / 9 / 7 / 9 8 / 8 9 / 9 / 8 9 / / / Figure : Il matching di costo minimo tra vertici di grado dispari. Documento preparato da Leo Liberti 8

/ / 9 tour cost: / 9 / 7 / 7 7 / / 8 / 8 / 8 / 9 / 7 / 9 / 7 / 9 8 / 8 9 / 9 / 8 9 / / / Figure : Unione di albero e matching (soluzione approssimata). / / 9 optimal tour cost: / 9 / 7 / 7 7 / / 8 / 8 / 8 / 9 / 7 / 9 / 7 / 9 8 / 8 9 / 9 / 8 9 / / / Figure : La soluzione ottimale (uguale, in questo caso, a quella approssimata). Documento preparato da Leo Liberti 9