Algoritmo basato su cancellazione di cicli

Похожие документы
Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza

Introduzione ai grafi

2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Problema dell albero di cammini minimi (SPT, Shortest Path Tree) o problema dei cammini minimi :

2.2 Alberi di supporto di costo ottimo

Problema del cammino minimo

Introduzione ai grafi. Introduzione ai grafi p. 1/2

Possibile applicazione

Algoritmi e Strutture di Dati (3 a Ed.) Algoritmo dei tre indiani. Alan Bertossi, Alberto Montresor

Gestione della produzione e della supply chain Logistica distributiva

Grafi (orientati): cammini minimi

Flusso a Costo Minimo

11.4 Chiusura transitiva

Claudio Arbib Università di L Aquila. Ricerca Operativa. Reti di flusso

Progettazione di Algoritmi

Algoritmi e strutture dati

Problemi, istanze, soluzioni

Ricerca Operativa. G. Liuzzi. Lunedí 20 Aprile 2015

Esercizi di Algoritmi e Strutture Dati

ALGORITMI DI OTTIMIZZAZIONE M Esercizi Parte I

Alberi di copertura. Mauro Passacantando. Dipartimento di Informatica Largo B. Pontecorvo 3, Pisa

Minimo albero di copertura

Grafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

Note per la Lezione 4 Ugo Vaccaro

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 17 giugno 2013

3.6 Metodi basati sui piani di taglio

RICERCA OPERATIVA (a.a. 2015/16) Nome: Cognome: Matricola:

Programmazione Lineare: problema del trasporto Ing. Valerio Lacagnina

METODI DELLA RICERCA OPERATIVA

Parte V: Rilassamento Lagrangiano

Progettazione di Algoritmi

Esame di Ricerca Operativa del 15/01/2015

Esercizi per il corso di. Logistica I. a.a Daniela Favaretto. Dipartimento di Matematica Applicata Università Ca Foscari di Venezia

Makespan con set-up dipendenti dalla sequenza. 1/s jk /C max

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

Problema del trasporto

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 20 giugno 2014

Cammini minimi in grafi:

Esame di Ricerca Operativa del 07/09/2016

Ottimizzazione nella Gestione dei Progetti - Esercitazione 1: calcolo degli schedule ottimi

Cammini minimi. Definizioni. Distanza fra vertici. Proprietà dei cammini minimi. Algoritmi e Strutture Dati

Esame di Ricerca Operativa del 16/06/2015

Grafi: visita generica

Dati e Algoritmi I (Pietracaprina) Esercizi svolti sui Grafi

Grafi e reti di flusso

Il problema del commesso viaggiatore

Algoritmi e Strutture di Dati (3 a Ed.) String matching. Alan Bertossi, Alberto Montresor

COMPITO DI RICERCA OPERATIVA APPELLO DEL 08/01/04

Esempi. non. orientato. orientato

Problemi di Flusso: Il modello del Trasporto

Grafi e Funzioni di Costo ESERCIZI

4.5 Metodo del simplesso

Algoritmi e Strutture Dati

Esercizio 1. Esercizio 2

Dati e Algoritmi 1: A. Pietracaprina. Grafi (II parte)

Alberi e alberi binari I Un albero è un caso particolare di grafo

Capitolo 5. Algoritmi di ricerca su grafo. 5.1 Algoritmi di ricerca su grafo

Corso di elettrotecnica Materiale didattico: i grafi

Routing IP. IP routing

3.4 Metodo di Branch and Bound

Euristiche per il Problema del Commesso Viaggiatore

Programmazione logica e PROLOG. Esercitazione 1. AI - Carlucci Aiello & Nardi, 2007 Esercitazione 1 0

Esercizi proposti 10

Introduzione. Il routing permette la comunicazione tra due nodi differenti anche se non sono collegati direttamente

Grafi diretti. Un grafo diretto (o grafo orientato) G è una coppia (V,E) dove. V è u n i n s i e m e d i nodi (o vertici);

RISOLUZIONE IN LOGICA PROPOSIZIONALE. Giovanna D Agostino Dipartimento di Matemaica e Informatica, Università di Udine

Esercitazione 10 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

In questa lezione. Heapsort. ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 114

NOTE DI ALGEBRA LINEARE v = a 1 v a n v n, w = b 1 v b n v n

Appunti lezione Capitolo 15 Ricerca locale

