A UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 – Seconda prova intermedia 17 giugno 2013 ○ ○ Nome: Cognome: Matricola: Orale 21/06/2013 ore 14 aula N11 Orale 05/07/2013 ore 15 aula N23 Esercizio 1 Si è rotto un aereo che doveva trasportare un elevato numero di persone dalla città 3 alla città 8. Si rende quindi necessario utilizzare i posti disponibili in altri voli di linea per trasportare il massimo numero possibile di passeggeri da 3 a 8 utilizzando percorsi alternativi. In tabella è riportato un elenco di voli di linea tra coppie di città (da, a), ogni città è indicata con un numero da 1 a 8. Per ogni volo è riportato il numero di posti disponibili. Si assuma che per ciascuna città il volo in partenza sia sempre successivo al volo in arrivo, e con sufficiente anticipo perché un passeggero in arrivo possa sempre ripartire con uno dei voli in partenza. 1,5 5 voli posti 2,1 9 2,5 10 3,1 10 3,6 5 3,7 4 4,7 7 4,5 3 4,8 1 5,8 2 6,2 6 6,3 5 7,1 2 7,5 5 7,8 6 1. Calcolare il massimo numero di passeggeri che può raggiungere la città 8 a partire dalla città 3 utilizzando un opportuno algoritmo appreso durante il corso. 2. Dimostrare l’ottimalità della soluzione trovata utilizzando una tecnica appresa durante il corso. 3. Illustrare la strategia adottata per risolvere il problema. Soluzione 3. Il problema può essere formulato come problema di massimo flusso. I nodi del grafo sono le 8 città, gli archi sono associati ai voli disponibili e le capacità degli archi ai posti disponibili su ciascun volo. Per risolvere il problema possiamo quindi utilizzare l’algoritmo di Ford e Fulkerson. 1. La ricerca dei cammini aumentanti al primo passo genera l’albero dei cammini in figura, è quindi possibile aumentare di 4 unità il flusso da 3 a 8. 5 6 5 2 3 1 4 7 5 4 8 La successiva ricerca di un cammino aumentante porta all’albero in figura, è quindi possibile aumentare di 2 unità il flusso da 3 a 8. 1 5 5 6 2 5 3 5 2 8 La successiva ricerca di un cammino aumentante porta all’albero in figura, non è quindi possibile aumentare ulteriormente il flusso da 3 a 8. Il flusso ottenuto è quindi di 6 unità 1 3 3 6 3 2 3 3 5 E’ quindi determinato il taglio S={1,2,3,5,6} con N\S={4,7,8}. La capacità del taglio e il flusso ottenuto sono riportati in tabella. La capacità del taglio è quindi pari a 6 unità. 1,5 archi 2,1 2,5 3,1 2 flussi 5 capacità capacità taglio 9 10 10 3,6 3,7 2 4 5 4 4,7 4,5 7 3 4,8 1 4 5,8 6,2 2 2 2 6 6,3 7,1 7,5 7,8 4 5 2 5 6 2 2. Poiché abbiamo ottenuto un flusso ammissibile pari alla capacità di un taglio, è dimostrata l’ottimalità della soluzione trovata. Esercizio 2 Data la matrice di incidenza nodi/archi di un grafo non orientato in tabella: 1 2 3 4 5 6 7 8 9 10 Pesi a 1 1 b 1 c 1 d e f g 1 1 1 h i j k 1 1 1 1 m n o 1 1 1 1 1 1 1 1 1 1 3 l 3 4 1 2 3 1 5 2 3 4 5 1 1 1 4 1 1 1 2 4 1 1 6 1. Costruire la matrice di adiacenza del grafo. 2. Costruire un albero ricoprente di peso minimo tramite l’algoritmo di Prim-Dijkstra. Indicare in quale ordine vengono aggiunti gli archi all’albero. 3. Partendo dal grafo in tabella, come varia la soluzione ottima se l’arco (1, 4) ha peso 2? 4. Partendo dal grafo in tabella, come varia la soluzione ottima se l’arco (6, 5) ha peso 4? Per i punti 3 e 4, usare le condizioni di ottimalità sui cammini (o sui cicli) per ricalcolare la nuova soluzione ottima, senza eseguire nuovamente l’algoritmo. Soluzione 1. La matrice di adiacenza è la seguente: 1 2 3 4 5 6 7 8 9 10 1 0 1 1 1 0 0 0 0 0 0 2 1 0 0 0 0 1 0 0 0 0 3 1 0 0 0 1 0 0 0 0 0 4 1 0 0 0 1 0 0 0 0 1 5 0 0 1 1 0 1 1 1 1 0 6 0 1 0 0 1 0 1 0 0 0 7 0 0 0 0 1 1 0 1 0 0 8 0 0 0 0 1 0 1 0 1 0 9 0 0 0 0 1 0 0 1 0 1 10 0 0 0 1 0 0 0 0 1 0 2. l’albero ricoprente di peso minimo ottenuto tramite l’algoritmo di Prim-Dijkstra a partire dal nodo 1 è il seguente. Gli archi vengono aggiunti nell’ordine: 3. Se l’arco (1, 4) ha peso 2 (cioè diminuisce) si può utilizzare la condizione di ottimalità sui cammini (o sui cicli) per ricalcolare la nuova soluzione ottima, senza eseguire nuovamente l’algoritmo. Basta aggiungere l’arco all’albero causando un ciclo (fondamentale). Poiché esiste una soluzione ottima che non utilizza l’arco di peso massimo del ciclo si può eliminare quest’arco otenendo nuovamente un albero ricoprente di peso minimo. Nel caso si può eliminare l’arco (,) oppure l’arco (,), entrambi di peso 3. 4. Se l’arco (6,5) ha peso 4 (cioè aumenta), con lo stesso approccio del punto precedente si ottiene che l’arco da eliminare dal ciclo è proprio (6,5), ovvero al soluzione ottima non cambia. Domanda 3 Descrivere la sensibilità del valore ottimo della funzione obiettivo, in un problema di PL, alle variazioni dei termini noti e alle variazioni dei costi delle variabili fuori base. Dimostrare i risultati descritti. Illustrare l’interpretazione economica del duale nella PL. B UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 – Seconda prova intermedia 17 giugno 2013 ○ ○ Nome: Cognome: Matricola: Orale 21/06/2013 ore 14 aula N11 Orale 05/07/2013 ore 15 aula N23 Esercizio 1 Tizio, Caio e Sempronio si sfidano in una gara di velocità: vince chi raggiunge per primo la città 8. Tizio correrà a piedi a partire dalla città 1, Caio correrà in bicicletta a partire dalla città 3 e Sempronio correrà in motorino a partire dalla città 6. Tutti e tre partiranno contemporaneamente e potranno utilizzare solo i collegamenti ammissibili (unidirezionali) tra le 8 città della regione rappresentati dagli archi orientati in tabella. In tabella è riportata anche la distanza in miglia per ogni arco. Sapendo che Tizio corre a 10 miglia/h, Caio a 20 miglia/h e Sempronio a 30 miglia/h, si vuole determinare il vincitore della gara. Archi 1,5 2,1 2,5 3,1 3,7 4,7 4,5 4,8 5,8 6,2 6,3 6,4 7,1 7,5 7,8 Distanze 5 9 10 10 4 7 3 1 2 6 5 16 2 5 6 1. 2. Per ciascun partecipante alla gara, e utilizzando un opportuno algoritmo appreso nel corso, calcolare il percorso più breve per raggiungere la città 8 dalla rispettiva città di partenza, e in base a questo calcolo determinare il vincitore della gara. Illustrare la strategia di soluzione adottata per risolvere il problema. Soluzione 2. Il problema può essere formulato come problema di cammino minimo. I nodi del grafo sono le 8 città, gli archi sono associati ai i collegamenti ammissibili e i pesi degli archi alla lunghezza del collegamento. Noti i percorsi più brevi e le velocità di ciascuno è possibile calcolare il tempo di percorrenza. Per evitare di ripetere tre volte il calcolo delle distanze (da 1 a 8, da 3 a 8 e da 6 a 8) si può calcolare l’albero dei cammini minimi dal nodo 8 sul grafo con tutti gli archi inversi rispetto alla tabella, che si può calcolare applicando una sola volta l’algoritmo di Dijkstra. Il grafo su cui operare è il seguente: Archi 5,1 1,2 5,2 1,3 7,3 7,4 5,4 8,4 8,5 2,6 3,6 4,6 1,7 5,7 8,7 5 9 10 10 4 7 3 1 2 6 5 16 2 5 6 Distanze 1. Si ottiene l’albero dei cammini minimi in figura. 4 1 2 8 6 4 5 1 5 1 10 2 7 4 3 5 6 Quindi il cammino minimo da 1 a 8 nel grafo originale è 1 5 8, di peso 7; il cammino minimo da 3 a 8 nel grafo originale è 3 7 8, di peso 10; infine il cammino minimo da 6 a 8 nel grafo originale è 6 3 7 8, di peso 15. I tempi di percorrenza sono di 0,7 ore per Tizio e 0,5 per Caio e Sempronio, che quindi arrivano contemporaneamente a destinazione e sono vincitori ex aequo. Esercizio 2 In tabella sono riportati gli archi di una rete di flusso composta da 7 nodi 1…7. Per ogni arco è riportato un flusso iniziale e il valore della sua capacità massima. In particolare, 2 è il nodo sorgente e 7 è il nodo pozzo. Archi Flussi 1,3 0 1,4 0 2,1 0 2,3 4 2,6 0 2,7 0 3,6 3 3,4 1 4,5 1 4,6 0 5,7 1 6,5 0 6,7 3 7,2 3 4 6 5 7 4 1 4 5 1 2 5 3 8 4 Capacità 1. 2. 3. Partendo dai dati in tabella, determinare se il flusso iniziale dal nodo 2 al nodo 7 è ammissibile. Se lo è, mostrare il flusso iniziale e determinare una soluzione ottima al problema del massimo flusso utilizzando l’algoritmo di Ford e Fulkerson. Se non lo è, scaricare il flusso iniziale e risolvere il problema del massimo flusso utilizzando l’algoritmo di Ford e Fulkerson. Individuare un taglio di capacità minima tra i nodi 2 e 7. Evidenziare il taglio ottimo trovato. Partendo dalla soluzione ottima trovata al punto 1, si determini il nuovo flusso massimo se la capacità dell’arco (4, 5) è incrementata di 1 unità. Soluzione 1. Il flusso iniziale è ammissibile e di valore iniziale 1 (uscente da 2 ed entrante in 7). La ricerca di cammini aumentanti porta a selezionare i cammini: 2 7 flusso aumentante 1, flusso totale corrente 2. 2 7 flusso aumentante 3, flusso totale corrente 5. 2 6 7 flusso aumentante 4, flusso totale corrente 9. 2 1 4 2 7 flusso aumentante 1, flusso totale corrente 10. 2 3 4 6 5 7 flusso aumentante 1, flusso totale corrente 11. 2 3 6 5 7 flusso aumentante 1, flusso totale corrente 12. La ricerca di ulteriori cammini aumentanti termina con l’albero 1 4 2 5 1 3 4 E’ quindi determinato il taglio S={1,2,3,4} con N\S={5,6,7}. La capacità del taglio è pari a 12, ottenuta sommando le capacità degli archi diretti del taglio (2,7), (4,5), (4,6) (3,6), (2,6), quindi pari al massimo flusso. Domanda 3 Definire il problema di Flusso di costo minimo, illustrare un algoritmo noto per risolverlo e dimostrare che una base della matrice dei coefficienti del problema in forma standard corrisponde a un albero ricoprente della rete di flusso.