Richiami di Teoria dei Grafi

Transcript

Richiami di Teoria dei Grafi
Richiami di Teoria dei Grafi
Paolo Detti
Dipartimento di Ingegneria dell’Informazione
Università di Siena
Teoria dei grafi
La Teoria dei Grafi costituisce, al pari della Programmazione
Matematica, un corpo metodologico per la modellazione e
soluzione di problemi decisionali
Molti problemi di ottimizzazione
rappresentazione grafica.
hanno
una
Sono note efficienti tecniche risolutive basate sui Grafi.
naturale
Origini
La Teoria dei Grafi è stata introdotta dal matematico svizzero
Eulero (1707 - 1783) che formulò utilizzando i grafi il problema
dei ponti di Könisberg (città Prussiana):
C
A
D
Fiume Pregel
B
Partendo da una qualsiasi area di terra è possibile tornare al
punto di partenza attraversando tutti i ponti una ed una sola
volta?
Se si associano alle zone di terra dei punti (nodi o vertici) e ai
ponti dei tratti di linea (archi o spigoli)
il problema dei ponti di Könisberg è modellato dal Grafo
C
A
D
B
Eulero si servì di questo grafo per stabilire che era impossibile
trovare il percorso richiesto, con i ponti così distribuiti. E’ invece
possibile se il numero di archi incidente in ogni nodo è pari.
Definizioni
Un grafo G=(V,E) è definito da:
• un insieme V di nodi;
• un insieme E di archi.
Un grafo si dice orientato se gli archi hanno un orientamento
altrimenti si dice non orientato
C
A
B
C
D
A
B
D
Definizioni
(grafi non orientati)
Dato l’arco e=(a, b)
a
• a, b sono detti i nodi estremi di e
• e è detto arco incidente in a e b
b
• a, b sono detti nodi adiacenti
• due archi si dicono adiacenti se hanno un nodo in comune
Dato il nodo a di G
• l’Intorno di a, indicato con N(a), è l’insieme dei nodi adiacenti
ad a
• la stella di a, indicata con δ(a), è l’insieme degli archi incidenti
in a
3
1
4
2
5
N(1) = {2, 3}
δ(3) = {(1,3), (3,4), (3,5)}
Definizioni
(grafi orientati)
Dato un arco orientato e=(a, b)
a
• e è detto arco uscente da a (nodo coda)
• e è detto arco entrante in b (nodo testa)
• a si dice predecessore diretto di b
• b si dice successore diretto di a
Dato un nodo a di un grafo orientato G
• δ+(a) è l’insieme degli archi uscenti da a
• δ−(a) è l’insieme degli archi entranti in a
• un nodo con soli archi entranti è detto pozzo
• un nodo con soli archi uscenti è detto sorgente
1
3
0
4
2
5
δ+(5) = {(3,5), (4,5)}
δ−(2) ={(0,2), (1,2)}
b
Definizioni
Dato un Grafo G=(V, E) con V={v1, …, vn} ed E={e1, …, em}
un cammino è una sequenza di archi p={eh1, eh2, …, ehq}, tali
che ogni due archi consecutivi sono adiacenti
1
3
1
0
4
2
5
3
0
4
2
5
Definizioni
Un cammino è detto semplice se gli archi e i nodi del cammino
sono tutti distinti altrimenti si dice non semplice
1
3
1
0
4
2
3
0
4
5
2
5
un cammino è orientato se per ogni arco e=(i, j) del cammino, il
nodo i è la coda di e ed il nodo j è la testa di e
0
4
2
5
Definizioni
Un cammino è detto chiuso se i nodi estremi del cammino
coincidono
Un cammino semplice e chiuso è detto ciclo
1
3
0
4
2
5
Un Grafo G si dice connesso se per ogni coppia di nodi a e b
esiste un cammino da a a b
1
3
1
0
4
2
5
3
0
4
2
5
Definizioni
Un ciclo orientato
1
3
0
4
5
2
Un ciclo non orientato
1
3
0
4
2
5
Definizioni
Un cammino chiuso in un grafo è detto ciclo Euleriano se passa
una ed una sola volta su tutti gli archi del grafo. Un ciclo
Euleriano può non esistere in un grafo.
Grafo non Euleriano
Grafo Euleriano
C
3
1
0
A
4
D
2
B
5
Definizioni
Un ciclo in un grafo è detto ciclo Hamiltoniano se passa una ed
una sola volta su tutti i nodi del grafo. Un ciclo Hamiltoniano può
non esistere in un grafo.
Grafi Hamiltoniani
C
3
1
0
A
4
D
2
B
5
Definizioni
Dato un grafo non orientato G=(V,A) e un sottoinsieme S di V
Taglio in un grafo
Una taglio δ (S) è l’insieme di archi con un estremo in S e l’altro
in V\S
1
3
4
2
5
S= {1, 3}
δ(S) = {(1,2), (3,4), (3,5)}
Definizioni
Dato un grafo G=(V,A) orientato e un sottoinsieme S di V
Taglio in un grafo
Il taglio δ+ (S) è l’insieme di archi con coda in S e testa in V\S
Il taglio δ− (S) è l’insieme di archi con testa in S e coda in V\S
1
3
0
4
2
5
S ={0,1,3}
δ+(S) = {(0,2),(1,2),(3,4)}
δ−(S) ={(3,5)}
Definizioni
Grafo bipartito G=(V1, V2, A)
L’insieme dei nodi V è divisibile in due sottoinsiemi V1 e V2
Non ci sono archi in A che collegano due nodi di V1 o due nodi
di V2
1
2
4
3
5
Definizioni
Una foresta è un grafo senza cicli
1
3
0
4
2
5
1
3
0
4
2
5
Definizioni
Un Albero T=(V,A) è un grafo che soddisfa una delle seguenti
definizioni:
• è una foresta conessa
• è connesso e non contiene cicli
• è connesso ed ha |V|-1 archi
• per ogni coppia di nodi esiste un solo cammino che li connette
• è connesso e la rimozione di un arco lo rende disconnesso
1
3
0
4
2
5
Definizioni
Dato un grafo G=(V,A)
una foresta ricoprente F =(V’,A’) di G
è una foresta tale che
V’=V
1
3
0
1
4
3
0
4
1
2
5
5
2
3
0
4
2
5
Definizioni
Dato un grafo G=(V,A)
albero ricoprente T =(V’,A’)di G
è un albero tale che
V’=V
1
3
0
1
4
3
0
4
1
2
5
5
2
3
0
4
2
5
Il problema del Cammino di costo minimo su grafi
Siano dati
• un grafo orientato G=(V, E)
• un costo cij associato ad ogni arco (i, j)
• una coppia di nodi s e t
il problema consiste nel trovare un cammino semplice orientato
da s a t la cui somma dei costi degli archi ha valore minimo.
3
1
s
1
3
3
1
t
2
2
Il problema dei trasporti
Siano dati
• un grafo orientato bipartito G=(A,B,E)
• A, insieme dei nodi fornitori (origini)
• B, insieme dei nodi domanda (destinazioni)
• una quantità disponibile di per ogni nodo fornitore in A
• una quantità richiesta rj per ogni nodo domanda in B
• un costo unitario di trasporto cij associato ad ogni arco (i, j) di E
Il problema
Il problema consiste nel determinare quanto trasportare su
ciascun arco in modo da soddisfare la domanda
Il problema dei trasporti
Definizione delle variabili:
xij la quantità di flusso che scorre nell’arco (i,j), per ogni (i,j) ∈ E
min
∑c x
( i , j )∈E
ij
ij
∑x
ij
≤ di
∀i ∈ A
∑x
ij
≥ rj
∀j ∈ B
i ∈A
j ∈B
x ij ≥ 0
∀(i,j) ∈ E
Il Problema del Flusso su Reti a Costo Minimo
(Minimum Cost Network Flow)
Il problema di Flusso a Costo Minimo consiste nel determinare
la via più economica per trasportare una determinata quantità di
un bene da uno o più punti di produzione o immagazzinamento
ad uno o più punti di consumo, attraverso una rete di trasporto
data
Esistono algoritmi di soluzione estremamente efficienti (più
efficienti dei metodi utilizzati per la soluzione di problemi di PL
generici) per il calcolo della soluzione di Problemi di Flusso a
Costo Minimo
Il Modello del Flusso su Reti a Costo Minimo
(Minimum Cost Network Flow)
Dati
• Il grafo G=(V, E) della rete
• Un insieme di nodi fornitori S⊂V e la quantità di bene
disponibile a(i) per ogni i ∈ S
• Un insieme di nodi domanda D⊂V e la quantità di bene
richiesta b(i) per ogni i ∈ D
• I costi unitari di trasporto cij, le capacità superiori uij e inferiori
lij ad ogni arco (i,j) di E
Il Modello del Flusso su Reti a Costo Minimo
(Minimum Cost Network Flow)
Il Problema
Decidere quanto flusso inviare su ciascun arco in modo tale che
• le capacità sugli archi siano rispettate
• ad ogni nodo sia soddisfatto il bilanciamento di flusso:
a( i ) se i è un nodo fornitore