Alberi binari e alberi binari di ricerca

5.3 Metodo dei piani di taglio

Parte III: Algoritmo di Branch-and-Bound

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

Esercizi su alberi binari

AMPL Problemi su Reti

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione

Il metodo dei Piani di Taglio (Cutting Planes Method)

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Cammini minimi fra tutte le coppie

Alberi ed Alberi Binari

Metodi e Modelli per l Ottimizzazione Combinatoria Cover inequalities

Automa a Stati Finiti (ASF)

Транскрипт:

Algoritmo basato su cancellazione di cicli Dato un flusso ammissibile iniziale, si costruisce una sequenza di flussi ammissibili di costo decrescente. Ciascun flusso è ottenuto dal precedente flusso ammissibile x ridistribuendo il flusso (che soddisfa i bilanci ai nodi) mediante un ciclo aumentante C di costo negativo : la quantità di flusso ridistribuita è pari alla capacità θ(c, x) del ciclo rispetto al flusso ammissibile x : il nuovo flusso determinato è un flusso ammissibile di costo inferiore.

L operazione di far circolare sugli archi di C un flusso pari a θ(c, x) (= saturare un ciclo aumentante C) è detta cancellazione del ciclo perché tale ciclo non è più aumentante per il flusso x(θ) ; tale ciclo può però tornare ad essere aumentante per flussi generati successivamente. L algoritmo termina quando non esistono più cicli aumentanti di costo negativo: il flusso ammissibile corrente è di costo minimo.

Procedure Cancella-Cicli (G, c, b, u, x, caso) : begin if Flusso -Ammissibile(G, c, b, u, x) then begin while Trova-Ciclo (G, c, u, x, C, θ) do Cambia-Flusso (x, C, θ) ; caso := ottimo end else caso := vuoto end.

Determinazione di un flusso ammissibile iniziale (procedura Flusso-Ammissibile) Si risolve un problema di flusso massimo con più sorgenti j S e più pozzi i T aventi capacità finita u j = b j, j S, e u i = b i, i T si determina cioè la massima quantità di flusso che può essere immessa nella (prelevata dalla) rete

Ciò è fatto determinando il MF sul grafo ampliato G = (N, A ) N = N {s, t} s e t sono la super-sorgente ed il super-pozzo A = A {(s, j) : j S} {(i, t) : i T} gli archi che collegano la super-sorgente ai nodi di S = {j : b j < 0} hanno capacità u sj = b j ; gli archi che collegano i nodi di T = {i : b i > 0} al super-pozzo hanno capacità u it = b i ;

Se il flusso massimo satura tutte le sorgenti (tutti gli archi (s, j)) e, di conseguenza, tutti i pozzi (tutti gli archi (i, t)), allora il flusso è ammissibile per il problema del flusso di costo minimo ; altrimenti non esistono flussi ammissibili La procedura Flusso-Ammissibile restituisce vero ed il flusso x, se esiste un flusso ammissibile falso, altrimenti

Determinazione di un ciclo di costo negativo aumentante rispetto al flusso ammissibile x (procedura Trova-Ciclo) Determinare un ciclo aumentante di costo negativo in G rispetto ad x è equivalente a determinare un ciclo orientato e di costo negativo nel grafo residuo G(x) Si utilizza l algoritmo SPT.L in cui Q è implementato come fila per determinare sul grafo residuo G(x) l albero dei cammini minimi con insieme di radici R = N : si considera, cioè, il grafo residuo ampliato G (x), ottenuto aggiungendo una radice fittizia r un arco (r, j), di costo c rj = 0, per ogni nodo j N

In assenza di cicli negativi, l algoritmo SPT.L con Q gestito come fila non può estrarre lo stesso nodo da Q più di n volte : si conta perciò il numero di estrazioni da Q di ciascun nodo. Se un nodo viene estratto per l n-esima volta, quel nodo appartiene ad un ciclo negativo, che viene individuato per mezzo del vettore p dei predecessori, percorrendo il ciclo all indietro a partire dal nodo estratto n volte. Se, invece, SPT.L con Q implementato come fila determina un albero dei cammini minimi, si ha la prova che il flusso x è ottimo.

