Maximum flow problem

Importanţă – aplicaţii practice

Algoritmii pentru determinarea unui flux maxim în rețele de trasnsport au multiple aplicații practice. Câteva exemple de aplicații sunt:

  • Modelarea unei rețele de transport (canalizare, curent, petrol etc).
  • Planificarea zborurilor pentru avioane.
  • Segmentarea imaginilor.
  • Calcul clasamente (de exemplu, la baseball).

Maximum flow problem

Puteți consulta capitolul Maximum Flow [0] pentru mai multe definiții formale. Această secțiune sumarizează principalele notații folosite în laboratoarele de PA.

Cele mai uzuale notații din laboratoarele de grafuri sunt descrise în Precizări laboratoare 07-12 (ex. $n$, $m$, $adj$, $adj\_trans$, $(x, y)$, etc).

Vom adăuga alte notații în continuarea celor introduse anterior.

Rețea de transport / flow network: Este un graf orientat $G = (V, E)$ care respectă următoarele 3 proprietăți: 1) există două noduri speciale S (numit sursă / source) și T (numit terminal / destinație / sink); 2) există o funcție de capacitate $c: V x V -> R_{+}$ astfel încât $c(u, v) >= 0$ dacă arcul $(u, v)$ există, altfel $c(u, v) = 0$; 3) pentru orice nod $v \in V \setminus \{S, T\}$ există cel puțin o cale $S -> ... -> v -> ... T$.

Într-o rețea avem 2 noduri speciale. Vom vedea că S joacă rol de producător, iar T de consumator.

În plus, pentru simplitate, vom dori ca în graf să nu avem self-loops.

Tot pentru simplitate, în continuare vom discuta despre rețele în care capacitățile sunt numere naturale.

Exemplu

Exemplu

 Exemplu

În exemplul atașat, avem o rețea de transport cu următoare configurație:

  • n = 7, m = 11
  • Sursa este S = 1, iar terminalul este T = 7.
  • Funcția de capacitate c are următorele valori:
    • $c[1][2] = 3$
    • $c[1][3] = 2$
    • $c[1][4] = 5$
    • $c[2][5] = 2$
    • $c[2][6] = 1$
    • $c[3][6] = 5$
    • $c[4][6] = 1$
    • $c[4][7] = 10$
    • $c[5][6] = 1$
    • $c[5][7] = 1$
    • $c[6][7] = 3$


Flux / flow: O funcție $f: V x V -> R$ se numește funcție de flux într-o rețea de transport $G = (V, E)$ dacă respectă următoarele 3 proprietăți: 1) restricție de capacitate - $f(u, v) \leq c(u, v), \forall u,v \in V$; 2) antisimetrie - $f(u, v) = - f(v, u), \forall u,v \in V$; 3) conservare - $\sum f(u, v) = 0, \forall u \in V \ {S, T}, \forall v \in V$.

Exemplu

Exemplu

 Exemplu

În exemplul atașat, avem o rețea de transport cu următoare configurație:

  • n = 7, m = 11
  • Sursa este S = 1, iar terminalul este T = 7.
  • Funcțiile de capacitate c și flux f au valorile din figură. Exemple:
    • Arcul $(1, 2)$ are capacitatea $c(1, 2) = 3$ și fluxul curent pe acesta este $f(1, 2) = 1$. Pe desen notăm 1/3.
    • Arcul $(3, 6)$ are capacitatea $c(3, 6) = 5$ și fluxul curent pe acesta este $f(3, 6) = 2$. Pe desen notăm 2/5.
    • Arcul $(4, 7)$ are capacitatea $c(4, 7) = 10$ și fluxul curent pe acesta este $f(4, 7) = 3$. Pe desen notăm 3/10.


Operațiunea prin care vom aplica o anumită funcție de flux pe o rețea de transport se numește pompare: pompăm flux prin rețea / pe arcele acesteia, dinspre sursa S spre terminalul T.

Observăm că fluxul (valorile funcției) nu este unic!

Flux maxim / maximum flow: Este o funcție de flux $f_{max}$ pentru care cantitatea de flux pompată în rețea este maximă posibil.

Exemplu

Exemplu

Analizăm rețeaua dată în anterior exemplul.

 Exemplu

Spunem că fluxul total prin rețea este $f = 1 + 2 + 3 = 6$ (6 unități de flux circulă de la sursa S la terminalul T prin rețeaua G).

Observăm că pe drumurile $1 -> 4 -> 7$ / $1 -> 3 -> 6- > 7$ se mai poate pompa flux în plus. Deducem atunci că funcția de flux din figura anterioară nu reprezintă flux maxim!

Un exemplu de flux maxim găsim în figura următoare:  Exemplu

Fluxul total care circulă prin rețea de la sursă la terminal este $f = 1 + 3 + 5 = 9$. Acesta este și maxim! Cum ne dăm seama? Observăm ca suma tuturor capacităților arcelor care ies din S este $3 + 2 + 5 = 10$. Arcele $(1, 2)$ și $(1, 4)$ sun saturate (nu se mai poate pompa flux în plus). Dacă s-ar pompa flux în plus prin $(1, 3)$, apoi prin $(3, 6)$, deoarece arcul $(6, 7)$ este și el saturată, atunci nu putem ajunge la destinație, deci nici nu putem mări fluxul în rețea.


