130 likes | 451 Views
Flusso di Costo Minimo Applicazione di algoritmi: cancellazione cicli negativi (CCN).
E N D
Flusso di Costo MinimoApplicazione di algoritmi: cancellazione cicli negativi (CCN) Premessa: si assume di aver risolto (correttamente!) un precedente esercizio sul Flusso Massimo (con un qualunque algoritmo). Ci riferiamo a questo esercizio come “Esercizio 1”. Il testo dell’esercizio 1 deve ovviamente specificare una rete con le capacità superiori sugli archi. Esercizio 1 Si consideri la seguente rete di flusso, in cui le capacità superiori sono tutte pari a due, ad esclusione di quelle degli archi (s,2) e (3,t), che sono pari a 3, come indicato in figura. Si determini un flusso di valore massimo da s a t… 1 4 s t 3 3 2 3
2 1 4 2 2 0 Soluzione: il flusso di valore massimo, pari a v=5, è descritto nella seguente figura. s t 2 0 2 3 3 2 3 1 In realtà, a noi interessa soprattutto il grafo residuo relativo al flusso suddetto, cioè il grafo residuo ottenuto all’ultima iterazione dell’algoritmo per il Flusso Massimo, che è descritto nella seguente figura (sono mostrate le capacità residue). 2 1 4 2 2 2 2 s t 2 1 3 1 3 2 3 1
Esercizio 2 (algoritmo CCN) Definiamo un problema di Flusso di Costo Minimo (MCF) a partire dal problema di Flusso Massimo dell’esercizio 1, definendo costi sugli archi come indicato in figura. Il nodo s ha una richiesta di flusso pari a -v, il valore del flusso massimo dell’esercizio 1; il nodo t ha una richiesta di flusso pari a v. Gli altri nodi sono di transito. 1 1 4 0 0 4 s t 2 1 0 0 0 2 3 1 • Mostrare che la soluzione ottima x’ del problema MCF si ottiene, a partire dal flusso ottimo x dell’esercizio precedente, cancellando un solo ciclo di costo negativo. Si chiede di: • calcolare il costo della soluzione x; • identificare il ciclo negativo, il suo costo e la sua capacità; • fornire il flusso ottimo x’e il suo costo; • fornire un certificato di ottimalità per il flusso x’. • Non si richiede di applicare specifici algoritmi per la ricerca del ciclo, che può essere facilmente identificato per ispezione.
Possiamo, per cominciare, identificare la rete su cui è definito il problema MCF: a ciascun arco si associa la coppia [costo,capacità superiore]; ai nodi s e t associamo le domande -5 e +5. • Svolgimento [1, 2] 1 4 [0, 2] [0, 2] [4, 2] -5 s t [1, 2] 5 [2, 2] [0, 2] [0, 3] 2 3 [0, 3] [1, 2] NOTA: si tratta della “rete trasformata” su cui abbiamo applicato l’algoritmo SSP! Nota: identificare il problema MCF è un passo utile, anche se non indispensabile per lo svolgimento dell’esercizio, visto che in pratica lavoreremo soltanto sul grafo residuo.
1 Punto 1 costo della soluzione x. Confrontando i flussi sugli archi relativi a x (dalla slide 2) e i costi assegnati agli archi nel problema MCF, vediamo che gli unici archi che hanno sia il flusso che il costo diversi da zero sono (1,4), (2,1) e (2,3) 1 4 0 0 4 costi s t 2 1 0 0 0 2 3 1 2 1 4 2 2 0 s t flussi 2 0 2 3 3 2 3 1 Dunque il costo di x è (1 2) + (2 2) + (1 1) = 7
Punto 2 identificazione del ciclo Dobbiamo per prima cosa identificare il grafo residuo relativo al flusso ottimo x dell’esercizio sul flusso massimo. Per fare questo, riprendiamo il grafo residuo ottenuto alla fine dell’esercizio sul flusso massimo (slide 2) e lo completiamo associando a ciascuno arco il costo corrispondente, oltre alla capacità residua che già abbiamo. Ovviamente, i costi sugli archi del grafo residuo sono ottenuti dai costi assegnati dall’esercizio. Grafo residuo con costi e capacità residue: [costo,capacità] [-1,2] 1 4 [0,2] [0,2] [0,2] [4,2] s t [1,1] [-2,2] [0,3] [-1,1] [0,3] 2 3 [1,1]
Sul grafo residuo identifichiamo il ciclo negativo (1,2,3,1). Il costo è -2+1+0=-1. La capacità è 1, determinata dall’arco (2,3). [-1,2] 1 4 [0,2] [0,2] [0,2] [4,2] s t [-2,2] [1,1] [0,3] [-1,1] [0,3] 2 3 [1,1]
[-1,2] 1 4 [0,2] Punto 3 calcolo della soluzione ottima x’ Dobbiamo spedire un flusso 1 (pari alla capacità) lungo il ciclo negativo (1,2,3,1) [0,2] [0,2] [4,2] s t [-2,2] [1,1] [0,3] [-1,1] [0,3] 2 3 [1,1] Dopo la spedizione del flusso sul ciclo, il nuovo grafo residuo è il seguente [-1,2] 1 4 [0,2] [0,1] [0,2] [4,2] [2,1] [0,1] s t [1,1] [-2,1] [0,3] [0,3] 2 3 [-1,2]
2 1 4 2 Dal nuovo grafo residuo otteniamo (come visto per il problema di Flusso Massimo) il flusso (ottimo) x’: 2 0 flussi s t 1 0 1 3 3 2 3 2 Il costo di x’ si ottiene come: costo di x + (costo del ciclo capacità del ciclo) = 7 + (-1 1) = 6 Nota: per verifica, si può calcolare il costo moltiplicando i nuovi flussi sugli archi per i costi. Nota: il flusso ottimo x’ è quello individuato, sulla rete trasformata, nell’esercizio di applicazione dell’algoritmo SSP.
Metodo “informale”: possiamo risolvere il problema sfruttando questa proprietà: Punto 4 Ricerca di un certificato di ottimalità Se un arco (i,j) non è né vuoto né saturo, nel grafo residuo compaiono i due archi (i,j) e (j,i), con costi c[i,j] e –c[i,j], rispettivamente; dunque, affinchè entrambi gli archi abbiano costo ridotto non-negativo, occorre che questo costo ridotto sia per entrambi zero; questo permette, dato il potenziale di uno dei due nodi, di fissare univocamente l’altro. Dunque, fissato arbitrariamente il potenziale di un nodo, possiamo derivare i potenziali di altri nodi. Per i nodi il cui potenziale non viene fissato in questo modo dobbiamo scegliere il potenziale in modo da rendere non-negativi i costi ridotti degli archi adiacenti. Più in generale, per i nodi il cui potenziale non viene fissato, possiamo determinare gli intervalli a cui tale potenziale deve appartenere.
[3,4] 2 -1 1 4 0 0 4 s t 2 1 -2 -1 2 3 0 2 • Trascuriamo per il momento i nodi s e t. • Diamo (arbitrariamente) al nodo 2 potenziale 0. • Diamo al nodo 1 potenziale 2 per avere costi ridotti nulli sugli archi (1,2) e (2,1), corrispondenti ad un arco non vuoto e non saturo. • Diamo al nodo 3 potenziale 2 per avere costi ridotti nulli sugli archi (1,3) e (3,1), corrispondenti ad un arco non vuoto e non saturo. • Il potenziale del nodo 4 non è fissato, ma deve essere: • Almeno pari a 1, per rendere non-negativo il costo ridotto dell’arco (4,3); • Almeno pari a 3, per rendere non-negativo il costo ridotto dell’arco (4,1); • Non maggiore di 4, per non rendere negativo il costo ridotto dell’arco (2,4). • Dunque il potenziale del nodo 4 deve appartenere all’intervallo [3,4].
[3,4] 2 -1 1 4 0 0 0 0 4 ≥p4 ≤0 s t 2 1 -2 0 -1 0 2 3 0 2 • Consideriamo ora i nodi s e t: • Il potenziale del nodo t deve essere almeno pari a quello del nodo 4, per rendere non negativo il costo ridotto sull’arco (t,4); di conseguenza, il costo ridotto dell’arco (t,3) risulterà positivo; • Il potenziale del nodo s deve essere minore o uguale a zero, per rendere non negativo il costo ridotto sull’arco (2,s); di conseguenza, il costo ridotto dell’arco (1,s) risulterà positivo. Tra i vettori di potenziali che rispettano i limiti visti possiamo scegliere, ad esempio: π = [0,2,0,2,3,3] [s,1,2,3,4,t] Questo vettore costituisce il certificato di ottimalità per x’ richiesto. Nota: è lo stesso vettore di potenziali trovato applicando l’algoritmo SSP.
Metodo formale: si risolve un problema di cammino minimo con radici multiple, in cui tutti i nodi sono radici. Questo è equivalente a risolvere il problema SPT di radice r sul grafo riportato qui sotto, dove gli archi uscenti da r hanno costo zero. r 0 -1 -1 1 4 0 0 0 0 4 -3 0 s t 2 1 -2 0 0 -1 3 2 -3 -1 In questo caso, la soluzione trovata è unica, e corrisponde al vettore delle distanze minime da r, riportate in blu nella figura. Il corrispondente albero dei cammini minimi è quello evidenziato (notare che i nodi 4 e t sono “figli” della radice).