Sei sulla pagina 1di 81

Gestione della produzione e

della supply chain


Logistica distributiva
Paolo Detti
Dipartimento di Ingegneria dell’Informazione e Scienze
Matematiche
Università di Siena
Struttura delle reti logistiche
Sistemi produttivi multistadio

Struttura logistica lineare


1 2 3 4

Sist. prod. / Sist. prod. / Sist. prod. /


Fornitore Fornitore Fornitore

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.

•  Il problema si pone ad un livello strategico. Tuttavia, il


problema può porsi ad un livello tattico, nel caso in cui
sia possibile acquisire risorse (mezzi di trasporto, siti di
stoccaggio, ecc…) in affitto da fornitori di servizi
logistici.
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 hanno una naturale


rappresentazione grafica.

Sono note efficienti tecniche risolutive basate sui Grafi.


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
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

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 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

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

3 3
1 1
0 4 0 4

5 5
2 2
Definizioni

Un cammino è detto semplice se gli archi e i nodi del cammino


sono tutti distinti altrimenti si dice non semplice
3 3
1 1
0 4 0 4

5 5
2 2

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

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

Un Grafo G si dice connesso se per ogni coppia di nodi a e b


esiste un cammino da a a b
3 3
1 1
0 4 0 4

5 5
2 2
Definizioni
Un ciclo orientato

3
1
0 4

5
2

Un ciclo non orientato

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.

Grafo non Euleriano Grafo Euleriano


C
3
1
0 4
A D

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)

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

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:

•  è 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

3
1
0 4

5
2
Definizioni
Dato un grafo G=(V,A)

una foresta ricoprente F =(V’,A’) di G


è una foresta tale che
V’=V
3
1
0 4

3
1 5
2
0 4
3
1
0 4
5
2

5
2
Definizioni
Dato un grafo G=(V,A)

albero ricoprente T =(V’,A’)di G


è un albero tale che
V’=V
3
1
0 4

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)

Il problema di Flusso su Reti a Costo Minimo consiste nel


determinare il modo più conveniente per trasportare una
determinata quantità di 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 per il


calcolo della soluzione di Problemi di Flusso su Reti a Costo
Minimo (più efficienti dei metodi utilizzati per la soluzione di
problemi di PL generici).
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 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

•  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 4 10
a(1)=10 1
10
6 b(6)=20

a(2)=15 2
5
7 b(7)=15
a(3)=10 3
5 10
10

i lij, uij, cij ⎪l ij = 0




j
⎩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 ij ij
( i , j )∈E
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 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.

•  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 Clienti

200
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 Magazzini Clienti


4
200 1
6 400

300 2

7 180
100 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 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
Condizione di ammissibilità
La somma delle capacità produttive (600) eccede la somma
delle domande (580)
Impianti Magazzini Clienti
4
200 1
6 400

300 2

7 180
100 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
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 Magazzini Clienti
4
200 1
6 400

300 2

7 180
100 3
5 8 20

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
Formulazione con Excel
Soluzione ottima del Problema

Impianti Magazzini Clienti

200 4
200 1
6 400
180 180
300 2
200
20 7 180
100 3 100
100 5 8 20

Capacità (ton per anno) Domande (ton per anno)

Costo di trasporto complessivo: 1310 mila Euro


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 3
s 1 1 t
3 2
2
Il problema del Cammino di costo minimo modellato come
problema di Flusso su reti a costo minimo
Se si associa:
•  un valore a(s)=1 al nodo s;
•  un valore b(t)=1 al nodo t;
•  una capacità inferiore pari a 0 ad ogni arco di E;
•  una capacità superiore pari a 1 ad ogni arco di E.

Il problema di trovare un cammino minimo da s a t può essere


visto come caso particolare di problema di Flusso a costo
minimo, con un solo nodo fornitore (s) ed un solo nodo
domanda (t).
3
a(s)=1 1 3
b(t)=1
s 1 1 t
3 2
2
Il problema dei trasporti

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

