Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1 2 3
Struttura delle reti logistiche
Struttura logistica ad assemblaggio
1
2
7
3
4
8
5 6
Struttura delle reti logistiche
Struttura logistica arborescente (rete di distribuzione)
5 8
1
4
7
2
3
6
Costi in logistica
• Costo per l’acquisizione dei materiali (soggetto a
sconti e incertezze sul valore futuro)
• Costi di ordinazione
• Costi di mantenimento o perdita del valore delle
scorte
• Costi fissi e variabili di trasporto
• Costi per la realizzazione di impianti e centri di
distribuzione
• Costi legati alla movimentazione dei materiali nei
magazzini
Progetto di reti logistiche e trasporti
• Determinare la struttura di una rete logistica significa
dimensionare impianti di produzione, centri di
distribuzione, punti vendita, flussi dei materiali.
A
Fiume Pregel D
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
A D
C C
A D A D
B B
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
• a, b sono detti nodi adiacenti b
• 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 N(1) = {2, 3}
δ(3) = {(1,3), (3,4), (3,5)}
2
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)
b
• 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
3
1
0 4 δ+(5) = {(5,3), (5,4)}
δ-(2) ={(0,2), (1,2)}
5
2
Definizioni
3 3
1 1
0 4 0 4
5 5
2 2
Definizioni
5 5
2 2
0 4
5
2
Definizioni
Un cammino è detto chiuso se i nodi estremi del cammino
coincidono
Un cammino semplice e chiuso è detto ciclo
3
1
0 4
5
2
5 5
2 2
Definizioni
Un ciclo orientato
3
1
0 4
5
2
3
1
0 4
5
2
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.
5
2
B
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 4
A D
5
2
B
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
3
1
4 S= {1, 3}
δ(S) = {(1,2), (3,4), (3,5)}
2
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
3
1
0 4 S ={0,1,3}
δ+(S) = {(0,2),(1,2),(3,4)}
2
5 δ-(S) ={(5,3)}
Definizioni
Grafo bipartito G=(V1, V2, A)
2 4
3 5
Definizioni
Una foresta è un grafo senza cicli
3
1
0 4
3
1
5 0
2 4
5
2
Definizioni
Un Albero T=(V,A) è un grafo che soddisfa una delle seguenti
definizioni:
3
1
0 4
5
2
Definizioni
Dato un grafo G=(V,A)
3
1 5
2
0 4
3
1
0 4
5
2
5
2
Definizioni
Dato un grafo G=(V,A)
3
1 5
2
0 4
3
1
0 4
5
2
5
2
Il Problema 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 del 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
⎩
a(2)=15 2
5
7 b(7)=15
a(3)=10 3
5 10
10
Funzione obiettivo:
min ∑c x ij ij
( i , j )∈E
Upper bound sulle variabili:
x ij ≤ uij ∀(i,j) ∈ E
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 ij ij
( i , j )∈E
⎧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 e matrici identità)
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)
Metodi di soluzione:
• 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.
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 Clienti
200
400
300
180
100
300 2
7 180
100 3
5
Capacità (ton per anno) Domande (ton per anno)
j
uij = 200 per ogni arco
300 2
7 180
100 3
5
300 2
7 180
100 3
5 8 20
200 4
200 1
6 400
180 180
300 2
200
20 7 180
100 3 100
100 5 8 20
Siano dati
• un grafo orientato G=(V, E)
• un costo cij associato ad ogni arco (i, j)
• una coppia di nodi s e t
Siano dati
• un grafo orientato bipartito G=(A,B,E)
• A, insieme dei nodi fornitori
• B, insieme dei nodi domanda
• una quantità disponibile bi per ogni nodo fornitore in A
• una quantità richiesta di 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 e minimizzare i
costi di trasporto.
Il problema dei trasporti
min ∑c x ij ij
( i , j )∈E
∑x ij
≤ bi ∀i ∈ A
j ∈B
∑x ij
≥ dj ∀j ∈ B
i ∈A
x ij ≥ 0 ∀(i,j) ∈ E
Il problema dei trasporti
Nodi domanda Nodi fornitore
b1 1 d1
4
b2 2
5 d2
b3 3
min ∑ cij x ij
(i, j )∈E
∑x ij
≤ bi ∀i ∈ A
j ∈B
∑x ij
≥ dj ∀j ∈ B
i ∈A
x ij ≥ 0 ∀(i, j) ∈ E
Proprietà:
La matrice dei coefficienti è Totalmente Unimodulare (matrice di
incidenza di un grafo bipartito)
Se le quantità bi e dj sono intere allora esiste un flusso ottimo x*
intero.
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
min ∑c x ij ij
( i , j )∈E
⎧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
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
2 (3,4) 3 2 (3,4) 3
(5,2) (5,5)
1 1
(2,1) (2,1)
(4,3) (4,3)
5 (4,3) 4 5 (4,3) 4
i (xij, cij) j i (xij, cij) j
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Definizioni
Dato un flusso ammissibile x sulla rete G, un arco (i,j) è detto
• libero se lij < xij < uij
• vincolato se xij = lij oppure xij = uij
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Definizioni
Dato un flusso ammissibile x sulla rete G, un arco (i,j) è detto
• libero se lij < xij < uij
• vincolato se xij = lij oppure xij = uij
2 (3,4) 3
(5,2) 2 3-a 3
1
(2,1) 5+a
1
2+a
(4,3)
4
5 (4,3) 4-a
4
5 4+a
i (xij, cij) j
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
3−a ≥ 0 5+a
2 3-a 3
8
2 0 3
1 1
4−a ≥ 0 2+a 5
4-a 1
4 4
⇒a≤3 5 4+a 5 7
2 (3,4) 3
(5,5)
1
(2,1)
2 3-a 3
(4,3) 5+a
4
5 (4,3) 1
2+a
i (xij, cij) j
4-a
4
5 4+a
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Poiché diminuendo il flusso nel ciclo diminuisce il costo, il valore di a può
essere diminuito il più possibile a condizione che i flussi sugli archi non
diventino negativi (e che le capacità massime degli archi siano rispettate):
5+a ≥0 2 3-a 3 2 5 3
5+a 3
1 1
2+a ≥0 2+a 0
4-a 6
4+a ≥0 5 4+a
4
5 2
4
⇒ a ≥ −2
Il flusso è ancora ammissibile, un arco ha ora flusso nullo (è vincolato), ed il
costo della soluzione è diminuito
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Dato un flusso ammissibile sulla rete, il procedimento sopra descritto
si può applicare a tutti i cicli della rete, anche ai cicli con costo unitario
nullo (in questo caso non avremo nessun miglioramento della
soluzione), per portare il flusso di un arco del ciclo al valore 0,
ottenendo quindi una soluzione ammissibile senza cicli.
Se assumiamo lower bound diversi da 0 ed upper bound finiti sulle
variabili xij, è possibile con ragionamenti analoghi modificare i flussi
sugli archi in modo da non peggiorare la soluzione, mantenere
l’ammissibilità e portare il flusso su un arco del ciclo al suo valore
minimo (lij) o massimo (uij)
(2,3)
1 (1,6) 1
(3,3) (1,1)
(1,2)
4 4
5 (0,5) 5
i j
1 1 1
4 4
4 5 5
5
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
a(1)=10
4 T2
5 a(5)=b(5)=0
b(4)=20 3
2
b(3)=5
a(2)=15
Si noti che deve
T1 1
essere:
∑ (a(i) − b(i)) + ∑ (a(i) − b(i)) = 0 a(1)=10 x53=10
4
i∈T1 i∈T2
5
a(5)=b(5)=0 b(4)=20
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
In modo simile è possibile calcolare il flusso anche nel caso in
cui la capacità massima degli archi sia finita
(supponiamo che gli archi (1,2) e (2,5) siano in U)
a(2)=15
2 3
b(3)=5
u12=3
1
u25=4
a(1)=10
4 T2
5 a(5)=b(5)=0
b(4)=20 a(2)=15
2 3
b(3)=5
T1 3
1
4
a(1)=10 x53=11
4
5
a(5)=b(5)=0 b(4)=20
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Teorema
La struttura di un albero ricoprente T,L,U è ottima per il
problema di flusso a costo minimo se è ammissibile e se esiste
una scelta dei potenziali dei nodi π(i) tale che:
c 'ij = 0 ∀(i , j ) ∈ T
c 'ij ≥ 0 ∀(i , j ) ∈ L
c 'ij ≤ 0 ∀(i , j ) ∈ U
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Teorema
La struttura di un albero ricoprente T,L,U è ottima per il problema di flusso a
costo minimo se è ammissibile e se esiste una scelta dei potenziali dei nodi
π(i) tale che:
1. c 'ij = 0 ∀(i , j ) ∈ T
2. c 'ij ≥ 0 ∀(i , j ) ∈ L
3. c 'ij ≤ 0 ∀(i , j ) ∈ U
Dim
Sia x* la soluzione associata alla struttura T,L,U e supponiamo che esistano
dei potenziali ai nodi che soddisfano le condizioni 1-3.
Si noti che minimizzare ∑ cij x ij equivale a
(i,j )∈A
minimizzare ∑ c' ij
x ij = costante
(i,j )∈A
⎛ ⎞
= min ∑ (cij − π (i) + π ( j))x ij = min ∑ cij x ij +∑ ⎜⎜ − ∑ π (i)x ij + ∑ π (i)x ji ⎟⎟
(i,j )∈A (i,j )∈A i∈V ⎝ (i,j )∈δ (i )+ ( j,i )∈δ (i )− ⎠
− π ( i )a( i ) se i nodo fornitore
π ( i )b( i ) se i nodo domanda
0 se i nodo di transito
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Dim (segue)
Dalle condizioni
1. c 'ij = 0 ∀(i , j ) ∈ T
2. c 'ij ≥ 0 ∀(i , j ) ∈ L
3. c 'ij ≤ 0 ∀(i , j ) ∈ U
Si ha
min ∑ c' x ij ij
= min ∑ c' x − ∑ ij ij
| c 'ij | x ij
(i,j )∈A (i,j )∈L (i,j )∈U
Si noti che aggiungere una costante k a tutti i potenziali non modifica i costi
ridotti
c 'ij = cij − π (i ) + π ( j ) = cij − [π (i ) + k ] + [π ( j ) + k ]
• I potenziali di tutti gli altri nodi sono calcolati in modo tale che
c 'ij = cij − π (i ) + π ( j ) = 0 ∀(i , j ) ∈ T
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Esempio: calcolo dei potenziali ai nodi a partire da una struttura ad albero
ricoprente T,L,U, in modo tale che:
j
c 'ij = cij − π (i ) + π ( j ) = 0 ∀(i , j ) ∈ T
i
cij
2 3
4 π (1) = 0
1 5
c15 − π (1) + π (5) = 2 − 0 + π (5) = 0 ⇒ π (5) = −2
1 c53 − π (5) + π (3) = 1 + 2 + π (3) = 0 ⇒ π (3) = −3
2
4
5 ................
Teorema
Se nel problema di flusso a costo minimo tutti i costi degli archi sono interi
allora esiste una soluzione ottima in cui i potenziali dei nodi π(i) sono tutti
interi.
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Supponiamo che
fra ogni coppia di nodi esista un cammino diretto in cui ogni arco ha capacità
infinita
1. c 'ij = 0 ∀(i , j ) ∈ T
2. c 'ij ≥ 0 ∀(i , j ) ∈ L
3. c 'ij ≤ 0 ∀(i , j ) ∈ U
1
(3,6)
i 2
(3,4) (0,3)
(xij, uij)
3 4
j
(2,3) (3,4)
5 6
(1,2) (2,2)
7 8
(4,6) (1,5)
9 1
(0,5) l
k
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Calcolo dell’arco uscente dall’albero
Il flusso del ciclo è aumentato (il flusso aumenta sugli archi concordi con
l’orientamento del ciclo e diminuisce sugli archi discordi) fin quando il flusso
su uno o più archi raggiunge il relativo lower o upper bound (blocking arcs).
L’arco uscente è selezionato tra gli archi blocking.
Diversi sono i criteri di selezione dell’arco uscente, e.g.,
seleziona il primo arco blocking incontrato scandendo la lista degli archi,
oppure l’arco con costo max.
1
(3,6)
i 2
(4,4) (1,3)
(xij, uij)
3 4
j
(1,3) (4,4)
5 6
archi blocking: (2,3), (7,5) e
(0,2) (1,2) Ciclo di pivot
(6,4)
7 8
(3,6) (2,5)
9 1
k (1,5) l
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Esempio
a(1)=9, b(6)=9, tutti gli altri nodi sono di transito
(5,7)
2 4
(3,8) (3,5)
(2,2) (5,4)
1 (2,3)
6 Siano dati T, L, U: calcolo dei potenziali
(2,3)
3
(4,6) e flussi
5
(4,3)
i j L={(2,3), (5,4)} U={(3,5), (4,6)}
(cij, uij), lij=0
-3 -8
5
2 4
π (1) = 0 6
0 1
c12 − π (1) + π (2) = 3 − 0 + π (2) = 0 ⇒ π (2) = −3 -9
1
c13 − π (1) + π (3) = 2 − 0 + π (3) = 0 ⇒ π (3) = −2 6
c24 − π (2) + π ( 4) = 5 + 3 + π ( 4) = 0 ⇒ π ( 4) = −8 3 4
3 5
................ -2 -5
π(i) π(j)
i j
xij
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
-3 -8
5
2 4
7 Calcolo dei potenziali:
0
1 -10
6
c 'ij = cij − π (i ) + π ( j ) = 0 ∀(i , j ) ∈ T
2 2 4
3 5 c35 − π (3) + π (5) = 4 + 2 + π (5) = 0 ⇒ π (5) = −6
-2 -6
c56 − π (5) + π (6) = 4 + 6 + π (6) = 0 ⇒ π (6) = −10
π(i) π(j)
i j
xij
Test di ottimalità:
L={(2,3), (5,4)} U={(2,5), (4,6)}
c '23 = c23 − π (2) + π (3) = 2 + 3 − 2 > 0
c '54 = c54 − π (5) + π ( 4) = 5 + 6 − 8 > 0
c '25 = c25 − π (2) + π (5) = 2 + 3 − 6 < 0
c '46 = c 46 − π ( 4) + π (6) = 3 + 8 − 10 > 0
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
(5,7)
2 4
(3,8) (3,5)
(2,2) (5,4)
1 (2,3) Nuovo arco entrante:
6
c’46=3+8-10=1>0,
(2,3) (4,6)
3 5 il massimo incremento sul ciclo è 1,
(4,3)
i j Gli archi (1,3) e (3,5) diventano
blocking
(cij, uij), lij=0 Scegliamo l’arco (3,5) che esce da T
-3 -8
5
2 4
7 5
1 -10
6
2 4
3 5
-2 2 -6
π(i) π(j)
i j
xij
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Esempio
Nuovo albero ricoprente
Calcolo dei potenziali:
-3 -8
4 c 'ij = cij − π (i ) + π ( j ) = 0 ∀(i , j ) ∈ T
2 4
6 4 π (1) = 0
0 -11
1 c12 − π (1) + π (2) = 3 − 0 + π (2) = 0 ⇒ π (2) = −3
6 c13 − π (1) + π (3) = 2 − 0 + π (3) = 0 ⇒ π (3) = −2
3 5
3 5 c24 − π (2) + π ( 4) = 5 + 3 + π ( 4) = 0 ⇒ π ( 4) = −8
-2 -7
π(j) c 46 − π ( 4) + π (6) = 3 + 8 + π (6) = 0 ⇒ π (6) = −11
π(i)
i j c56 − π (2) + π ( 4) = 4 − π (5) − 11 = 0 ⇒ π (5) = −7
xij