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.