Flusso uscente da i − Flusso entrante in i = − b( i ) se i è un nodo domanda
0 altrimenti

• il costo totale del flusso sulla rete sia minimo
Il Modello del Flusso su Reti a Costo Minimo
(Minimum Cost Network Flow)
Un esempio ed una soluzione ammissibile
(i costi degli archi non sono riportati)
Nodi fornitori
Nodi domanda
10
a(1)=10
10
4
1
10
a(2)=15
a(3)=10
2
6
b(6)=20
7
b(7)=15
5
3
10
i
5
10
lij, uij, cij
j
l ij = 0

uij = +∞
Il Modello del Flusso su Reti a Costo Minimo :
Una formulazione di PL
Definizione delle variabili:
xij la quantità di flusso che scorre nell’arco (i,j), per ogni (i,j) ∈ E
Funzione obiettivo:
min
∑c x
( i , j )∈E
ij
ij
Upper bound sulle variabili:
x ij ≤ uij
∀(i,j) ∈ E
Lower bound sulle variabili:
x ij ≥ l ij
∀(i,j) ∈ E
Vincolo sul bilanciamento del flusso:
a(i ) ∀i ∈ S

∑+ xij − ∑− x ji = − b(i ) ∀i ∈ D
( i , j )∈δ ( i )
( j ,i )∈δ ( i )
0 altrimenti