Determinazione di un ciclo di costo negativo aumentante rispetto al flusso ammissibile x (procedura Trova-Ciclo) in questo caso restituisce vero ed il ciclo individuato C, con il suo verso e la sua capacità θ = θ(c, x), altrimenti restituisce falso. È dimostrato che il problema di determinare un ciclo aumentante di costo negativo in G rispetto ad x è equivalente al problema di determinare un ciclo orientato e di costo negativo in G x. Il problema diventa: come determinare un ciclo orientato e di costo negativo in G x?

La procedura Trova-Ciclo restituisce vero e il ciclo C con il suo verso e la sua capacità θ = θ(c, x), se il ciclo negativo aumentante esiste falso, altrimenti Una volta determinato il ciclo C ed il valore θ, la procedura Cambia-Flusso costruisce il nuovo flusso x(θ) = x θ C. L algoritmo basato sulla cancellazione di cicli è un algoritmo di ricerca locale : l intorno di x è dato da tutti i flussi ottenibili da x inviando flusso lungo un ciclo aumentante semplice.

Risolvere il seguente problema di flusso di costo minimo con l algoritmo per cancellazione di cicli (6, ) (, ) (7, ) (0, 0) b (0, 0) = 0 b = 0 (u b i i ij,c ij ) (, ) j (4, ) 4 (, 6) b = b = b 4 = 0

Una soluzione ammissibile iniziale, facilmente individuabile, è il seguente flusso ammissibile x x b i ij, (u ij, c ij ) i 0, (, ) 0, (7, ) 0, (6, ) 0, (0, 0) b = 0 0, (0, 0) b = 0 j 0, (, ) 0, (4, ) 4 0, (, 6) Costo del flusso x : c x + c x = 00

determinare un ciclo aumentante di costo negativo in G rispetto ad x è equivalente a determinare un ciclo orientato di costo negativo nel grafo residuo G(x ): (, ) (7, ) (6, ) (u b i i ij, c ij ) b = 0 (0, 0) (0, 0) b = 0 j (, ) (4, ) 4 (, 6)

(, ) (7, ) (6, ) (u b i i ij, c ij ) b = 0 (0, 0) (0, 0) b = 0 j (, ) (4, ) 4 (, 6) Costo c(c) del ciclo C : costo dell invio di un unità di flusso lungo C c ( C) = ( i, j ) c ij C = + 6 0 0 = Capacità θ(c, x ) del ciclo C rispetto al flusso x : min {,, 0, 0} =

Il nuovo flusso ammissibile x è 0, (, ) 0, (7, ) 0, (6, ) 8, (0, 0) b = 0 8, (0, 0) x b i i ij, (u ij, c ij ) b = 0 j, (, ) 0, (4, ) 4, (, ) Costo del flusso x : 00 = 74

? = esiste in G un ciclo aumentante rispetto ad x di costo negativo? Per rispondere a questa domanda cerchiamo un ciclo orientato di costo negativo nel grafo residuo G(x ) : (, ) (7, ) (, 0) (, 0) b = 0 (8, 0) (8, 0) (, ) (4, ) 4 (6, ) (, 6) (, 6) (u b i i ij, c ij ) b = 0 j

(, ) (7, ) (, 0) (, 0) b = 0 (8, 0) (8, 0) (, ) (4, ) 4 (6, ) (, 6) (, 6) (u b i i ij, c ij ) b = 0 j Costo c(c) del ciclo C : costo dell invio di un unità di flusso lungo C c ( C) = ( i, j ) c ij C = + 6 0 = Capacità θ(c, x ) del ciclo C rispetto al flusso x : min {8, 4, } =

Il nuovo flusso ammissibile x è 0, (, ) 0, (7, ) 0, (6, ) 8, (0, 0) b = 0, (0, 0) x b i i ij, (u ij, c ij ) b = 0 j, (, ), (4, ) 4, (, 6) Costo del flusso x : 74 = 7

? = esiste in G un ciclo aumentante rispetto ad x di costo negativo? Cerchiamo un ciclo orientato di costo negativo nel grafo residuo G(x ) : (, ) (7, ) (, 0) (, 0) b = 0 (8, 0) (, 0) (, ) 4 (, ) (, ) (6, ) (, 6) (u b i i ij, c ij ) b = 0 j

(, ) (, 0) (, 0) b = 0 (8, 0) (, 0) (, ) (7, ) 4 (, ) (, ) (6, ) (, 6) (u b i i ij, c ij ) b = 0 j Costo c(c) del ciclo C : costo dell invio di un unità di flusso lungo C c ( C) = ( i, j ) c ij C = + 0 0 = Capacità θ(c, x ) del ciclo C rispetto al flusso x : min {, 6,, 8} =