Definizione delle variabili:


xij la quantità di flusso che scorre nell’arco (i,j), per ogni (i,j) ∈ E

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

Flusso lungo un arco:


Il flusso di un arco aumenta se esso è percorso in modo
concorde al verso dell’arco

Il flusso di un arco diminuisce se esso è percorso in modo


discorde al verso dell’arco
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti

Idea: A partire da un flusso ammissibile sulla rete, l’idea alla


base del simplesso su reti è quella di migliorare la soluzione di
partenza aumentando il flusso in cicli con costo unitario
negativo, o diminuendo il flusso in cicli con costo unitario
positivo.
Ciclo con costo negativo: Ciclo con costo positivo:
2-4+1+3-3= -1 5-4+1+3-3= 2

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

Soluzione senza cicli (cycle free solution):


un flusso ammissibile x tale che in ogni ciclo (non orientato) della rete esiste
almeno un arco vincolato

Soluzione ad albero ricoprente (spanning tree solution):


dato un albero ricoprente T di G, un flusso ammissibile x tale che ogni arco
che non appartiene a T è vincolato (gli archi di G che appartengono a T
possono essere liberi o vincolati)
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti

Soluzione senza cicli (cycle free solution):


un flusso ammissibile x tale che in ogni ciclo della rete esiste almeno un arco
vincolato

Soluzione ad albero ricoprente (spanning tree solution):


dato un albero ricoprente T di G, un flusso ammissibile x tale che ogni arco
che non appartiene a T è vincolato (gli archi di G che appartengono a T
possono essere liberi o vincolati)

È possibile mostrare che un problema di flusso a costo


minimo ammette sempre una soluzione ottima senza
cicli e ad albero ricoprente.
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti

E’ sempre possibile trasformare una soluzione ammissible in una


soluzione senza cicli

Esempio: Ciclo con costo negativo


Tutti gli archi con capacità massima infinita e capacità minima 0

Costo del ciclo per flusso unitario D: 2-4+1+3-3= -1

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

Aumentando a il costo nel ciclo diminuisce. a può essere aumentato fin


quando i flussi sugli archi si mantengono positivi (non negatività del flusso)
(e non eccedono la capacità massima):

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

Il flusso è ancora ammissibile, un arco è vincolato (ha ora flusso nullo), ed il


costo della soluzione è diminuito
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Esempio: Ciclo con costo positivo
Tutti gli archi con capacità massima infinita e minima 0

Costo del ciclo per flusso unitario D: 5-4+1+3-3= 2

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)

Applicando il ragionamento a tutti i cicli della rete si ottiene il seguente


risultato.
Teorema
Se la funzione obiettivo di un problema di flusso a costo minimo non è
illimitata inferiormente, esiste sempre una soluzione ottima senza
cicli.
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti

È possibile convertire una soluzione senza cicli in una


soluzione ad albero ricoprente

Infatti, data una soluzione senza cicli, possono accadere due


cose:
1. Il grafo che si ottiene eliminando tutti gli archi vincolati è
connesso: soluzione ad albero ricoprente
2. Il grafo che si ottiene eliminando tutti gli archi vincolati non è
connesso: foresta ricoprente

Nel caso 2, è possibile aggiungere archi vincolati alla foresta ed


ottenere una soluzione ad albero ricoprente
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Nel caso 2, è possibile aggiungere archi vincolati alla foresta ed ottenere un
soluzione ad albero ricoprente
2 (4,4) 3 2 3

(2,3)
1 (1,6) 1
(3,3) (1,1)

(1,2)
4 4
5 (0,5) 5
i j

(xij, uij), lij=0


Soluzioni ad alberi ricoprenti
3 2 3 2 3
2

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

Si ottiene quindi il seguente risultato.


