Sunteți pe pagina 1din 9

Problema determinrii unui flux maxim

Avnd dat o reea de transport s se determine un flux astfel nct fluxul la ieirea reelei s fie maxim. Algoritmi pentru rezolvarea problemelor de flux ntr-o reea de transport au fost dezvoltai de: Ford, Fulkerson (1956), Edmonds, Karp (1969), Dinic (1970), Karzanov (1973), Cherkassky (1976), Malhotra i alii (1978), Galil (1978), Galil i Naamad (1979), Sleator i Tarjan (1980), Goldberg i Tarjan (1985). Se da o retea de transport sub forma unui graf orientat cu N noduri si M arce. Fiecare arc are asociata o capacitate si un cost pentru fiecare unitate de flux ce trece pe arcul respectiv. Notam cu S si D sursa si respectiv destinatia din reteaua de transport considerata. Sa se determine costul minim pentru a se transmite o cantitate maxima de flux de la sursa la destinatie. Indicatii de rezolvare Aceasta problema se rezolva in mod asemanator cu problema determinarii fluxului maxim cu cateva modificari. Este din nou necesara constuirea grafului rezidual, care contine toate arcele din graful initial si, in plus, toate arcele de intoarcere. Astfel, pentru fiecare arc x->y de cost z din graful initial se adauga in graful rezidual arcul y->x cu capacitatea 0 si costul -z. Algoritmul ruleaza atat timp cat se mai poate introduce flux in retea. La fiecare pas, este

necesara gasirea unui drum de ameliorare de cost minim de la sursa la destinatie. Apoi, fluxul va fi incrementat pe acest drum cu valoarea maxima posibila (minimul diferentelor dintre capacitate si flux pentru fiecare arc de pe drum). Pentru a gasi drumul de ameliorare optim din punct de vedere al costului putem folosi un algoritm de drum minim care sa permita existenta costurilor negative pe arce (costurile arcelor de intoarcere), precum Bellman-Ford .Algoritmul Bellman-Ford are complexitate O(N*M), ceea ce conduce la o complexitate teoretica O(N2*M2), insa in practica se comporta mai bine. Algoritmul Bellman-Ford poate fi rafinat folosind o coada pentru a mentine nodurile ce mai pot contribui la imbunatatirea costurilor. Desi complexitatea ramane aceeasi, in practica timpul de rulare scade simtitor. Pentru a imbunatati algoritmul de mai sus, atunci cand cautam drumul de ameliorare de cost minim putem folosi si algoritmul lui Dijkstra, dar inainte graful trebuie modificat astfel incat sa nu mai exista arce cu cost negativ.Algoritmul lui Dijkstra are complexitate O(M*logN), deci complexitatea totala devine O(N*M2*logN), dar este iarasi supraestimata. Aplicatii Algoritmul de flux maxim si cost minim poate fi aplicat si pentru grafuri neorientate cu modificari minime. In plus, poate fi aplicat si pentru determinarea cuplajului de cost minim intr-un graf bipartit. De asemenea, putem determina si cuplajul de cost maxim intr-un graf biparit, folosind acelasi algoritm dupa ce costul fiecarei muchii a fost inlocuit cu diferenta dintre valoarea maxima a unei muchii si valoarea curenta. In acest caz, rezultatul va fi egal cu diferenta dintre produsul fluxului si valoarea maxima a unei muchii si costul fluxului obtinut pe graful modificat.

Algoritmul Ford-Fulkerson

Algoritmul Ford-Fulkerson const in identificarea succesiv a unor drumuri de cretere pn n momentul n care nu mai exist nici un astfel de drum. Dup identificarea unui drum de cretere se determin valoarea acestuia, iar aceasta se scade din costurile fiecrui arc (i, j) de pe drumul respectiv i se adun la costurile arcelor corespunztoare de forma (j,i). De asemenea, valoarea respectiv se adun la fluxul maxim determinat pn n momentul respectiv. Datorit faptului c un drum de cretere conine arce care au costuri pozitive, valoarea sa va fi ntotdeauna un numr pozitiv. Ca urmare, pentru fiecare drum de cretere determinat, valoarea fluxului va crete cu cel puin o unitate. Datorit faptului c avem capaciti finite, fluxul maxim este un numr finit. Din aceste motive suntem siguri c, mai devreme sau mai trziu, algoritmul se va ncheia. Exist dou pri complementare ale algoritmului de maximizare a fluxului ntre dou noduri ale unei reele:

n pasul 1, se caut un lan de flux augmentativ ntre cele dou noduri s i t; odat gsit, se desfoar pasul 2;