Il nuovo flusso ammissibile x 4 è, (, ) 0, (7, ), (6, ) 6, (0, 0) b = 0, (0, 0) x b i i ij, (u ij, c ij ) b = 0 j, (, ), (4, ) 4, (, 6) Costo del flusso x 4 : 7 = 47

? = esiste in G un ciclo aumentante rispetto ad x 4 di costo negativo? Cerchiamo un ciclo orientato di costo negativo nel grafo residuo G(x 4 ) : (, ) (4, 0) (7, 0) b = 0 (6, 0) (, 0) (, ) (7, ) 4 (, ) (4, ) (, ) (, ) (, 6) (u b i i ij, c ij ) b = 0 j

(, ) (4, 0) (7, 0) b = 0 (6, 0) (, 0) (, ) (7, ) 4 (, ) (4, ) (, ) (, ) (, 6) (u b i i ij, c ij ) b = 0 j Costo c(c) del ciclo C : costo dell invio di un unità di flusso lungo C c ( C) = ( i, j ) c ij C = 0 + + = 4 Capacità θ(c, x 4 ) del ciclo C rispetto al flusso x 4 : min {4,, 7} =

Il nuovo flusso ammissibile x è, (, ), (7, ), (6, ) 6, (0, 0) b = 0 0, (0, 0) x b i i ij, (u ij, c ij ) b = 0 j, (, ), (4, ) 4, (, 6) Costo del flusso x : 47 4 =

? = esiste in G un ciclo aumentante rispetto ad x di costo negativo? Cerchiamo un ciclo orientato di costo negativo nel grafo residuo G(x ) : (, ) (4, 0) (0, 0) b = 0 (6, 0) (, ) (, ) (4, ) 4 (, ) (, ) (, ) (, ) (, 6) (u b i i ij, c ij ) b = 0 j

(, ) (4, 0) (0, 0) b = 0 (6, 0) (, ) (4, ) 4 (, ) (, ) (, ) (, ) (, ) (, 6) (u b i i ij, c ij ) b = 0 j Costo c(c) del ciclo C : costo dell invio di un unità di flusso lungo C c ( C) = ( i, j ) c ij C = 6 + = Capacità θ(c, x ) del ciclo C rispetto al flusso x : min {,,, 4} =

Il nuovo flusso ammissibile x 6 è, (, ) 4, (7, ) 6, (6, ) 6, (0, 0) b = 0 0, (0, 0) x b i i ij, (u ij, c ij ) b = 0 j, (, ), (4, ) 4 4, (, 6) Costo del flusso x 6 : =

? = esiste in G un ciclo aumentante rispetto ad x 6 di costo negativo? Cerchiamo un ciclo orientato di costo negativo nel grafo residuo G(x 6 ) : (, ) (4, 0) (0, 0) b = 0 (6, 0) (, ) (, ) 4 (4, ) (, ) (, ) (6, ) (, 6) (4, 6) (u b i i ij, c ij ) b = 0 j

L algoritmo di Bellman determina su G(x) un albero dei cammini minimi, anziché un ciclo orientato di costo negativo : d = 8 d 0 = 9 d = 9 0 0 d = 0 6 d 4 = 6 4 6 Non esistendo cicli orientati di costo negativo su G(x), non esistono cicli aumentanti rispetto ad x di costo negativo su G, quindi il flusso x è un flusso di costo minimo.

Problemi di accoppiamento Dati : G = ( O D, A ) : grafo bipartito non orientato bipartito: l insieme dei nodi è partizionato in due sottoinsiemi O = {,, n } : insieme dei nodi origine D = { n +,, n + d } : insieme dei nodi destinazione si può supporre, senza perdita di generalità, che n d : infatti, essendo il grafo non orientato, se n > d è sufficiente scambiare tra loro i ruoli dei nodi. A O D, con A = m : insieme degli archi c ij : costo di attraversamento dell arco (i, j) A (non presente nel problema di accoppiamento di massima cardinalità)

Esempio O = {,, 4} D = {,, 8} A = { (, ), (, 6), (, 8), (, ), (, 8), (, 6), (4, 6), (4, 7), (4, 8) } 6 7 4 8 Convenzione: nell arco non orientato (i, j) i O e j D

