Il problema del massimo flusso. Preflow-push e augmenting path: un approccio unificante

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Il problema del massimo flusso. Preflow-push e augmenting path: un approccio unificante"

Transcript

1 Introduzione Il problema del massimo flusso. Preflow-push e augmenting path: un approccio unificante Il problema del massimo flusso è uno dei fondamentali problemi nell ottimizzazione su rete. Esso è presente in moltissime situazioni. Ad esempio, può verificarsi come sottoproblema nella soluzione di più difficili problemi su rete, come il problema dei flussi su rete a costo minimo. Può occorrere direttamente, come in problemi quali l abbinamento massimo e l elaborazione distribuita su macchine multiprocessore. A causa della sua grande applicabilità, la progettazione di algoritmi efficienti per il problema del massimo flusso, ha costituito un popolare argomento di ricerca tra matematici ed informatici. Il problema del massimo flusso si distingue infatti dagli altri problemi di ottimizzazione, per i numerosi contributi forniti dai vari ricercatori al fine di ottenere algoritmi con migliore complessità. Alcuni, ma non tutti, tra i vari contributi teorici, hanno prodotto effettivamente dei pratici miglioramenti. Il fine di questa trattazione è la valutazione pratica dei diversi approcci alla soluzione del problema, e la presentazione di un nuovo metodo, ottenuto estendendo un algoritmo recentemente proposto, che ha fornito interessanti risultati. Nel primo capitolo presenteremo i concetti di base necessari alla formulazione del problema del massimo flusso, ed introdurremo alcuni risultati fondamentali. Nei capitoli secondo e terzo forniremo una panoramica dei vari algoritmi proposti per la soluzione del problema del massimo flusso, per ognuno dei quali valuteremo la complessità e dimostreremo la correttezza. Nel capitolo quarto studieremo un nuovo metodo, recentemente proposto, che è alla base dell algoritmo che proporremo nello stesso capitolo. Nel capitolo quinto descriveremo e confronteremo le implementazioni dei vari algoritmi. 1

2 Capitolo 1 Concetti fondamentali In questo capitolo forniremo le definizioni ed i concetti fondamentali necessari alla formulazione del problema del massimo flusso. Introdurremo innanzitutto definizioni relative a grafi, path, flussi, per poi presentare le nozioni centrali di rete residua e taglio s-t. Stabiliremo infine alcuni risultati di fondamentale importanza, come il teorema del massimo flusso minimo taglio. 1.1 Notazioni e definizioni Daremo ora diverse definizioni di base dalla teoria dei grafi e presenteremo la notazione che sarà utilizzata nella trattazione. Grafi e reti diretti: Un grafo diretto G=(N, A) è costituito da un insieme N di nodi e da un insieme di archi A i cui elementi sono coppie ordinate di nodi distinti. La figura 1.1 mostra un esempio di grafo diretto. Per questo grafo N={1, 2, 3, 4, 5, 6, 7} e A={(1,2), (1,3), (2,3), (2,4), (3,6), (4,5), (4,7), (5,2), (5,3), (5,7), (6,7)}. Una rete diretta è un grafo diretto ai cui nodi e/o archi sono associati valori numerici (in genere costi, capacità, eccessi di flusso). Denotiamo con n il numero di nodi e con m il numero di archi in un dato grafo G. Un grafo G =(N, A ) è un sottografo di di G=(N, A) se N N e A A. Fig. 1.1 Grafo diretto. Fig. 1.2 Grafo non diretto. Grafi e reti non diretti: Definiamo un grafo non diretto allo stesso modo con cui abbiamo definito un grafo diretto ad eccezione del fatto che l insieme degli archi A è costituito da 2