n pasul 2, se calculeaz care este surplusul de flux adus de lanul gsit i apoi se fac modificrile adecvate n ncrcarea arcelor, pentru a asigura flux maxim; se reia pasul 1 al algoritmului pentru a gsi un alt lan, i se modific i acestuia fluxul, i aa mai departe.

Acesta este un proces iterativ, care caut n mod repetat lanuri i le modific fluxul, pn cnd nici un lan nu mai este gsit. Cnd se ntmpl acest lucru, fluxul de la surs la destinaie are cea mai mare valoare posibil; distribuia fluxurilor n arcele reelei este una dintre (poate mai multe) posibilele alocri de flux care conduc la maximizarea fluxului total. Intrnd mai n amnunt, cnd se face cutarea de lanuri augmentative, nodurile lanului se eticheteaz cu o etichet dubl, astfel: prima valoare indic nodul anterior (pentru arcele directe) sau posterior (pentru arcele inverse) de unde se preia fluxul, iar a doua valoare indic valoarea surplusului de flux ce poate fi trimis de la surs la nodul curent. Ar putea fi posibil, odat ce un lan a fost gsit, s examinm fiecare din arcele componente, n ordinea n care surplusul de flux este calculat. Dar este mult mai convenabil s folosim etichete pentru aceasta, iar dup ce etichetele au fost stabilite, calculele se realizeaz cu ajutorul tehnicii recursive. S presupunem c nodul j a fost etichetat, iar nodul imediat predecesor n lan este nodul i, care are deja eticheta (ai, bi). Se disting dou cazuri ce trebuie examinate:

dac este un arc direct (i,j), atunci capacitatea potenial a surplusului de flux este u(i,j)-x(i,j); capacitatea lanului de la s la j va fi valoarea minim dintre:

capacitatea lanului de la s la i; capacitatea potenial a arcului (i,j). Deci, eticheta nodului j se definete ca (i, min(bi, u(i,j)-x(i,j))).

dac este un arc invers (j,i), atunci capacitatea potenial a surplusului de flux este x(j,i); capacitatea lanului de la s la i va fi valoarea minim dintre:

capacitatea lanului de la s la i; capacitatea potenial a arcului (j,i). Deci, eticheta nodului j se definete ca (i, min(bi, x(j,i))). ( Uneori este mai convenabil de recunoscut un arc invers prin marcarea etichetei ai = -i )

Pentru a porni procedura de etichetare, iniial toate nodurile sunt neetichetate, iar sursei s, din moment ce predecesorul su e inexistent, i se d eticheta (-, ), deci fluxul de la el ctre el nsui poate fi orict de mare. Apoi nodurile sunt etichetate gsind arce care au un capt etichetat i cellalt nu i care pot fi folosite ca lanuri augmentative. Dac lanul este unul augmentativ, n cele din urm va fi etichetat prin acest algoritm i nodul t. Apoi fluxul prin acel lan va fi crescut (pentru arcele directe) sau sczut (pentru arcele inverse) cu valoarea bt, valoare calculat prin modalitatea de mai sus. Algoritmul se repet pn cnd singurul nod neetichetat rmas este nodul destinaie, t.

Algoritmul Ford-Fulkerson const n parcurgerea urmtoarelor etape:


1.

Se iniializeaz fluxul cu valoarea 0 pentru toate arcele reelei:

( u ) = 0, u U
2. 3.

Pentru reeaua de transport se construiete reeaua rezidual. Se caut un drum (de-a lungul cruia poate fi mrit fluxul) n reeaua rezidual de la intrarea la ieirea reelei. a. Dac nu exist nici un astfel de drum algoritmul se oprete, fluxul gsit este flux maxim. = min ( c ( u ) ) b. Altfel se calculeaz i se modific fluxul astfel:

( u ) = ( u ) + , u l + ( u ) = ( u ) , u l

4.

Algoritmul se repet pasul ncepnd cu pasul 2.

Algoritmul poate fi prezentat sub forma unei scheme logice de forma:

Studiu de caz
O reea de transport G=(V,E) este un graf orientat n care fiecrui arc (u,v) E i este asociat o capacitate pozitiv c(u,v) 0. Dac (u,v) E vom considera c c(u,v)=0. Vom distinge dou vrfuri n reea: un vrf surs s i un vrf destinaie t. Fie G=(V,E) o reea de transport cu o funcie f:V*V cu valori reale care satisface urmtoarele trei condiii: Restricie de capacitate: Pentru orice u,v V avem f(u,v) c(u,v). Antisimetrie: Pentru orice u,v V avem f(u,v) = -f(v,u). f (u , v ) = 0 Conservarea fluxului: Pentru orice u V-{s,t} avem .
vV