Teorema
Se la funzione obiettivo di un problema di flusso a
costo minimo non è illimitata inferiormente, esiste
sempre una soluzione ottima ad albero ricoprente per
il problema.
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Data una soluzione ad albero ricoprente, gli archi in A della rete
G possono suddividersi in tre categorie:
1. Gli archi appartenenti all’albero T
2. Gli archi non appartenenti all’albero il cui flusso è pari alla
capacità minima (insieme L)
3. Gli archi non appartenenti all’albero il cui flusso è pari alla
capacità massima (insieme U)

E’ possibile ottenere una (unica) soluzione ad albero ricoprente


conoscendo la struttura T,L,U (ammissibile). Basta porre
•  xij=lij per ogni (i,j) in L
•  xij=uij per ogni (i,j) in U
•  calcolare il flusso sugli altri archi di T attraverso le condizioni di
bilanciamento dei nodi
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti

Diremo che la struttura di un albero ricoprente T,L,U è


ammissibile se la relativa soluzione ad albero rispetta i
bound di ciascun arco della rete G

Data una soluzione ad albero ricoprente, diremo che l’albero


relativo T è non degenere se tutti gli archi in T sono liberi,
altrimenti l’albero si dice degenere
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Data una struttura ad albero ricoprente T,L,U
E’ possibile calcolare un flusso ammissibile sugli archi di T
Per semplicità, assumiamo che tutti gli archi abbiano upper bound infinito e
lower bound 0 (gli archi non in T sono in L e quindi hanno flusso 0).
Dato un arco, siano T1 e T2 i due sottoalberi ottenuti eliminando l’arco.
2 3
b(3)=5
a(2)=15
1

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

Test di ottimalità per una soluzione ad albero ricoprente


Definiamo per ogni arco di G un costo ridotto nel seguente
modo:
c 'ij = cij − π (i ) + π ( j ) ∀(i , j ) ∈ A
Dove π(i) è detto potenziale al nodo i

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

Consideriamo una qualsiasi soluzione ammissibile x per il problema.


Dalla definizione di x* si ha
xij ≥ xij* = l ij ∀(i , j ) ∈ L
xij ≤ xij* = uij ∀(i , j ) ∈ U
e quindi:
* *
∑ c'ij xij ≥
( i , j )∈A
c ' x
∑ ij ij
( i , j )∈A
∑ cij xij ≥ c x
∑ ij ij
( i , j )∈A ( i , j )∈A
c.d.d.
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Idea dell’algoritmo:

•  Il simplesso su reti è un algoritmo iterativo che passa da una struttura


ad albero ricoprente ad un’altra, e termina quando viene individuata una
struttura ottima.

•  Ad ogni iterazione l’algoritmo sostituisce un arco dell’albero ricoprente


con un altro non appartenente all’albero:
•  L’arco che entra a far parte dell’albero è un arco che viola la
condizione di ottimalità.

•  Aggiungendo tale arco all’albero, si viene a formare un ciclo con


costo unitario negativo (ciclo negativo).

•  Il flusso lungo il ciclo viene aumentato finché qualche arco non


raggiunge la sua capacità minima o massima.

•  Uno di questi archi con capacità minima o massima è rimosso,


producendo una nuova struttura ad albero.
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Data una struttura ad albero ricoprente T,L,U

l’algoritmo calcola come prima cosa i potenziali ai nodi in modo da


soddisfare la condizione
c 'ij = 0 ∀(i , j ) ∈ T
Come?

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 ]

Al nodo 1 può essere assegnato un potenziale 0

•  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

Algoritmo: simplesso su reti

•  calcola una struttura ad albero T,L,U ammissibile

•  calcola il relativo potenziale ai nodi π ed il flusso x su ogni arco della rete

•  controlla la condizione di ottimalità

while (esiste un arco non in T che viola la condizione di ottimalità)