Accoppiamento (matching) M : sottoinsieme di archi (M A) che non hanno nodi in comune (su ogni nodo incide al più un arco di M ) Rispetto ad un accoppiamento M l arco (i, j) è detto interno se (i, j) M l arco (i, j) è detto esterno se (i, j) A \ M un nodo si dice accoppiato se su esso incide un arco di M un nodo si dice esposto se su esso non incide alcun arco di M O M ( O) : insieme dei nodi origine esposti D M ( D) : insieme dei nodi destinazione esposti

Cardinalità dell accoppiamento M ( M ) : è il numero degli archi appartenenti a M Se O = D (n = d), si dice accoppiamento perfetto (o assegnamento) l accoppiamento M in cui nessun nodo è esposto ( M = n)

Accoppiamento : M = { (, ), (, 6), (4, 7) } O M = { } D M = { 8 } 6 7 4 8 Assegnamento (accoppiamento perfetto) M = {(, 8), (, ), (, 6), (4, 7) } 6 O M = D M = 7 4 8

In presenza di costi di attraversamento degli agli archi, si definisce Costo C(M) dell accoppiamento M : somma dei costi degli archi di M Se M =, si pone per definizione C(M) = 0 In un accoppiamento M ( ) : arco bottleneck di M : arco (i, j) M di costo massimo valore bottleneck di M : valore V(M) = max { c ij : (i, j) M }

Considereremo i seguenti problemi: accoppiamento di massima cardinalità : determinare un accoppiamento di massima cardinalità in G assegnamento di costo minimo : determinare un accoppiamento perfetto di costo minimo in G con O = D accoppiamento di massima cardinalità bottleneck : determinare un accoppiamento di massima cardinalità in G che abbia valore bottleneck minimo (ossia che minimizzi il valore bottleneck di M)

Accoppiamento di massima cardinalità Equivalente al problema di flusso massimo con più sorgenti e più pozzi r r sul grafo orientato G = N, A ottenuto da G ( ) assegnando l orientamento da i a j all arco non orientato (i, j) A (i O e j D) ( ) grafo G = (N, A) grafo G = N, A r r 6 6 7 7 4 8 4 8

Dati del problema di flusso massimo con più sorgenti e pozzi su G r sorgenti: nodi dell insieme O ( b = i, i O ) pozzi: nodi dell insieme D ( b j =, j D ) ogni arco (i, j) ha capacità superiore u ij = 6 7 4 8

Equivalente al problema di flusso massimo da s a t r r sul grafo orientato ampliato G' = N', A' dove ( ) r r N' = N U, { s, t } e A' = A U { ( s, i) i O, ( j t) j D } r r r ossia è ottenuto dal grafo orientato ( r G' = N', A' G = N, A) aggiungendo ( ) una super sorgente s, collegata a tutti i nodi i di O da archi di capacità unitaria u si = un super pozzo t collegato a tutti i nodi di D da archi di capacità unitaria u jt =

r grafo G' = r ( N', A' ) s 6 7 t 4 8 u ij = (i, j) A u si = i O u jt = j D

Il problema dell accoppiamento di massima cardinalità in G può essere risolto calcolando il MF (con più sorgenti e pozzi) in perché G r l insieme degli archi saturi in un flusso ammissibile (intero) x in G r forma un accoppiamento M in G di cardinalità pari al valore v del flusso da un accoppiamento M si costruisce un flusso ammissibile

grafo G r ' con flusso ammissibile di valore v = grafo G con accoppiamento M, M = 6 6 s 7 t 7 4 8 4 8

Corrispondenza biunivoca tra cammini aumentanti sug r e cammini alternanti aumentanti su G Un cammino alternante aumentante su G è un cammino che parte da un origine esposta termina in una destinazione esposta Poiché in G non esistono archi che collegano coppie di nodi origine o coppie di nodi destinazione, i nodi di un cammino su G appartengono alternativamente a O e a D : per andare da un nodo in O ad un nodo in D si percorre un arco vuoto in G r (non appartenente ad M in G) per andare da un nodo in D ad un nodo in O si percorre un arco saturo ing r (appartenente ad M in G)

Quindi un cammino aumentante su G r rispetto al flusso x corrisponde ad un cammino formato da archi esterni ed archi interni rispetto all accoppiamento M, detto cammino alternante aumentante su G rispetto ad M. Un cammino alternante P su G è aumentante se, detti P E = P \ M l insieme degli archi esterni di P P I = M P l insieme degli archi interni di P si ha P E P I =, ossia gli archi esterni sono esattamente uno in più di quelli interni.