S ne imaginm o situaie n care un material este transportat ntr-un sistem de la surs, unde este produs, la destinaie, unde este consumat. La surs se produce materialul ntr-un ritm constant, iar la destianie se consum n acelai ritm. Intuitiv, fluxul materialului, n orice punct al sistemului, este ritmul n care materialul se deplaseaz. Reelele de transport pot modela scurgerea lichidului n sisteme cu evi, deplasarea pieselor pe benzi rulante, scurgerea curentului prin reele electrice, deplasarea informaiilor prin reelele de comunicaii, i multe altele. Fiecare arc n reeaua de transport poate fi considerat drept conduct pentru material. Fiecare conduct are o capacitate dat, care este de fapt ritmul maxim cu care lichidul se poate deplasa n conduct. De exemplu, printr-o eav pot curge cel mult 2000 litri pe or, sau pe un fir conductor cu curent electric de maxim 20 amperi. Vrfurile (nodurile) sunt jonciunile conductelor i n afara vrfului surs i destinaie, materialul nu se poate acumula n nici un vrf. Altfel spus, cantitatea de material care intr trebuie sa fie egal cu cea care iese. Aceast proprietate se numete conservarea fluxului i este identic cu legea lui Kirchoff n cazul curentului electric.
4 1 2 2 s 3 9 4 Fig. 1: O reea de transport 10 3 8 5 t 2 6

Exemplul clasic de reea de transport este reprezentat de o serie de conducte dispuse ntr-un robinet s i un canal de scurgere t. Fiecare conducta (i,j) este caracterizata prin cantitatea maxim de ap c(i,j), care poate s treac la un moment dat prin conduct. Problema aflrii fluxului maxim presupune determinarea cantitaii maxime de ap care poate fi pompat prin robinetul s astfel nct pe nici o conduct s nu se depeasc

capacitatea maxim permis. n figura 1 este preyentat o reea de transport cu 7 noduri, dintre care o surs s i o destinaie t. Fiecrui arc i este ataat o valoare pozitiv, reprezentnd capacitatea maxim admis pe arcul respectiv. Pentru a rezolva problema fluxului maxim folosim algoritmul lui Ford Fulkerson optimizat. Algoritmul const n 4 pai: P1. Iniializm fluxul reelei de transport F 0. P2. Pargurgem graful n lime (BF) pentru a gsi un drum n cretere de la s la t cu numr minim de muchii. De exemplu pentru fig. 1 avem: Drumul gasit fiind: s 1 2 t P3. n cazul cnd acesta a fost gsit se actualizeaz valorile fluxului pe drumul gsit i se trece la P2. Altfel, se trece la P4.
4 1 2 2 s 3 9 4 Fig. 2 10 3 8 5 t 2 6

Valoare fluxului pe drumul gsit reprezint minimul dintre arcele care l alctuiesc. c(s,1)=2; c(1,2)=4; c(2,t)=6, deci fluxul este 2. n acest caz arcul (s,1) devine 0, deci nu va mai putea fi folosit n urmtoare parcurgere. Dup acest pas graful va arta astfel:

2/4 1 2/2 0/2 s 0/3 0/9 4 Fig. 3 0/10 3 0/8 5 t 2 2/6

0/5

Prima valoare reprezentnd valoare fluxului curent pe acel arc, acesa va fi ntotdeauna mai mic sau egal cu capacitatea maxim, f(u,v) c(u,v). P4. Se afieaz fluxul maxim.

Pentru exemplul dat urmtorii pai sunt: * determinm un drum n cretere:


2/4 1 2/2 0/2 s 0/3 0/9 4 Fig. 4 0/10 3 0/8 5 t 2 2/6

0/5

* obinem fluxul maxim 5

2/4 1 2/2 0/2 s 0/3 5/9 4 Fig. 5 5/10 3 5/8 5 t 2 2/6

5/5

* determinm din nou un drum de la s la t


2/4 1 2/2 0/2 s 0/3 5/9 4 Fig. 6 5/10 3 5/8 5 t 2 2/6

5/5

* de aceast dat fluxul maxim este 3


2/4 1 2/2 0/2 s 3/3 8/9 4 Fig. 5 8/10 3 8/8 5 t 2 5/6

5/5

* vom parcurge i acum graful n lime (BF: s,4,3), dar de aceast dat nu gsim un drum de la s la t i deci n acest caz trecem la pasul P4 * Fluxul maxim se poate obine prin nsumarea fluxurilor obinute pe parcurs (2+5+3=10)

S-ar putea să vă placă și