Condizione:
affinché il problema abbia una soluzione ammissibile deve
essere:
∑ a(i ) = ∑ b(i )
i ∈S
i ∈D
Formulazione complessiva
min
∑c x
( i , j )∈E
ij
ij
a(i ) ∀i ∈ S

∑+ xij − ∑− x ji = − b(i ) ∀i ∈ D
( i , j )∈δ ( i )
( j ,i )∈δ ( i )
0 altrimenti

x ij ≥ l ij
∀(i,j) ∈ E
x ij ≤ uij
∀(i,j) ∈ E
Proprietà:
La matrice dei coefficienti è Totalmente Unimodulare (matrice di
incidenza di un grafo diretto)
Se le quantità a(i ), b( i ), l ij , u ij sono intere allora esiste un
flusso ottimo x* intero (calcolabile).
Il Modello del Flusso su Reti a Costo Minimo
(Minimum Cost Network Flow)
In pratica, un problema di flusso su reti a costo minimo può
essere risolto con algoritmi combinatori estremamente efficienti
(polinomiali), che sfruttano la struttura della rete.
Inoltre, esiste una versione del metodo del simplesso, nota con
il nome di simplesso su reti, messa a punto proprio per la
soluzione di problemi di flusso su reti a costo minimo.
Ottimizzazione dei costi di trasporto e dimensionamento della
capacità produttiva
Descrizione del problema
Un’industria alimentare produce alimenti in 3 diversi impianti. Gli alimenti una
volta prodotti possono essere trasportati direttamente a 2 diversi clienti,
oppure trasportati e stoccati in 2 magazzini e poi consegnati ai clienti.
Dati
Il costo di produzione è lo stesso per ogni impianto.
Il costo di stoccaggio è lo stesso per ogni magazzino.
Ogni impianto ha una capacità produttiva limitata.
E’ nota la domanda di alimenti di ogni cliente.
Sono dati i costi di trasporto e produzione/stoccaggio, per tonnellata di
alimenti, tra ogni coppia di punti.
Possono essere trasportate al più 200 tonnellate di alimenti tra ogni coppia
di punti.
Obiettivo
L’industria vuole decidere quanto produrre in ogni impianto e quanto
stoccare in ogni magazzino, in modo tale che il costo totale di trasporto dagli
impianti verso i clienti sia minimo e la domanda dei clienti sia soddisfatta.
Ottimizzazione dei costi di trasporto e dimensionamento della
capacità produttiva
Impianti
200
Clienti
400
300
180
100
Capacità (ton per anno)
Domande (ton per anno)
Costi di trasporto e produzione/stoccaggio (migliaia di Euro per ton)
Magazzino 1 Magazzino 2 Cliente 1 Cliente 2
Impianto 1
2,0
1,0
2,0
4,0
Impianto 2
1,0
1,0
8,0
9,0
Impianto 3
1,0
0,5
10,0
8,0
Magazzino 1
5,0
1,0
Magazzino 2
2,0
7,0
-
Ottimizzazione dei costi di trasporto e dimensionamento della
capacità produttiva
Il problema può essere modellato con un grafo orientato, associando un
nodo ad ogni impianto, magazzino e cliente. Un arco orientato esprime il
fatto che può essere trasportata una certa quantità di alimenti tra i due nodi
estremi dell’arco.
Impianti
Clienti
4
200
1
300
2
100
Magazzini
6
400
7
180
3
5
Capacità (ton per anno)
Domande (ton per anno)
Ad ogni nodo impianto è associato un valore pari alla capacità produttiva
Ad ogni nodo cliente è associato un valore pari alla domanda
Ottimizzazione dei costi di trasporto e dimensionamento della
capacità produttiva
Ad ogni arco (i,j) del grafo sono associati una capacità uij, un costo di
trasporto e produzione cij per tonnellata (per gli archi uscenti dagli impianti)
ed un costo di trasporto e stoccaggio cij per tonnellata (per gli archi uscenti
dai magazzini).
i
uij, cij
j
uij = 200 per ogni arco
Costi di trasporto (migliaia di Euro per ton)
Impianto 1
Impianto 2
Impianto 3
Magazzino 1
Magazzino 2
Magazzino 1 Magazzino 2 Cliente 1 Cliente 2
2,0
1,0
2,0
4,0
1,0
1,0
8,0
9,0
1,0
0,5
10,0
8,0
5,0
1,0
2,0
7,0
Ottimizzazione dei costi di trasporto e dimensionamento della
capacità produttiva
Condizione di ammissibilità
La somma delle capacità produttive (600) eccede la somma
delle domande (580)
Impianti
Clienti
4
200
1
300
2
100
Magazzini
6
400
7
180
8
20
3
5
Capacità (ton per anno)
Domande (ton per anno)
Si introduce un nodo domanda fittizio con valore 600-580=20
connesso ai nodi fornitori con archi di capacità pari a 20 e costo
nullo
Soluzione ottima del Problema
Impianti
200
1
Magazzini
200
4
100
6
400
7
180
8
20
180
180
300
Clienti
2
200
20
100
3
100
Capacità (ton per anno)
5
Domande (ton per anno)
Costo di trasporto complessivo: 1310 mila Euro