grafo G con accoppiamento M Grafo G r con flusso x 6 6 7 7 4 8 4 8 origine esposta : nodo destinazione esposta : nodo 7 archi sottili : vuoti (x ij = 0) archi in grassetto : saturi (x ij = )

Grafo G r con flusso x G r ( x) Grafo residuo associato al flusso x 6 6 7 7 4 8 4 8 archi sottili : vuoti (x ij = 0) archi in grassetto : saturi (x ij = )

cammino aumentante sul grafo residuo G r x associato al flusso x ( ) cammino alternante aumentante su G rispetto all accoppiamento M 6 6 7 7 4 8 4 8

La capacità di un cammino (alternante) aumentante è sempre (non deve essere calcolata) Detti P un cammino aumentante su G r e P il corrispondente cammino alternante aumentante su G l operazione di composizione x = x P corrisponde a M := M P = (M \ P I ) P E ossia a togliere da M gli archi interni di P ed aggiungere quelli esterni di P Siccome P E = P I +, si ha che M P = M + (e ciò corrisponde al fatto che il nuovo flusso x ha valore v = v + )

Applicando l operazione di composizione M P all accoppiamento M = {(, 6), (, ), (4, 8)} e al cammino alternante aumentante P = {(, 6), (6, ), (, ), (, ), (, 8), (8, 4), (4, 7) } si ottiene il nuovo accoppiamento M = {(, ), (, 8), (, 6), (4, 7)} che corrisponde al flusso che si ottiene dal flusso x associato ad M inviando un unità di flusso lungo il cammino aumentante P corrispondente a P Sulla base di queste osservazioni si costruisce una versione specializzata dell algoritmo Cammini-Aumentanti per risolvere il problema dell accoppiamento di massima cardinalità

Algoritmo Accoppiamento-MaxCard Procedure Accoppiamento-MaxCard(O, D, A, M) : begin M := ; while Cammino-Aumentante(O, D, A, M, P) do Cambia-Accoppiamento(M, P) end.

Inizializzazione : M := (corrisponde al flusso iniziale x = 0) Procedura Cammino-Aumentante : determina, se esiste, un cammino alternante aumentante su G rispetto all accoppiamento M si effettua una visita del grafo bipartito G che parte dai nodi di O M e visita alternativamente archi esterni e interni : alla fine della visita non si è raggiunto alcun nodo in D M : non esistono cammini aumentanti e l accoppiamento M è di massima cardinalità: (ciò accade sicuramente quando O M =, ossia un accoppiamento di massima cardinalità è già stato prodotto)

Se invece viene determinato un cammino alternante aumentante P, viene invocata la procedura Cambia-Accoppiamento che realizza l operazione di composizione M P; tale operazione è analoga alla Aumenta-Flusso dell algoritmo Cammini-Aumentanti, anche se più semplice.

Complessità di Accoppiamento-MaxCard È O(mn), qualunque sia il modo in cui è implementata la visita : infatti complessità della generica procedura Cammini-Aumentanti : O(mnU) in questo caso U = In effetti, è immediato verificare che la procedura termina dopo al più n iterazioni, ognuna delle quali richiede una visita del grafo e quindi costa O(m).

Assegnamento a costo minimo Equivalente al problema di flusso di costo minimo sul grafo orientato G r con i seguenti dati : ogni nodo in O immette un unità di flusso ogni nodo in D preleva un unità di flusso le capacità degli archi sono unitarie i costi degli archi sono quelli del problema di assegnamento

Trasformazione in un problema di MCF 4 6 6,, 4, 6,,, 6 7 7 7 4 4 8, 7, 4, 4 8

È possibile specializzare gli algoritmi per il problema MCF al caso particolare del problema dell assegnamento di costo minimo. Il cammino di costo minimo, aumentante rispetto allo pseudoflusso x, da un nodo con eccesso di flusso ad un nodo con difetto di flusso determinato dall algoritmo dei cammini minimi successivi corrisponde, nel problema dell assegnamento di costo minimo, a determinare il cammino alternante aumentante di costo minimo rispetto all accoppiamento corrente M