begin
•  seleziona un arco che viola la condizione di ottimalità, da far entrare
nell’albero
•  determina l’arco da rimuovere dall’albero
•  aggiorna la struttura T,L,U e calcola il relativo potenziale ai nodi, π, ed
il flusso x su ogni arco della rete
•  controlla la condizione di ottimalità
end
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Calcolo di una struttura ad albero ammissibile iniziale T,L,U (archi tutti
con capacità minima 0)

Supponiamo che
fra ogni coppia di nodi esista un cammino diretto in cui ogni arco ha capacità
infinita

Data una rete G=(V,A) è sempre possibile rispettare questa condizione


aggiungendo degli archi fittizi (1,j) e (j,1) per ogni nodo j di V\{1}, con
capacità massima infinita e costo infinito (di fatto non saranno mai scelti in
una soluzione ottima)

Una struttura ad albero iniziale è ottenibile


•  aggiungendo in T l’arco (j,1) se il nodo j è un nodo fornitore (a(j)>0) o di
transito (a(j)=b(j)=0) con un flusso pari ad a(j)
•  aggiungendo in T l’arco (1,j) se il nodo j è un nodo domanda (b(j)>0) con
un flusso pari a b(j)
•  tutti gli altri archi sono inseriti nell’insieme L (a flusso nullo)
•  l’insieme U è vuoto
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Controllo dell’ottimalità della struttura ad albero T,L,U

Dopo aver calcolato i potenziali ai nodi π(i)


Possiamo controllare le condizioni di ottimalità:

1. c 'ij = 0 ∀(i , j ) ∈ T
2. c 'ij ≥ 0 ∀(i , j ) ∈ L
3. c 'ij ≤ 0 ∀(i , j ) ∈ U

Se la struttura ad albero non rispetta queste condizioni, gli archi che


possono essere scelti per entrare nell’albero sono:

(i,j) ∈ L con c'ij < 0


(i,j) ∈ U con c'ij > 0

Diversi sono i criteri di selezione dell’arco entrante (pivot rule), e.g.,


Dantzig rule: seleziona l’arco con il massimo |c’ij|
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Calcolo dell’arco uscente dall’albero

Sia (k,l) l’arco selezionato per entrare nell’albero


Aggiungendo l’arco (k,l) all’albero si viene a creare esattamente un ciclo
(pivot cycle) W

Definiamo l’orientamento del ciclo W concorde con l’arco se (k,l) è in L e


discorde se (k,l) è in 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 Calcolo arco entrante: c’ 35


5
2 4 =4+2-5=1>0, (3,5) in U, il
6
0 massimo incremento sul ciclo è 1,
1 -9
1 l’arco (2,5) diventa blocking ed
6 esce (entra in U)
3 4
3 5
-2 -3 -8
-5 5
π(j) 2 4
π(i) 6
i j 0 1
1 -9
xij
6
L={(2,3), (5,4)} U={(3,5), (4,6)} 3
3 5
4
-2 3 -5
c '23 = c23 − π (2) + π (3) = 2 + 3 − 2 > 0 π(i) π(j)
c '54 = c54 − π (5) + π ( 4) = 5 + 5 − 8 > 0 i j
xij
c '35 = c35 − π (2) + π (5) = 4 + 2 − 5 = 1 > 0
c '46 = c 46 − π ( 4) + π (6) = 3 + 8 − 9 = 2 > 0
Un algoritmo per il problema del flusso su reti a costo minimo:
il simplesso su reti
Esempio
Nuovo albero ricoprente

-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

L={(2,3), (5,4)} U={(2,5), (3,5)} Test di ottimalità:


c '23 = c23 − π (2) + π (3) = 2 + 3 − 2 > 0
c '25 = c25 − π (2) + π (5) = 2 + 3 − 7 < 0
Trovata una
soluzione ottima c '35 = c35 − π (3) + π (5) = 4 + 2 − 7 < 0
c '54 = c54 − π (5) + π ( 4) = 5 + 7 − 8 > 0