Capacitate reziduală / residual capacity: Diferența între capacitatea arcului și valoarea fluxului curent care este pompat prin acesta - $c_R(u, v) = c(u, v) - f(u, v)$.
Rețea reziduală / residual network: O rețea reziduală pentru $G = (V, E)$ după ce s-a pompat fluxul $f$, este rețeaua $G_R = (V, E_R)$, în care păstrăm doar muchiile pe care încă se mai poate crește cantitatea de flux - $E_R = \{(u, v) \in E | c_R(u)(v) > 0\}$.
Drum de ameliorare / augmenting path: Este un drum $S -> ... -> T$ în rețeaua reziduală $G_R$ (practic este un drum pe care încă se mai poate pompa flux în plus).
Capacitate reziduală a unui drum de ameliorare / residual capacity of augmenting path: Este capacitatea minimă reziduală a unui arc de pe drum p - $c_R(p) = min(\{c_R(u, v) | (u, v) \ \in \ p\})$.

Exemplu

Exemplu

 Exemplu

În exemplul atașat, avem o rețea de transport cu următoarea configurație:

  • n = 7, m = 11
  • Sursa este S = 1, iar terminalul este T = 7.
  • Funcțiile de capacitate c și flux f au valorile din figură.

Descriere rețea:

  • Inițial, fluxul are valorile 0 peste tot în rețea.
  • Enumerăm toate drumurile de ameliorare din rețeaua curentă:
    • $1 - 2 - 5 - 10$: capacitatea sa reziduală este valoarea minimă dintre $3 - 0, 2 - 0, 1 - 0$, adică 1 (pe acest drum se mai poate pompa în plus o unitate de flux).
    • $1 - 2 - 5 - 6 - 10$: capacitatea sa reziduală este valoarea minimă dintre $3 - 0, 2 - 0, 1 - 0, 3 - 0$, adică 1 (pe acest drum se mai poate pompa în plus o unitate de flux).
    • $1 - 2 - 6 - 10$: capacitatea sa reziduală este valoarea minimă dintre $3 - 0, 1 - 0, 3 - 0$, adică 1 (pe acest drum se mai poate pompa în plus o unitate de flux).
    • $1 - 3 - 6 - 10$: capacitatea sa reziduală este valoarea minimă dintre $2 - 0, 5 - 0, 3 - 0$, adică 2 (pe acest drum se mai poate pompa în plus încă 2 unități de flux).
    • $1 - 4 - 6 - 10$: capacitatea sa reziduală este valoarea minimă dintre $5 - 0, 1 - 0, 3 - 0$, adică 1 (pe acest drum se mai poate pompa în plus încă o unitate de flux).
    • $1 - 4 - 10$: capacitatea sa reziduală este valoarea minimă dintre $5 - 0, 10 - 0$, adică 5 (pe acest drum se mai poate pompa în plus încă 5 unități de flux).

Alegem drumul $1 - 4 - 7$ pe care pompăm 5 unități de flux. Muchia $(1, 4)$ devinde saturată (5/5 - capacitate reziduală 5 - 5 = 0, prin urmare o putem șterge din rețea). Obținem rețeaua reziduală din figura următoare:

 Exemplu

Următorul drum de ameliorare ales este $1 - 3 - 6 - 7$, pe care pompăm în plus 2 unități de flux. Obținem următoarea rețea reziduală:

 Exemplu

Următorul drum de ameliorare ales este $1 - 2 - 6 - 7$, pe care pompăm în plus 1 unitate de flux. Obținem următoarea rețea reziduală:

 Exemplu

Procedeul poate continua. Pe pagina laboratorului 12 se va studia un algoritm care arată concret cum să alegem drumurile de ameliorare pentru ca la final să fim siguri că fluxul pompat în rețea este maxim.


[Studiu de caz] k surse / p destinații

Maximum flow problem se poate existe considerând k surse și p destinații în aceeași rețea G. Scopul este ca să se transporte o cantitate maximă de flux total de la sursele $S_1, S_2, ... S_k$ la terminalele $T_1, T_2, ..., T_p$.

Soluția este asemănătoare ca în cazul shortest paths-problem multiple sources/destinations, adică se adaugă o sursă și o destinație fictive, care se vor lega de graful curent prin arce speciale .

Exemplu

Exemplu

 Exemplu

În exemplul atașat, avem o rețea de transport cu k surse și p terminale. Putem simplifica această problemă construind o rețea G’ astfel:

  • Se adaugă un nod fictiv S pe care îl unim de fiecare dintre cele k surse inițiale prin arce de capacitate infinită (ca în figură).
  • Se adaugă un nod fictiv T pe care îl unim de fiecare dintre cele p terminale inițiale prin arce de capacitate infinită (ca în figură).
  • În noua rețea G’ considerăm o unică sursă S și un unic terminal T.
  • Aplicăm un algoritm de determinare flux maxim în rețeaua G’. Fluxul de pe arce de la finalul algoritmului va reprezenta flux maxim și în rețeaua inițială G.


Maximum flow: variants

Există o variantă puțin modificată a problemei curente - dacă pe muchii avem pe lângă capacitate și un cost asociat?

În acest caz, ne interesează să găsim un flux maxim de cost minim (maximum flow minimum cost). Problema se rezolvă în mod similar - de exemplu, algoritmul Edmonds-Karp rămăne aproximativ același, dar în locul algoritmului BFS, folosește Dijkstra pentru a determina drumurile de ameliorare.

Referințe

[0] Chapters Maximum Flow, “Introduction to Algorithms”, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein.

pa/tmp/dn/maximum-flow-problem.txt · Last modified: 2022/05/23 10:20 by darius.neatu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0