3 coppie non ordinate di nodi distinti. La figura 1.2 mostra un esempio di grafo non diretto. In un grafo non diretto è possibile riferirsi ad un arco congiungente la coppia di nodi i e j sia con (i, sia con (j, : entrambe le coppie rappresentano lo stesso arco. Tail e Head: Un arco diretto (i, ha due estremità : i e j. Ci riferiremo ai nodi i e j rispettivamente come tail (coda) e head (testa) dell arco (i,. Un arco (i, è incidente nei nodi i e j, è uscente dal nodo i ed è entrante nel nodo j. Quando un arco (i, A, diremo che il nodo j è adiacente al nodo i. Degrees: L in-degree (grado entrante ) di un nodo i è il numero di archi entranti in tale nodo e l out-degree rappresenta il numero di archi uscenti da i. Il degree di un nodo è la somma dei suoi in-degree e out-degree. Liste d adiacenza: La lista degli archi adiacenti A( di un nodo i è l insieme degli archi uscenti da i, ovvero, A(={(i, A: j N }. La lista dei nodi adiacenti N( è l insieme dei nodi adiacenti al nodo i, cioè N(={j N :(i, A(}. Walk: Un walk in un grafo diretto G=(N, A) è un sottografo di G costituito da una sequenza di nodi e archi i 1 a 1 i 2 a i r-1 a r-1 i r soddisfacenti la proprietà che per ogni 1 k r-1 a k =(i k, i k+1 ) A oppure a k =(i k+1, i k ) A. In modo alternativo, possiamo specificare un walk indicando la sequenza di nodi costituenti il walk, ovvero (i 1, i 2,,i r ). Direct walk: Un direct walk è una versione orientata di un walk nel senso che per ogni coppia di nodi consecutivi i k e i k+1 appartenenti al walk si ha (i k, i k+1 ) A. La figura 1.3 mostra due walk relativi al grafo di figura 1.1, il primo non diretto, il secondo diretto. (a) Fig. 1.3 Esempi di walk. (b) Path e direct path: Un path è un walk senza alcuna ripetizione di nodi. Il walk mostrato in figura 1.3 (a) è anche un path, ma il walk in figura 1.3 (b) non è un path poiché esso ripete il nodo 2 due volte. Possiamo partizionare gli archi di un path in due gruppi: archi forward e archi backward. Un arco (i, nel path è forward se il path visita il nodo i prima di visitare il nodo j, backward altrimenti. Ad esempio, nel path di figura 1.3 (a) gli archi (1, 2) 3

4 e (5, 7) sono archi forward, mentre l arco (5, 2) è un arco backward. Un direct path è un direct walk senza alcuna ripetizione di nodi. In altre parole, un direct path non ha archi backward. 1.2 Il problema del massimo flusso Consideriamo una rete G=(N, A) in cui ad ogni arco (i, A è associata una capacità non negativa u ij (rete capacitata). Per definire il problema del massimo flusso distinguiamo nel grafo G due nodi speciali: un nodo sorgente s ed un nodo pozzo t. Vogliamo determinare l ammontare massimo di flusso che può essere inviato dal nodo sorgente s al nodo pozzo t, senza eccedere le capacità degli archi e assicurando che il flusso totale entrante in un nodo sia uguale al flusso totale uscente da quello stesso nodo. Possiamo formalizzare il problema nel seguente modo: Max s.v. v (1.1a) x ij xji = 0 i N \ { s, t}, (1.1b) { j:( i, j ) A} { j:( j, i ) A} { v per i = s, -v per i = t, 0 xij uij ( i, A. (1.1c) Ci riferiremo ad un vettore X = { xij} soddisfacente i vincoli (1.1b) e (1.1c) come flusso e al corrispondente valore della variabile scalare v come il valore del flusso. I vincoli (1.1b) sono definiti vincoli di bilanciamento di massa (mass balance); il soddisfacimento di tali vincoli assicura che per ogni nodo i, ad eccezione dei nodi s e t, il flusso totale entrante in i sia uguale al flusso totale uscente da i. Nella nostra trattazione assumeremo che la rete sia diretta. Notiamo che tale assunzione non è restrittiva, in quanto è sempre possibile trasformare una rete non orientata in una equivalente orientata. Ipotizzeremo inoltre che la rete non contenga un direct path dal nodo s al nodo t costituito da archi di capacità infinita. Se esistesse un tale path potremmo inviare un ammontare infinitamente grande di flusso verso il pozzo, ed il valore del massimo flusso sarebbe illimitato. Supporremo poi che 4

5 ogniqualvolta un arco (i, appartiene alla rete, anche l arco (j, vi appartiene; anche tale assunzione non è restrittiva in quanto consentiremo l esistenza di archi con capacità nulla. 1.3 Rete residua e tagli s-t Il concetto di grafo residuo gioca un ruolo centrale nello sviluppo degli algoritmi per il massimo flusso. Dato un flusso X, la capacità residua di un arco (i, A è il massimo flusso addizionale che può essere inviato dal nodo i al nodo j attraverso gli archi (i, e (j,. La capacità residua r ij ha due componenti: u ij x ij, che rappresenta la capacità non usata dell arco (i, ; il flusso corrente x ji sull arco (j,, che può essere cancellato al fine di incrementare il flusso dal nodo i al nodo j. Di conseguenza r ij = u ij x ij + x ji. Data una rete capacitata G=(N, A) ed un flusso X la rete residua indotta da X è il grafo G(X)=(N, A ) dove A ={(i, NxN : r ij >0}. La figura 1.4 mostra un esempio di rete residua. (x ij, u ij ) r ij (a) (b) Fig. 1.4 (a): Rete originaria. (b):rete residua. Taglio s-t: Un taglio è una partizione dell insieme dei nodi N in due sottoinsiemi S e S = N \ S. Rappresentiamo un taglio con la notazione [ S, S ]. Alternativamente possiamo definire un taglio come l insieme degli archi le cui estremità appartengono ai differenti sottoinsiemi S e S. Un taglio è un taglio s-t se arco forward del taglio se s S e t S. Definiamo un arco (i, come i S e j S mentre un arco (i, tale che i S e j S sarà definito arco backward del taglio. Denotiamo con ( S, S ) l insieme degli archi forward e con ( S, S ) l insieme degli archi backward. Ad esempio, in figura 1.5, gli archi tratteggiati 5

6 fanno parte di un taglio s-t. Per questo taglio ( S, S ) = {(1,2), (3,4), (5,6)}, e ( S, S )={(2,3), (4,5) }. s t Fig. 1.5 Esempio di taglio s-t. Definiamo capacità u[ S, S ] di un taglio s-t [ S, S ] la somma delle capacità degli archi forward del taglio, ovvero u[ S, S ] = u ij. ( i, j ) ( S, S ) Notiamo che la capacità di un taglio è un limite superiore all ammontare massimo di flusso che può essere inviato dai nodi in S ai nodi in S. Definiamo taglio minimo un taglio s-t la cui capacità è minima relativamente a tutti i tagli s-t. Definiamo capacità residua di un taglio s-t la somma delle capacità residue degli archi forward del taglio, cioè r[ S, S ] = r ij. ( i, j ) ( S, S ) 1.4 Teorema del massimo flusso-minino taglio Consideriamo una rete capacitata G=(N, A), un flusso X, ed un taglio s-t [ S, S ]. Sommando i vincoli di bilanciamento di massa (1.1b) per i nodi in S (a cui appartiene s) otteniamo: v = i S { j:( i, A} xij xji { j:( j, A}. Tale espressione può essere semplificata osservando che ogniqualvolta entrambi i nodi p e q appartengono ad S e l arco (p, q) A, la variabile x pq nel primo termine all interno della parentesi quadra (per i = p) cancella la variabile xpq nel secondo termine (per i = q). 6

7 Inoltre, se entrambi i nodi p e q appartengono ad S, allora nell espressione. Da quanto notato segue che: x pq non apparirà = v xij xij. (1.2) ( i, j ) ( S, S ) ( i, j ) ( S, S ) Il primo termine al secondo membro della precedente equazione indica l ammontare di flusso dai nodi in S ai nodi in S, il secondo termine indica l ammontare del flusso che ritorna indietro dai nodi in S ai nodi in S. Dunque il secondo membro indica il flusso totale (netto) attraverso il taglio [ S, S ], e l uguaglianza implica che il flusso attraverso un qualsiasi taglio s-t equivale a v. Sostituendo secondo, otteniamo: xij uij nel primo termine e ij x 0 nel v u ( i, j ) ( S, S ) ij = u[ S, S ]. (1.3) Tale espressione indica che il valore di un qualsiasi flusso è minore o uguale alla capacità di un qualsiasi taglio s-t nella rete. Questo risultato è del tutto intuitivo, infatti, poiché un flusso dal nodo s al nodo t deve passare attraverso ogni taglio s-t (ogni taglio divide la rete in due componenti disgiunte), si ha che il valore del flusso non può mai eccedere la capacità del taglio. Formuliamo questo risultato: Proprietà 1.1. Il valore di ogni flusso è minore o uguale della capacità di ogni taglio della rete. La precedente proprietà implica che se determiniamo un flusso X il cui valore equivale alla capacità di qualche taglio [ S, S ], allora X è un flusso massimo e il taglio [ S, S ] è un taglio minimo. Dalla discussione precedente risulta provato il seguente Teorema 1.2. Il massimo valore del flusso dal nodo sorgente s al nodo pozzo t in una rete capacitata è uguale alla minima capacità tra tutti i tagli s-t. 7

8 Formuliamo ora la proprietà 1.1 in funzione delle capacità residue. Supponiamo che X sia un flusso di valore v. Inoltre, supponiamo che X sia un flusso di valore v + v per qualche v 0. La disuguaglianza (1.3) implica che: v + v uij. (1.4) ( i, j ) ( S, S ) Sottraendo la (1.2) dalla (1.4) otteniamo: ( i, j ) ( S, S ) v ( uij xi + xij. (1.5) ( i, j ) ( S, S ) Ricordando che tra le assunzioni effettuate nel paragrafo 1.2 abbiamo ipotizzato che ogniqualvolta un arco (i, appartiene alla rete, anche l arco (j, vi appartiene, possiamo riscrivere x ij come ( i, ( S, S ) ( i, ( S, S x ji. Di conseguenza: ) ( i, j ) ( S, S ) v ( uij xij + xj = rij. ( i, j ) ( S, S ) Proprietà 1.3. Per ogni flusso X di valore v in una rete, il flusso addizionale che può essere inviato dal nodo sorgente s al nodo pozzo t è minore o uguale alla capacità residua di ogni taglio s-t. 1.5 Un applicazione: elaborazione distribuita su una macchina biprocessore Tale applicazione riguarda l assegnamento di differenti procedure di un programma a due processori in modo da minimizzare il costo totale dell elaborazione e della comunicazione tra processori. Consideriamo un calcolatore con due processori non necessariamente identici. Vogliamo eseguire su tale calcolatore un programma costituito da più moduli, o procedure, che interagiscono l un l altro durante l esecuzione del programma principale. Il costo necessario all esecuzione di un dato modulo su un determinato processore è noto a priori e potrebbe non essere lo stesso per entrambi i processori. Siano α i e β i il costo per l elaborazione del modulo i sui processori 1 e 2 rispettivamente. Assegnando moduli 8

9 diversi a processori diversi si ha un diverso costo per la comunicazione tra processori. Denotiamo con c ij il costo per la comunicazione tra processori se i moduli i e j sono assegnati a processori diversi, c ij =0 se i e j sono assegnati ad uno stesso processore. Vogliamo allocare moduli a processori in modo tale da minimizzare il costo necessario all elaborazione e alla comunicazione tra processori. Formuliamo tale problema come un problema di taglio minimo (e dunque di massimo flusso) su una rete non diretta nel modo seguente. Definiamo un nodo sorgente s rappresentante il primo processore, un nodo pozzo t rappresentante il secondo processore, ed un nodo per ogni modulo costituente il programma principale. Per ogni nodo i, diverso da s e da t, introduciamo un arco (s, di capacità β i ed un arco (i, t) di capacità α i. Infine, se il modulo i interagisce con il modulo j durante l esecuzione del programma, introduciamo un arco (i, con capacità c ij. Nelle tabelle successive diamo un esempio di tale problema, ed in figura 1.6 è possibile notare la rete corrispondente. i α i β i c ij Fig Rete per il modello di elaborazione distribuita. Notiamo ora la corrispondenza biunivoca tra tagli s-t nella rete e i diversi assegnamenti di moduli ai processori. Inoltre, la capacità di un taglio, è uguale al costo del corrispondente assegnamento. Per stabilire questo risultato, denotiamo con A 1 e A 2 i moduli assegnati ai 9

10 processori 1 e 2 rispettivamente. Il costo di tale assegnamento è i 1 α + i 2 β + ij ( i, A 1 xa 2 c. Il taglio s-t corrispondente a tale assegnamento è ({s} A 1, {t} A 2 ). Per come è stata costruita la rete, tale taglio contiene un arco (i, t) di capacità α i per ogni i A 1, un arco (s, di capacità β i per ogni i A 2, e contiene gli archi (i, A 1 xa 2 di capacità c ij. Dunque il costo dell assegnamento specificato da A 1 e A 2 è pari alla capacità del taglio ({s} A 1, {t} A 2 ). Di conseguenza, individuare il taglio s-t di capacità minima nella rete, equivale ad individuare l assegnamento di moduli ai processori di minor costo. i A i A 10

11 Capitolo 2 Algoritmi augmenting path In questo e nel successivo capitolo, discuteremo di due classi di algoritmi per il problema del massimo flusso: Algoritmi augmenting path, durante la cui esecuzione fino alla terminazione mantengono validi i vincoli di bilanciamento di massa per ogni nodo della rete ad eccezione della sorgente e del pozzo. Tali algoritmi incrementano il flusso lungo path dal nodo sorgente al nodo pozzo. Algoritmi preflow-push, che non assicurano il soddisfacimento dei vincoli di bilanciamento di massa prima della terminazione, causando eccesso di flusso in qualche nodo nella rete. Tali algoritmi spediscono flusso prelevato da nodi traboccanti verso nodi vicini al pozzo, e quando ciò non sia possibile, verso nodi vicini alla sorgente. Iniziamo la nostra discussione considerando un generico algoritmo augmenting path per il problema del massimo flusso, per poi descriverne una specifica implementazione, nota come labeling algorithm. 2.1 Generic Augmenting Path algorithm Definiamo augmenting path un direct path dal nodo sorgente s al nodo pozzo t nella rete residua. La capacità residua δ di un augmenting path è data dalla minima capacità residua tra gli archi lungo il path. Ad esempio, la rete residua in figura 1.4 (b), contiene un unico augmenting path P={1, 2, 3, 4}, e la capacità residua di tale path è δ = min{r 12, r 23, r 34 }=1. Osserviamo che per definizione di rete residua, la capacità residua di un augmenting path è sempre una quantità positiva. Di conseguenza ogniqualvolta la rete residua contiene un augmenting path, è possibile inviare del flusso addizionale dalla sorgente al pozzo. L algoritmo generico è basato su questa semplice osservazione: esso 11

12 procede individuando augmenting path ed aumenta il flusso lungo tali path fino a quando la rete residua non conterrà più augmenting path. algorithm generic augmenting path begin X:=0; while G(X) contiene un cammino diretto tra s e t do begin identifica un augmenting path P da s a t; δ := min { rij : (i, P} ; end; aumenta di δ unità il flusso lungo P e aggiorna G(X); end; Usiamo il problema del massimo flusso dato in figura 2.1(a) per illustrare l algoritmo. Supponiamo che l algoritmo selezioni l augmenting path P={1, 2, 4}. La capacità residua del cammino è δ = min{r 12, r 24 }=4. Con un operazione di aumento riduciamo la capacità dell arco (1, 2) a zero e incrementiamo la capacità residua dell arco (2, 1) a 4. L aumento decrementa anche la capacità residua dell arco (2, 4) da 5 a 1 ed incrementa la capacità dell arco (4, 2) da 0 a 4. La figura 2.1(b) mostra la rete residua dopo questa fase. r ij (a) (b) Fig. 2.1 (a): Rete residua iniziale (X=0). (b):rete residua dopo la prima operazione di aumento. Nella seconda iterazione, supponiamo che l algoritmo selezioni il cammino P={1, 3, 2, 4}. La capacità residua è δ = min{r 13, r 32, r 24 }=1. Aumentando di una unità il flusso lungo questo path otteniamo la rete residua mostrata in figura 2.1(c). Nella terza iterazione, l algoritmo aumenta di una unità il flusso lungo il cammino P={1, 3, 4}. La figura 2.1(d) mostra la corrispondente rete residua. Ora tale rete non contiene alcun augmenting path, pertanto l algoritmo termina. 12

13 (c) (d) Fig. 2.1(a): Rete residua dopo l aumento lungo il path P={1, 3, 2, 4}. (b):rete residua dopo l aumento lungo il path P={1, 2, 4}. 2.2 Labeling algorithm Nella discussione relativa all algoritmo augmenting path della sezione precedente, non abbiamo specificato come identificare un augmenting path nella rete residua o come mostrare che la rete non ne contiene; non abbiamo inoltre mostrato la correttezza di tale algoritmo e se esso termina in un numero finito di iterazioni. In tale paragrafo riconsidereremo l algoritmo augmenting path, descrivendone una particolare implementazione conosciuta come labeling algorithm. L algoritmo labeling utilizza una tecnica di ricerca per identificare un direct path in G(X) dalla sorgente al pozzo. Esso esplora la rete residua ad iniziare dal nodo sorgente al fine di individuare tutti i nodi che sono raggiungibili dalla sorgente, ovvero tutti i nodi i per cui esiste un direct path da s ad i nella rete residua. Durante l esecuzione dell algoritmo i nodi risultano partizionati in etichettati e non etichettati. I nodi etichettati sono quelli già raggiunti durante la fase di ricerca, mentre quelli non etichettati sono i nodi non ancora raggiunti. L algoritmo seleziona iterativamente un nodo etichettato, scandisce la lista degli archi adiacenti a tale nodo ed etichetta i nuovi nodi visitati. Quando il pozzo t viene etichettato, l algoritmo invia il massimo flusso possibile lungo il cammino cha va da s a t, cancella tutte le etichette dai nodi, e ripete la fase di ricerca. L algoritmo termina quando, una volta effettuata la scansione delle liste d adiacenza dei nodi etichettati, il pozzo rimane non etichettato, il che implica che il nodo sorgente non è connesso al nodo pozzo nella rete residua. Descriviamo ora formalmente l algoritmo. 13

14 algorithm labeling begin etichetta il nodo t; while t è etichettato do begin cancella le etichette di tutti i nodi; pred( := 0 per ogni j N; etichetta il nodo s e poni LIST := {s}; while LIST AND t non è etichettato do begin rimuovi un nodo i da LIST; foreach arco (i, N( nella rete residua do if il nodo j è non etichettato then poni pred( := i, etichetta il nodo j e aggiungi j a LIST; end; if t è etichettato then augment; end; end; procedure augment; begin usa le etichette dei predecessori per ricostruire l augmenting path P dal nodo s al nodo t; calcola δ := min {r ij : (i, P}; aumenta di δ unità il flusso lungo P e aggiorna le capacità residue; end; Al fine di mostrare la correttezza di tale algoritmo, notiamo che in ogni iterazione (del ciclo più esterno) l algoritmo esegue un aumento oppure termina perché non è stato possibile etichettare il pozzo. In quest ultimo caso dobbiamo dimostrare che il flusso X è un flusso massimo. Supponiamo che l algoritmo sia terminato perché non è stato possibile etichettare il pozzo, e indichiamo con S l insieme dei nodi etichettati e con S = N \ S l insieme dei nodi non etichettati. Ovviamente s S e t S ed inoltre, poiché l algoritmo non può etichettare alcun nodo in S da qualsiasi nodo in S, si ha r ij = 0 ( i, ( S, S). Tuttavia, poiché r ij = ( uij xi + xji dove ij uij x e x ji 0, la condizione r ij =0 implica che 14

15 x ij = uij ( i, ( S, S) e xij = 0 ( i, ( S, S). Sostituendo questi valori nella (1.2) otteniamo che: v = x xij = u ij ij = ( i, j ) ( S, S ) ( i, j ) ( S, S ) ( i, j ) ( S, S ) u[ S, S ]. Ciò mostra che il valore del flusso corrente eguaglia la capacità del taglio [ S, S ]. Ma dal teorema 1.1 si deduce che X è un flusso massimo e [ S, S ] è un taglio minimo. L algoritmo labeling ci consente inoltre di dimostrare il seguente teorema. Teorema 2.1 (dell augmenting path). Un flusso X è un massimo flusso se e solo se la rete residua G(X) non contiene augmenting path. Dim. Se la rete residua G(X) contiene un augmenting path, ovviamente il flusso X non è un flusso massimo. Viceversa, se la rete residua G(X) non contiene augmenting path, l insieme dei nodi S etichettati dall algoritmo labeling definisce un taglio s-t [ S, S ] la cui capacità eguaglia il valore del flusso, implicando che il flusso X deve essere un flusso massimo. Complessità dell algoritmo labeling Al fine di valutarne la complessità nel caso peggiore, ricordiamo che l algoritmo in ogni iterazione, ad eccezione dell ultima (quando il pozzo t non può essere etichettato), esegue un aumento. La fase di ricerca dell augmenting path e l aumento su tale path, richiedono tempo O(m). Infatti la fase di ricerca esamina un nodo al più una volta in quanto un nodo è inserito in L solo se esso non è etichettato ed una volta inserito in L viene etichettato. Ciò implica che la lista d adiacenza di un nodo sarà esaminata al più una volta. Poiché la lunghezza totale delle liste di adiacenza è m, il tempo totale speso per la scansione di tutte le lista d adiacenza è O(m). Inoltre il tempo necessario per cancellare inizialmente le etichette di tutti i nodi è O(n). Di conseguenza il tempo totale speso per la fase di ricerca del path è O(m + n). Nell ipotesi che la rete residua sia connessa, ogni nodo ha grado almeno 1; pertanto il numero di archi è almeno n-1, da cui n = O(m). Ma in tale ipotesi il 15

16 tempo totale per la ricerca del cammino diventa O(m), così come il tempo necessario ad un operazione di aumento. Perciò, la complessità dell algoritmo labeling è O(m) volte il numero degli augmenting path. Limitiamo ora il numero di operazioni di aumento che possono essere eseguite dall algoritmo. Se tutte le capacità sono intere e limitate da un numero finito U=max { uij : ( i, A}, la capacità del taglio ({ s}, N \ { s}) è al più (n-1)u. Perciò, il valore del massimo flusso è limitato da (n-1)u. L algoritmo labeling incrementa il valore del flusso di almeno una unità in ogni passo, di conseguenza esso terminerà in al più (n-1)u passi. Pertanto O(mnU) è un limite al tempo d esecuzione dell algoritmo labeling. O(mnU). Teorema 2.2 L algoritmo labeling risolve il problema del massimo flusso in tempo Svantaggi dell algortimo labeling Il primo svantaggio di tale algoritmo è legato alla sua complessità nel caso pessimo. Ad esempio, se U=2 n il limite superiore diventa esponenziale nel numero di nodi. La figura 2.2 mostra un esempio in cui l algoritmo impiega un tale numero di iterazioni. In tale esempio, l algoritmo può selezionare gli augmenting path P={s, a, b, t} e P ={s, b, a, t} alternativamente 10 6 volte, ogni volta aumentando il flusso di una unità lungo il path scelto. (a) (b) (c) Fig. 2.2(a):Rete residua per il flusso nullo. (b):rete residua dopo l aumento lungo il path P={s, a, b, t}. (c):rete residua dopo l aumento lungo il path P={s, b, a, t}. Un altro svantaggio è costituito dal fatto che se le capacità sono irrazionali, l algoritmo potrebbe non terminare, come è possibile notare nell esempio fornito in [UZTCS]. Inoltre l algoritmo è smemorato. Infatti in ogni iterazione l algoritmo genera etichette nei nodi 16

17 che contengono informazioni relative ad eventuali augmenting path dal nodo sorgente verso altri nodi. L algoritmo da un iterazione alla successiva elimina tali etichette distruggendo informazioni potenzialmente utili, che potrebbero essere utilizzate in successive iterazioni. Successivamente descriveremo diversi miglioramenti dell algortimo labeling che consentiranno di ovviare a parte di tali inconvenienti. 2.3 Limiti teorici degli algoritmi per il massimo flusso Come visto nei paragrafi precedenti, l algoritmo generic augmenting path ha due significative limitazioni: la sua complessità computazionale nel caso peggiore di O(mnU), inaccettabile per problemi con grandi valori di capacità; il fatto che l algoritmo potrebbe non convergere ad una soluzione ottima nel caso di capacità irrazionali. Nei successivi paragrafi vedremo metodi con una migliore complessità computazionale, ottenuti come raffinamenti dell algoritmo generico. Prima di descrivere tali algoritmi, riflettiamo brevemente sui limiti teorici degli algoritmi per il massimo flusso ed introduciamo le strategie impiegate dagli algoritmi che considereremo successivamente. La teoria della decomposizione del flusso (vedi appendice A.1) mostra che, almeno teoricamente, potremmo essere in grado di progettare algoritmi capaci di individuare un flusso massimo in non più di m aumenti. Supponiamo, al fine di giustificazione di tale affermazione, che x sia un flusso massimo e x sia un qualsiasi flusso iniziale (eventualmente il flusso nullo). Per la proprietà di decomposizione del flusso, possiamo ottenere x da x attraverso una sequenza di al più m aumenti su augmenting path dal nodo s al nodo t, più un certo numero di flussi su augmenting cycles. Se definiamo x come il vettore flusso ottenuto da x inviando flusso solo lungo gli augmenting path, anche x è un flusso massimo, questo perché il flusso lungo i cicli non cambia il flusso nel nodo pozzo. Tale osservazione dimostra una teorica possibilità di individuare un massimo flusso utilizzando al più m aumenti. Sfortunatamente, per applicare tale decomposizione del flusso, abbiamo la necessità di conoscere un flusso massimo. Come conseguenza, nessun algoritmo finora sviluppato raggiunge tale limite teorico di m aumenti. Nonostante ciò, è possibile migliorare considerevolmente il limite O(nU) al numero di aumenti richiesti dall algoritmo generic augmenting path. Gli algoritmi che considereremo nei successivi paragrafi sono basati sui seguenti tre approcci di base: Scelta di augmenting path con grande capacità residua; 17

18 Utilizzazione di una strategia che limiti il tipo di augmenting path che può essere utilizzato; Rilassamento dei vincoli di bilanciamento di massa in fasi intermedie dell algoritmo (algoritmi preflow-push). 2.4 Capacity scaling algorithm Iniziamo col descrivere l algoritmo maximum capacity augmenting path e col notare la sua complessità computazionale. Tale algoritmo aumenta il flusso lungo un path con la massima capacità residua. Sia X un flusso qualsiasi e v il suo valore, sia inoltre v * il valore del massimo flusso. La proprietà di decomposizione del flusso (vedi appendice A.1), applicata alla rete residua G(X), implica che è possibile individuare m o meno direct path dalla sorgente al pozzo la cui somma di capacità residue è (v * - v). Dunque l augmenting path di capacità massima ha capacità almeno (v * - v)/m. Consideriamo ora una sequenza di 2m aumenti consecutivi di capacità massima a partire dal flusso X. Se ognuno di tali aumenti aumenta almeno di (v * - v)/2m unità di flusso, allora entro 2m o meno iterazioni verrà stabilito un massimo flusso. Si noti che se uno di tali 2m consecutivi aumenti trasporta meno di (v * - v)/2m unità di flusso, allora dal flusso iniziale X la capacità residua del maximum capacity augmenting path è stata ridotta di un fattore di almeno 2 (vedi appendice A.3: incremento geometrico). Per quanto appena detto, in 2m iterazioni consecutive, l algoritmo individua un flusso massimo o riduce la capacità residua del maximum capacity augmenting path di un fattore di almeno 2. Poiché la capacità residua di un augmenting path è al più 2U ed è almeno 1, dopo O(mlogU) iterazioni, il flusso sarà un flusso massimo. Quanto appena detto dimostra che l algoritmo maximum capacity augmenting path riduce il numero di aumenti richiesti dall algoritmo labeling da O(nU) a O(mlogU). Tuttavia l algoritmo esegue più computazioni per iterazione poiché ha bisogno di identificare un augmenting path con capacità residua massima. Una variazione del precedente algoritmo è l algoritmo capacity scaling che stabilisce un flusso massimo in O(mlogU) senza eseguire più computazioni per iterazione. L algoritmo aumenta il flusso lungo un cammino con capacità residua sufficientemente grande e non massima, questo perché è possibile determinare un tale cammino in tempo O(m). Per definire l algoritmo capacity scaling, introduciamo un parametro e, relativamente ad un dato flusso X, definiamo la rete - 18

19 residua G(X, ) come una rete contenente archi la cui capacità residua è almeno. La figura 2.3 illustra un esempio di tale rete. r ij (a) (b) Fig.2.1.Rete -residua (a):rete residua G(X). (b): Rete -residua G(X, ) per =8. algorithm capacity scaling begin x:= 0; :=2 logu ; while 1 do begin while G(x, ) contiene un cammino da s a t do begin identifica un cammino P in G(x, ); δ:= min{r ij : (i, P}; aumenta di δ unità di flusso lungo P e aggiorna G(x, ); end; := / 2; end; end; Ci riferiremo ad una fase dell algoritmo in cui rimane costante come fase scaling, e ad una fase scaling con uno specifico valore di come fase -scaling. Osserviamo che in una fase -scaling, ogni aumento trasporta almeno unità di flusso. L algoritmo inizia con =2 logu e dimezza tale valore in ogni fase scaling finché =1. Di conseguenza, l algoritmo esegue 1+ logu =Ο(logU) fasi scaling. Nell ultima fase scaling, =1, così 19

20 G(X, )=G(X), questo mostra che l algoritmo termina con un flusso massimo (quando =1 l algoritmo si riconduce all algoritmo generic augmenting path). L efficienza dell algoritmo dipende dal fatto che esso esegue al più 2m aumenti per fase scaling. Per stabilire questo risultato, consideriamo il flusso alla fine della fase -scaling. Sia X tale flusso e v il corrispondente valore. Sia S l insieme dei nodi raggiungibili dal nodo s in G(X, ). Poiché G(X, ) non contiene augmenting path dalla sorgente al pozzo, t S, e [ S, S ] forma un taglio s-t. La definizione di S implica che le capacità residue degli archi in [ S, S ] sono strettamente minori di, così la capacità residua del taglio [ S, S ] è al più m. Di conseguenza, v * - v m (dalla proprietà 1.2). Nella successiva fase scaling ogni aumento trasporta almeno /2 unità di flusso, così questa fase scaling può eseguire al più 2m aumenti. Stabilito che il numero di fasi -scaling è O(logU) e che ogni fase esegue al più 2m aumenti, il numero totale di aumenti è Ο(mlogU). Inoltre, ogni fase richiede Ο(m) per identificare un augmenting path e Ο(m) per aggiornare la rete -residua. Tale discussione ci consente di enunciare il seguente teorema. Teorema 2.3. L algoritmo capacity scaling risolve il problema del massimo flusso con Ο(mlogU) aumenti ed ha complessità Ο(m 2 logu). 2.5 Shortest augmenting path algorithm Introduciamo innanzitutto il concetto di distance label, di fondamentale importanza per l algoritmo shortest augmenting path. Distance Label Una funzione distanza d: N Z + {0} è una funzione dall insieme dei nodi all insieme degli interi non negativi. Diremo che la funzione distanza è valida relativamente ad un dato flusso X se soddisfa le condizioni: 1. d ( t) = 0; (2.1) 2. d( d( + 1 ( i, nella rete residua G(X). (2.2) 20

21 Definiamo d( come la distance label del nodo i e le condizioni (2.1) e (2.2) condizioni di validità. Le seguenti proprietà mostrano come le distance label possono essere usate per progettare algoritmi su reti. Proprietà 2.4. Se le distance label sono valide, la distance label d( è un lower bound alla lunghezza del più corto direct path dal nodo i al nodo t nella rete residua. Per stabilire la validità di tale osservazione, sia P i =(i=i 1, i 2, i 3,, i k, i k+1 =t) un cammino di lunghezza k dal nodo i al nodo t nella rete residua. Le condizioni di validità implicano che: d( ik ) d( ik + 1 ) + 1 = d( t) + 1 = 1 d ( ik 1) d( ik) d ( ik 1 2) d( ik ) d( = d( i1 ) d( i2) + 1 k Proprietà 2.5. Se d( s) n, la rete residua non contiene alcun direct path dal nodo sorgente al nodo pozzo. La correttezza segue dal fatto che d (s) è un limite inferiore alla lunghezza del più corto direct path da s a t nella rete residua e nessun direct path può contenere più di n-1 archi. Diremo che le distance label sono esatte se per ogni nodo i, d ( è uguale alla lunghezza del più corto direct path dal nodo i al nodo t nella rete residua. Possiamo determinare le distance label esatte per tutti i nodi in tempo O(m) eseguendo una visita in ampiezza iniziando dal nodo pozzo. Ad esempio, in figura 2.4, se il nodo 1 è il nodo sorgente e il nodo 4 è il nodo pozzo, allora d=(0, 0, 0, 0) è un vettore di distance label valide, mentre d=(3, 1, 2, 0) è il vettore delle distance label esatte. 21

22 r ij Fig Distance label valide ed esatte. Archi e path ammissibili. Diremo che un arco (i, nella rete residua è ammissibile se soddisfa la condizione d ( = d( + 1; ci riferiremo a tutti gli altri archi come inammissibili. Un direct path dal nodo s al nodo t è ammissibile se è costituito da soli archi ammissibili. Un cammino ammissibile gode della seguente proprietà. Proprietà 2.6. Un cammino ammissibile è uno shortest augmenting path dal nodo sorgente al nodo pozzo. Notiamo infatti che ogni arco (i, in un path ammissibile P è ammissibile, pertanto la capacità residua di tale arco e le distance label dei nodi i e j sono tali da soddisfare le seguenti condizioni: 1. r ij > 0, 2. d ( = d( + 1. La condizione (1) implica che P è un augmenting path e la (2) implica che se P contiene k archi, allora d ( s) = k. Essendo d (s) un limite inferiore alla lunghezza di un direct path dalla sorgente al pozzo nella rete residua (per la proprietà 2.1), il path P è uno shortest augmenting path. L algoritmo shortest augmenting path procede aumentando il flusso lungo path ammissibili. Esso costruisce un path ammissibile incrementalmente aggiungendo un arco per volta. L algoritmo mantiene un path ammissibile parziale, ovvero una path dal nodo s ad un qualche nodo i costituito da soli archi ammissibili, ed iterativamente esegue operazioni di avanzamento o contrazione (rispettivamente advance e retreat in seguito) dall ultimo nodo del path ammissibile parziale, a cui ci riferiremo come nodo corrente. Se 22

23 il nodo corrente i ha un arco ammissibile (i,, l algoritmo esegue un operazione di advance ed aggiunge l arco (i, al path ammissibile parziale. Se il nodo corrente non ha archi ammissibili, l algoritmo effettua un operazione di retreat al fine di eliminare l ultimo arco del path parziale. L algoritmo ripete tali operazioni fino a quando il path ammissibile parziale raggiunge il nodo pozzo, dopodiché effettua un operazione di aumento lungo il path individuato. Esso ripete tale processo finché il flusso diventa un flusso massimo. algorithm shortest augmenting path begin x:=0; calcola le distance label esatte d(; i := s; while d(s) < n do begin if i ha un arco ammissibile then begin advance(; if i = t then augment e poni i: = s; end; else retreat(; end; end; procedure advance( begin sia (i, un arco ammissibile in A(; pred( := i and i := j ; end; procedure retreat( begin d( := min{d(+1 : (i, A( and r ij > 0 } if i s then i := pred(; end; procedure augment; 23

24 begin end; usando il campo predecessore identifica un augmenting path P da s a t; δ := min{ r ij : (i, P }; aumenta di δ unità il flusso lungo il path P; Correttezza dell algoritmo Dimostriamo che l algoritmo shortest augmenting path risolve correttamente il problema del massimo flusso. Teorema 2.7. L algoritmo shortest augmenting path mantiene valide le distance label ad ogni passo. Inoltre ogni operazione di retreat aumenta strettamente la distance label di un nodo. Dim. Mostriamo che l algoritmo mantiene valide le distance label ad ogni passo per induzione sul numero di aumenti e di operazioni retreat. (L operazione advance non influisce sull ammissibilità di ogni arco, infatti non cambia la capacità residua o le distance label). Inizialmente l algoritmo calcola distance label valide. Assumiamo, per ipotesi induttiva, che le distance label siano valide prima di una qualsiasi operazione e dimostriamo che le distance label restano valide dopo un operazione di augment e dopo una operazione retreat. Consideriamo l operazione di augment. Nonostante un aumento di flusso sull arco (i, potrebbe rimuovere tale arco dalla rete residua, questa modifica non influisce sulla validità delle distance label. Un aumento sull arco (i, potrebbe tuttavia creare un arco aggiuntivo (j, con r ji > 0 che deve soddisfare la disuguaglianza d ( d( + 1. Ma tale disuguaglianza è banalmente soddisfatta, in quanto dall ammissibilità dell augmenting path si ha d ( = d( + 1. Consideriamo ora l operazione retreat, la quale modifica d (. Ci riferiremo all operazione che calcola la nuova label d ( come relabel; è necessario dunque mostrare che ogni arco entrante e uscente dal nodo i soddisfa le condizioni di validità rispetto alla nuova distance label d '(. L algoritmo esegue una operazione di retreat sul nodo i quando quest ultimo non ha nessun arco ammissibile; cioè, nessun arco ( i, A( soddisfa le condizioni 24

25 d ( = d( + 1 e r ij > 0. Tale osservazione, insieme alla condizione di validità d ( d( + 1, implica che d( < d( + 1 ( i, A( con capacità residua positiva. Perciò, d( < min{ d( + 1: ( i, A( e rij > 0} = d' (, che è la nuova distance label dopo l operazione di relabel. Abbiamo così mostrato che l operazione di contrazione preserva la condizione di validità per tutti gli archi uscenti dal nodo i, e che ogni operazione aumenta strettamente il valore di d(. Notiamo infine che ogni arco (k, entrante nel nodo i, soddisfa la disuguaglianza d ( k) d( + 1 per ipotesi induttiva. Dopo l operazione di contrazione sul nodo i, d ( < d'(, da cui segue che d ( k) d'( + 1. L algoritmo shortest augmenting path termina quando d( s) n, il che significa, per la proprietà 2.5, che la rete residua non contiene augmenting path dalla sorgente al pozzo. Di conseguenza, per il teorema 2.1, il flusso ottenuto alla fine dell algoritmo è un flusso massimo. Dal quanto appena notato e dal teorema 2.7 deriva il seguente risultato. Teorema 2.8. L algoritmo shortest augmenting path computa correttamente il massimo flusso. Complessità dell algoritmo Dimostriamo che il tempo d esecuzione dell algoritmo è O(n 2 m). Descriviamo innanzitutto una struttura dati usata per selezionare un arco ammissibile uscente da un dato nodo corrente. Chiameremo tale struttura current arc data structure. Ricordiamo, dalla definizione data nel capitolo 1, che la lista d adiacenza A( di un nodo i è l insieme degli archi uscenti da i. Gli archi in tale lista sono ordinati arbitrariamente ma l ordine, una volta deciso, resta invariato durante tutta l esecuzione dell algoritmo. Ogni nodo i ha un current arc, che rappresenta il prossimo arco di A( per cui deve essere verificato il test d ammissibilità. Inizialmente il current arc del nodo i è il primo arco in A(. Ogniqualvolta l algoritmo cerca di individuare un arco ammissibile uscente da i, esso verifica se il current arc è ammissibile. Se tale arco non è ammissibile designa il prossimo arco nella lista A( come current arc. L algoritmo ripete questo processo finché non trova un arco ammissibile oppure raggiunge la fine della lista degli archi A(. 25

26 r ij Fig. 2.5 Selezione di archi ammissibili uscenti da un nodo. Consideriamo, ad esempio, la lista d adiacenza del nodo 1 in figura 2.5. In questo caso, A(={(1,2), (1,3), (1,4), (1,5), (1,6)}. Inizialmente, il current arc del nodo 1 è l arco (1, 2). Supponiamo quindi che l algoritmo cerchi di individuare un arco ammissibile uscente da 1. Esso verifica se il current arc è ammissibile. Poiché non lo è, l algoritmo imposta l arco (1, 3) come current arc del nodo 1. Anche l arco (1, 3) è non ammissibile, dunque il current arc diviene ora l arco (1, 4), il quale è ammissibile. Da questo punto in poi l arco (1, 4) resta il current arc del nodo 1 fino a quando esso diventerà inammissibile se l algoritmo dovesse incrementare il valore di d(4) o diminuire la capacità residua dell arco (1, 4) a 0. Consideriamo ora la situazione in cui l algoritmo raggiunge la fine della lista senza individuare un arco ammissibile. In questo caso i non ha archi ammissibili. Al fine di giustificare tale affermazione notiamo che se un arco (i, è inammissibile in precedenti iterazioni, esso rimane tale fino a quando d( non viene incrementato. Infatti se un arco (i, è inammissibile, ma soddisfa le condizioni di validità ad ogni passo dell algoritmo, allora d ( < d( + 1. Poiché ogni rietichettamento incrementa la distance label di un nodo, il rietichettamento del nodo j non renderà l arco (i, ammissibile. Pertanto l arco (i, resterà inammissibile fino a quando i non sarà rietichettato. Dunque se l algoritmo raggiunge la fine della lista, esso dovrà effettuare un operazione di retreat con conseguente relabel del nodo i e settare come current arc del nodo i il primo arco in A(. Notiamo che l operazione di relabel richiede la scansione della lista A( al fine di calcolare la nuova distance label, il che richiede lo stesso tempo necessario ad individuare archi ammissibili uscenti da i. Abbiamo dunque stabilito il seguente risultato. Proprietà 2.8. Se l algoritmo rietichetta ogni nodo al più k volte, il tempo totale speso per trovare archi ammissibili e rietichettare i nodi è O( k A( ) = O( km) i. N 26

27 Lemma 2.9. Se l algoritmo rietichetta ogni nodo al più k volte, l algoritmo satura gli archi (cioè, riduce la loro capacità residua a zero) al più km/2 volte. Dim. Mostriamo che tra due consecutive saturazioni di un arco (i,, d( e d( devono entrambi aumentare di almeno 2 unità. Poiché, per ipotesi, l algoritmo incrementa ogni distance label al più k volte, tale risultato implicherebbe che l algoritmo può saturare un arco al più k/2 volte. Pertanto il numero totale di saturazioni sarebbe km/2. Supponiamo quindi che un aumento satura un arco (i,. Poiché l arco (i, è ammissibile, d ( = d( + 1 (2.3) Prima che l algoritmo saturi nuovamente quest arco, esso deve inviare flusso all indietro dal nodo j al nodo i. A questo punto, le distance label d ( e d ( soddisfano l uguaglianza: d '( = d'( + 1. (2.4) Nella successiva saturazione dell arco (i, avremo: d ''( = d'' ( + 1. (2.5) Dalle 3 equazioni precedenti, otteniamo: d ''( = d'' ( + 1 d' ( + 1 = d' ( + 2 d( + 2. Si noti che le disuguaglianze in tale espressione derivano dal fatto che le distance label crescono strettamente durante l algoritmo (Lemma 2.7). In modo analogo è possibile mostrare che d ''( d( + 2. Lemma (a) Nell algoritmo shortest augmenting path ogni distance label aumenta al più n volte. Di conseguenza, il numero totale di operazioni di rietichettamento è al più n 2. (b) Il numero di operazioni augment è al più nm/2. Dim. Ogni operazione di relabel del nodo i aumenta il valore d( di almeno un unità. Dopo che l algoritmo ha rietichettato il nodo i n volte, d( n. Da questo punto in poi, l algoritmo non seleziona più il nodo i per un operazione di estensione poiché, per ogni nodo k nel cammino ammissibile parziale si ha d(k) < d(s) < n. Dunque l algoritmo rietichetta un nodo al più n volte e il numero totale di rietichettamenti è O(n 2 ). Dal lemma 2.9 precedente sappiamo che l algoritmo satura al più nm/2 archi. Poiché, ogni aumento satura almeno un arco, otteniamo immediatamente un limite di nm/2 sul numero di aumenti. 27

28 Teorema 2.11 L algoritmo shortest augmenting path impiega tempo O(n 2 m). Dim. Dai lemmi 2.8 e 2.10 deriva che il tempo totale speso nella ricerca di archi ammissibili e nel rietichettamento di nodi è O(mn). Il lemma 2.10 implica che il numero totale di aumenti è O(nm). Poiché ogni aumento richiede tempo O(n), lo sforzo totale per operazioni di aumento è O(n 2 m). Ogni operazione retreat rietichetta un nodo, pertanto il numero totale di operazioni retreat è O(n 2 ). Ogni operazione advance aggiunge un arco al path ammissibile parziale, ed ogni operazione retreat ne elimina uno. Poiché ogni path ammissibile parziale ha lunghezza al più (n-1), l algoritmo richiede al più O(n 2 + n 2 m) operazioni advance. Il primo termine deriva dal numero di operazioni di retreat, ed il secondo dal numero di operazioni di augment. La combinazione di tali limiti stabilisce il teorema. Un pratico miglioramento: euristica gap L algoritmo shortest augmenting path termina quando d( s) n. Questo criterio è soddisfacente per l analisi del caso pessimo, ma non è efficiente in pratica. Risultati sperimentali hanno dimostrato che l algoritmo impiega troppo tempo per rietichettare i nodi e la maggior parte di tale sforzo è compiuto dopo che l algoritmo ha determinato il flusso massimo. Suggeriamo una tecnica capace di scoprire la presenza di un taglio minimo e così l esistenza del flusso massimo prima che l etichetta del nodo s soddisfi la condizione d( s) n. Discutiamo tale tecnica basandoci sulla rete residua in figura 2.6. d( d( Fig Esempio di cattivo funzionamento del criterio di terminazione per l algoritmo shortest augmenting path. 28

29 Nonostante il flusso in tale rete sia un flusso massimo, in quanto non esistono augmenting path, il criterio di terminazione d ( 1) 12 è lontano dall essere soddisfatto. Da questo punto in poi, l algoritmo incrementerà le distance label dei nodi 6, 1, 2, 3, 4, 5, in tale ordine, ogni volta di due unità. Prima o poi, d(1) diventerà maggiore o uguale a 12 e l algoritmo terminerà. Osserviamo che l insieme dei nodi S costituente il taglio minimo [ S, S ] è {6, 1, 2, 3, 4, 5}, e l algoritmo incrementa le distance label di tutti i nodi in S senza effettuare alcun aumento. La tecnica che descriviamo consentirà di individuare situazioni del genere. Per implementare questo approccio, utilizziamo un array n- dimensionale numb, i cui indici variano da 0 ad n-1. Il valore di numb(k) è il numero di nodi la cui distance label è uguale a k. L'algoritmo inizializza questo array mentre calcola le distance label iniziali usando una visita in ampiezza. A questo punto, le entrate positive nell array sono consecutive da zero fino a qualche indice l mentre le rimanenti entrate saranno zero. Ad esempio, l array numb per le distance label relative alla rete di figura 2.6 è numb[0]=1, numb[1]=5, numb[2]=1, numb[3]=1, numb[4]=4 e le restanti entrate sono nulle. Ogni qualvolta l algoritmo aumenta la distance label di un nodo da k 1 a k 2, sottrae 1 da numb[k 1 ], aggiunge 1 a numb[k 2 ] e verifica se numb[k 1 ] sia uguale a 0. Se numb[k 1 ]=0 l algoritmo termina. Dimostriamo che il criterio di terminazione è corretto. Siano S = { i N : d( > k1} e S = { i N : d( < k1}. E facile verificare che s S e t S per cui [ S, S ] è un taglio s-t. Le definizioni degli insiemi S e S implicano che d( > d( + 1 ( i, [ S, S]. La condizione di validità (2.2) implica che rij = 0 ( i, [ S, S]. Dunque [ S, S ] è un taglio minimo e il flusso corrente è un flusso massimo. Dinic s algorithm Anche l algortimo di Dinic, come l algoritmo shortest augmenting path, invia flusso lungo shortest path dalla sorgente al pozzo. L osservazione alla base dell algoritmo di Dinic è che una singola visita in ampiezza della rete residua potrebbe essere usata per individuare tutti gli augmenting path di lunghezza minima dalla sorgente al pozzo. Tale algoritmo costruisce della particolari reti, definite reti layered (stratificate), al fine di individuare tali augmenting path, e stabilisce poi dei flussi definiti bloccanti. In tale sezione non 29

30 presenteremo l originale algoritmo di Dinic, ma ridurremo l algoritmo shortest aumenting path a quello di Dinic. Relativamente ad un dato flusso X, definiamo la rete layered V come segue. Determiniamo innanzitutto le distance label esatte d in G(X). La rete layered è costituita dagli archi (i, in G(X) tali che d ( = d( + 1. Ad esempio, consideriamo la rete residua in figura 2.7 (a). Il numero accanto ad ogni nodo rappresenta la distance label esatta di quel nodo. In figura 2.7(b) è possibile notare la rete layered relativa alla rete residua. Osserviamo che per definizione ogni direct path da s a t nelle rete layered è uno shortest path in G(X). d( d( s t V 2 V 1 V 0 Fig Costruzione della rete layered. (a): Rete residua. (b): Rete layered corrispondente. (c): Rete layered dopo l eliminazione degli archi ridondanti. Notiamo inoltre che qualche arco in V potrebbe non appartenere ad alcun direct path dalla sorgente al pozzo, come ad esempio gli archi (5, 7) e (6, 7) in figura 2.7(b). Poiché tali archi non saranno coinvolti in operazioni di aumento, saranno cancellati dalla rete layered, ottenendo, nel caso considerato, la rete layered in figura 2.7(c). Nella rete layered risultante, i nodi sono partizionati in layer (strat di nodi, V 0, V 1, V 2,,V l, dove l è la distance label del nodo sorgente; il layer k contiene i nodi la cui distance label è uguale a k. L algoritmo di Dinic procede aumentando il flusso lungo direct path da s a t nella rete layered. L aumento di flusso lungo un arco (i, riduce la capacità residua di tale arco ed incrementa la capacità residua dell arco inverso (j, ; tuttavia, poiché ogni arco nella rete layered è ammissibile, ovvero d ( = d( + 1, non è possibile che un aumento sull arco (i, aggiunga l arco inverso alla rete layered. Di conseguenza, la lunghezza di ogni augmenting path è d(s) ed in ogni augmenting path ogni arco (i, ha i Vk e Vk 1 j per 30

Autori: M. Di Ianni, A. Panepuccia

Autori: M. Di Ianni, A. Panepuccia AR Analisi di Reti 2010/2011 M.Di Ianni Assegnazioni di ruoli Autori: M. Di Ianni, A. Panepuccia In questa dispensa verrà trattato il problema dell assegnazione dei ruoli in un grafo. Tale problema è stato

Dettagli

CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1

CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1 1.1 Che cos è un algoritmo CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1 Gli algoritmi sono metodi per la soluzione di problemi. Possiamo caratterizzare un problema mediante i dati di cui si dispone all inizio

Dettagli

DESMATRON TEORIA DEI GRAFI

DESMATRON TEORIA DEI GRAFI DESMATRON TEORIA DEI GRAFI 0 Teoria dei Grafi Author: Desmatron Release 1.0.0 Date of Release: October 28, 2004 Author website: http://desmatron.altervista.org Book website: http://desmatron.altervista.org/teoria_dei_grafi/index.php

Dettagli

1. Intorni di un punto. Punti di accumulazione.

1. Intorni di un punto. Punti di accumulazione. 1. Intorni di un punto. Punti di accumulazione. 1.1. Intorni circolari. Assumiamo come distanza di due numeri reali x e y il numero non negativo x y (che, come sappiamo, esprime la distanza tra i punti

Dettagli

Gli algoritmi. Gli algoritmi. Analisi e programmazione

Gli algoritmi. Gli algoritmi. Analisi e programmazione Gli algoritmi Analisi e programmazione Gli algoritmi Proprietà ed esempi Costanti e variabili, assegnazione, istruzioni, proposizioni e predicati Vettori e matrici I diagrammi a blocchi Analisi strutturata

Dettagli

Appunti di Logica Matematica

Appunti di Logica Matematica Appunti di Logica Matematica Francesco Bottacin 1 Logica Proposizionale Una proposizione è un affermazione che esprime un valore di verità, cioè una affermazione che è VERA oppure FALSA. Ad esempio: 5

Dettagli

STUDIO DEL MODELLO DI ISING SU GRAFI FRATTALI

STUDIO DEL MODELLO DI ISING SU GRAFI FRATTALI UNIVERSITÀ DEGLI STUDI DI PARMA FACOLTÀ DI SCIENZE MATEMATICHE, FISICHE E NATURALI CORSO DI LAUREA IN FISICA STUDIO DEL MODELLO DI ISING SU GRAFI FRATTALI Relatore: Correlatore: Dott. DAVIDE CASSI Dott.ssa

Dettagli

IL PROBLEMA DELLO SHORTEST SPANNING TREE

IL PROBLEMA DELLO SHORTEST SPANNING TREE IL PROBLEMA DELLO SHORTEST SPANNING TREE n. 1 - Formulazione del problema Consideriamo il seguente problema: Abbiamo un certo numero di città a cui deve essere fornito un servizio, quale può essere l energia

Dettagli

ALGEBRA: LEZIONI DAL 13 OTTOBRE AL 3 NOVEMBRE

ALGEBRA: LEZIONI DAL 13 OTTOBRE AL 3 NOVEMBRE ALGEBRA: LEZIONI DAL 13 OTTOBRE AL 3 NOVEMBRE 1 DIPENDENZA E INDIPENDENZA LINEARE Se ho alcuni vettori v 1, v 2,, v n in uno spazio vettoriale V, il sottospazio 1 W = v 1,, v n di V da loro generato è

Dettagli

Appunti dalle Lezioni di MECCANICA RAZIONALE

Appunti dalle Lezioni di MECCANICA RAZIONALE Università degli Studi de L Aquila Appunti dalle Lezioni di MECCANICA RAZIONALE tenute dal prof. Raffaele ESPOSITO i INDICE Indice.......................................................................

Dettagli

Appunti ed esercizi. di Meccanica Razionale

Appunti ed esercizi. di Meccanica Razionale Appunti ed esercizi di Meccanica Razionale Università degli Studi di Trieste - Sede di Pordenone Facoltà di Ingegneria Appunti ed esercizi di Meccanica Razionale Luciano Battaia Versione del 29 dicembre

Dettagli

Matematica B - a.a 2006/07 p. 1

Matematica B - a.a 2006/07 p. 1 Matematica B - a.a 2006/07 p. 1 Definizione 1. Un sistema lineare di m equazioni in n incognite, in forma normale, è del tipo a 11 x 1 + + a 1n x n = b 1 a 21 x 1 + + a 2n x n = b 2 (1) = a m1 x 1 + +

Dettagli

GESTIONE INTELLIGENTE DI SCORTE CON LOGICA FUZZY

GESTIONE INTELLIGENTE DI SCORTE CON LOGICA FUZZY UNIVERSITÀ DEGLI STUDI DI PADOVA Dipartimento di Tecnica e Gestione dei Sistemi Industriali GESTIONE INTELLIGENTE DI SCORTE CON LOGICA FUZZY Laureando: Eris Chinellato Relatore: Ch.mo Prof. Silverio Bolognani

Dettagli

Funzioni esponenziali elogaritmiche

Funzioni esponenziali elogaritmiche Funzioni esponenziali elogaritmiche Edizioni H ALPHA LORENZO ROI c Edizioni H ALPHA. Luglio 2010. H L immagine frattale di copertina rappresenta un particolare dell insieme di Mandelbrot centrato nel punto

Dettagli

Lo schema di Bernoulli (o delle prove indipendenti): un esempio di modello probabilistico applicabile a diversi contesti

Lo schema di Bernoulli (o delle prove indipendenti): un esempio di modello probabilistico applicabile a diversi contesti Lo schema di Bernoulli (o delle prove indipendenti): un esempio di modello probabilistico applicabile a diversi contesti Rita Giuliano (Pisa) 0. Introduzione. È ormai acquisizione comune il fatto che uno

Dettagli

Fondamenti di FISICA MATEMATICA II: Introduzione alla Teoria delle Equazioni alle Derivate Parziali del Secondo Ordine

Fondamenti di FISICA MATEMATICA II: Introduzione alla Teoria delle Equazioni alle Derivate Parziali del Secondo Ordine Valter Moretti Dipartimento di Matematica Università di Trento Fondamenti di FISICA MATEMATICA II: Introduzione alla Teoria delle Equazioni alle Derivate Parziali del Secondo Ordine Corso di Fondamenti

Dettagli

ANALISI DEI DATI CON SPSS

ANALISI DEI DATI CON SPSS STRUMENTI E METODI PER LE SCIENZE SOCIALI Claudio Barbaranelli ANALISI DEI DATI CON SPSS II. LE ANALISI MULTIVARIATE ISBN 978-88-7916-315-9 Copyright 2006 Via Cervignano 4-20137 Milano Catalogo: www.lededizioni.com

Dettagli

Documento approvato dalla Commissione di studio per le norme relative ai materiali stradali e progettazione, costruzione e manutenzione strade del CNR

Documento approvato dalla Commissione di studio per le norme relative ai materiali stradali e progettazione, costruzione e manutenzione strade del CNR MINISTERO DELLE INFRASTRUTTURE E DEI TRASPORTI SISTEMI DI REGOLAZIONE DEL TRAFFICO LINEE GUIDA Documento approvato dalla Commissione di studio per le norme relative ai materiali stradali e progettazione,

Dettagli

La selezione della caratteristica multidimensionale nei segnali fisiologici

La selezione della caratteristica multidimensionale nei segnali fisiologici Università degli studi di Bari Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Fisica Tesi di Laurea La selezione della caratteristica multidimensionale nei segnali fisiologici Relatori:

Dettagli

ALGEBRA I: NUMERI INTERI, DIVISIBILITÀ E IL TEOREMA FONDAMENTALE DELL ARITMETICA

ALGEBRA I: NUMERI INTERI, DIVISIBILITÀ E IL TEOREMA FONDAMENTALE DELL ARITMETICA ALGEBRA I: NUMERI INTERI, DIVISIBILITÀ E IL TEOREMA FONDAMENTALE DELL ARITMETICA 1. RICHIAMI SULLE PROPRIETÀ DEI NUMERI NATURALI Ho mostrato in un altra dispensa come ricavare a partire dagli assiomi di

Dettagli

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione.

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione. Grafi ed Alberi Pag. /26 Grafi ed Alberi In questo capitolo richiameremo i principali concetti di due ADT che ricorreranno puntualmente nel corso della nostra trattazione: i grafi e gli alberi. Naturale

Dettagli

Introduzione alla Teoria dei Giochi

Introduzione alla Teoria dei Giochi Introduzione alla Teoria dei Giochi A. Agnetis Questi appunti presentano alcuni concetti introduttivi fondamentali di Teoria dei Giochi. Si tratta di appunti pensati per studenti di Ingegneria Gestionale

Dettagli

ED. Equazioni cardinali della dinamica

ED. Equazioni cardinali della dinamica ED. Equazioni cardinali della dinamica Dinamica dei sistemi La dinamica dei sistemi di punti materiali si può trattare, rispetto ad un osservatore inerziale, scrivendo l equazione fondamentale della dinamica

Dettagli

Ricerca Operativa Esercizi sul metodo del simplesso. Luigi De Giovanni, Laura Brentegani

Ricerca Operativa Esercizi sul metodo del simplesso. Luigi De Giovanni, Laura Brentegani Ricerca Operativa Esercizi sul metodo del simplesso Luigi De Giovanni, Laura Brentegani 1 1) Risolvere il seguente problema di programmazione lineare. ma + + 3 s.t. 2 + + 2 + 2 + 3 5 2 + 2 + 6,, 0 Soluzione.

Dettagli

LINEE GUIDA PER LA PIANIFICAZIONE E IL MONITORAGGIO DEL MIGLIORAMENTO

LINEE GUIDA PER LA PIANIFICAZIONE E IL MONITORAGGIO DEL MIGLIORAMENTO LINEE GUIDA PER LA PIANIFICAZIONE E IL MONITORAGGIO DEL MIGLIORAMENTO 1 INDICE LINEE GUIDA PER LA PIANIFICAZIONE E IL MONITORAGGIO DEL MIGLIORAMENTO ---------------------------------------------------------------------------------------------1

Dettagli

Cenni sulla Teoria dei Nodi

Cenni sulla Teoria dei Nodi Cenni sulla Teoria dei Nodi Presentata da: Francesco Dolce Relatore: Prof. Claudio G. Bartolone Anno Accademico 2008/2009 2 La matematica non si capisce, alla matematica ci si abitua. John von Neumann

Dettagli

Filomena Maggino, L analisi dei dati nell indagine statistica. Volume 1: la realizzazione dell indagine e l analisi preliminare dei dati, ISBN:

Filomena Maggino, L analisi dei dati nell indagine statistica. Volume 1: la realizzazione dell indagine e l analisi preliminare dei dati, ISBN: Filomena Maggino, L analisi dei dati nell indagine statistica. Volume 1: la realizzazione dell indagine e l analisi preliminare dei dati, ISBN: 88-8453-208-6 (print) ISBN: 88-8453-207-8 (online), Firenze

Dettagli

Teoria quantistica della conduzione nei solidi e modello a bande

Teoria quantistica della conduzione nei solidi e modello a bande Teoria quantistica della conduzione nei solidi e modello a bande Obiettivi - Descrivere il comportamento quantistico di un elettrone in un cristallo unidimensionale - Spiegare l origine delle bande di

Dettagli

Costruzioni con riga e compasso. Fabio Stumbo Dipartimento di Matematica Università di Ferrara Ferrara, I f.stumbo@unife.it

Costruzioni con riga e compasso. Fabio Stumbo Dipartimento di Matematica Università di Ferrara Ferrara, I f.stumbo@unife.it ostruzioni con riga e compasso Fabio Stumbo Dipartimento di Matematica Università di Ferrara Ferrara, I f.stumbo@unife.it INDIE 2 Indice 1 Note storiche 3 2 ostruzioni fondamentali 8 2.1 Definizione e

Dettagli

Φ(t,ẋ,ẍ,...,x (n) ) = 0.

Φ(t,ẋ,ẍ,...,x (n) ) = 0. 2 INTRODUZIONE ALLE EQUAZIONI DIFFERENZIALI ORDINARIE Si chiamano equazioni differenziali le equazioni in cui le incognite sono funzioni di una o più variabili indipendenti, ed in cui compaiano non solo

Dettagli