Per fare questo si utilizza il grafo ausiliario G M = (N, A M ) con A M = { (j, i) : (i, j) M } { (i, j) : (i, j) A\M } dove agli archi di G M sono associati i costi c ij c = c G M è il grafo residuo ij ij se se ( i, j) A ( j, i) M G r ( x) per lo pseudoflusso x corrispondente all accoppiamento M \ M

Un cammino orientato P st da un nodo s O M ad un nodo t D M corrisponde ad un cammino alternante aumentante P e viceversa; per costruzione, il costo C (P st ) di P st in G M è uguale al costo C(P) di P C ( P) = ( i, j ) P ( i, j ) c ij c E P I ij Inviare un unità di flusso lungo un cammino aumentante corrisponde ad applicare l operazione di composizione M = M P : è facile verificare che risulta C(M ) = C(M) + C(P).

Procedure Assegnamento-MinCost(O, D, A, c, M) : begin M = ; while Cammino-AA-Minimo(G M, P) do Cambia-Accoppiamento(M, P, O M, D M, G M ) end.

Inizializzazione : M = (accoppiamento iniziale vuoto) corrisponde al flusso iniziale x = 0 che è sicuramente minimale perché il grafo residuo, essendo bipartito, non contiene cicli orientati nemmeno in presenza di costi negativi. Procedura Cammino-AA-Minimo : cerca di determinare un cammino alternante aumentante di costo minimo tra un nodo s O M ed un nodo t D M : costruisce un albero di cammini minimi con insieme di nodi radice O M per G M, col relativo vettore di etichette d e seleziona un nodo t D M (ad esempio, quello con etichetta d t minore)

Cammino-AA-Minimo restituisce vero se ha determinato il cammino desiderato falso se O M = (non esistono nodi esposti in O) se t O M d t = (t non è connesso ad alcun nodo di O M )

Procedura Cambia-Accoppiamento : esegue l operazione di composizione tra l accoppiamento M corrente ed il cammino P aggiorna gli insiemi dei nodi esposti, O M e D M, ed il grafo ausiliario G M associato al nuovo accoppiamento. Quando l algoritmo termina, se M = O = D allora si è determinato un assegnamento di costo minimo, altrimenti non esistono accoppiamenti perfetti in G.

accoppiamento M corrente corrispondente grafo ausiliario G M 4 4 6 6 6 6 7 7 7 7 4 4 8 4 4 8

L albero dei cammini minimi con insieme di radici R = O M = {, 4 }, con le relative etichette ottime ai nodi, è 7 4 6 6 0 0 7 7 4 4 8 7 4 cammini minimi : { (4, 8), (8, ), (, ) } { (4, 6) } { (4, 8), (8, ), (, ), (, ), (, 7) } { (4, 8) } Essendo D M = {6, 7}, si pone t = 6 poiché d(6) = < 7 = d(7), selezionando così il cammino alternante aumentante P = { (4, 6) }

Nuovo accoppiamento M = M P = {(, ), (, 8), (4, 6)}, di cardinalità e costo C(M ) = C(M) + C(P) = + = 8 4 6 6 7 7 4 4 8

grafo ausiliario G M corrispondente all accoppiamento M 4 6 6 7 7 4 4 8

Albero dei cammini minimi 8 0 4 6 6 6 cammini minimi : { (, 8), (8, ), (, ) } { (, 8), (8, ), (, ), (, ), (, 6) } 0 6 7 7 4 4 8 0 7 { (, 8), (8, ), (, ), (, ), (, 7) } { (, 8) } Essendo D M = { 7 }, il cammino alternante aumentante di costo minimo è P = {(, 8), (, 8), (, ), (, ), (, 7)}, con C(P ) = d(7) = 0

M = M P = = {(, ), (, 8), (4, 6)} \ {(, 8), (, )} {(, 8), (, ), (, 7)} = {(, 7), (, ), (, 8), (4, 6)} di costo C(M ) = C(M ) + c(p ) = 8 +0 = 8 4 6 6 7 7 4 4 8 Assegnamento ottimo

Correttezza di Assegnamento-MinCost : deriva direttamente dalla correttezza della procedura Cammini-Minimi-Successivi per il problema del flusso di costo minimo Complessità di Assegnamento-MinCost : O(mn ), dove n è il massimo numero di iterazioni, se Cammino-AA-Minimo è implementata utilizzando l algoritmo SPT.L in cui Q è implementato come fila