Aller au contenu principal

Flot maximal

Un système dans lequel un matériau s'écoule, tel l'eau ou l'électricité, peut être modélisé à l'aide d'un graphe. Une question naturelle se pose : quelle est la capacité maximale de ce système ? Ce problème est connu sous le nom de flot maximal et admet plusieurs solutions algorithmiques efficaces. Nous en présenterons ici quelques-unes.

Définitions​

Un réseau est un 5-uplet G=(V,E,c,s,t)G=(V,E,c,s,t) noté (VG,EG,cG,sG,tG)(V_G,E_G,c_G,s_G,t_G) où

  • (V,E)(V,E) est un graphe simple orienté où EE est supposé être E=V×VE=V \times V
  • cc associe à chaque arc ee sa capacité, c'est-à-dire un réel positif ou nul noté c(e)c(e)
  • ss est un sommet appelé la source
  • tt est un sommet distinct de ss appelé le puits

Un flot de GG est une fonction qui associe à chaque arc (u,v)∈E(u,v) \in E un réel f(u,v)f(u,v) appelé le flot net de uu à vv, et tel que :

  1. contrainte de capacité : pour tout arc (u,v)∈E(u,v) \in E, on a f(u,v)≤c(u,v)f(u,v)\leq c(u,v)
  2. symétrie : pour tout arc (u,v)∈E(u,v) \in E, on a : f(u,v)=−f(v,u)f(u,v)=-f(v,u)
  3. conservation du flot : tout sommet u∈V−{s,t}u \in V - \{s,t\} vérifie : ∑v∈Vf(u,v)=0\sum \limits_{v \in V} f(u,v)=0

La valeur du flot ff, notée ∣f∣|f|, est la quantité ∑v∈Vf(s,v)\sum \limits_{v \in V} f(s,v).

Le problème du flot maximal consiste à calculer, pour tout réseau, un flot de valeur maximale. Dans la suite de ce chapitre, nous noterons flot net positif d'un sommet uu la somme des flots nets positifs sortant de uu, c'est-à-dire plus formellement ∑v∈V,f(u,v)>0f(u,v)\sum \limits_{v \in V, f(u,v)>0} f(u,v). Afin d'établir la correction des algorithmes résolvant le problème du flot maximal, nous établissons ci-dessous un lemme portant sur le flot entre deux ensembles de sommets XX et YY. Cette quantité définie pour tout couple d'ensembles de sommets XX et YY est notée f(X,Y)f(X,Y) et est égale à :

f(X,Y)=∑x∈X∑y∈Yf(x,y)f(X,Y)=\sum \limits_{x \in X}\sum \limits_{y \in Y}f(x,y)

Propriétés​

Réseau résiduel​

La propriété qui suit implique que tout flot de valeur non nulle est, s'il n'est pas maximal, un début de réponse. En effet, nous pouvons définir à partir de ce flot ff défini sur un réseau GG un nouveau réseau G′G' "plus simple" pour lequel tout flot maximal f′f' permettra de définir le flot maximal f′+ff'+f sur GG.

Définition​

La capacité résiduelle d'un réseau (V,E,c,s,t)(V,E,c,s,t) induit par un flot ff est la fonction notée cfc_f qui associe à tout arc (u,v)∈E(u,v) \in E le réel positif ou nul c(u,v)−f(u,v)c(u,v)-f(u,v). Le réseau résiduel d'un réseau (V,E,c,s,t)(V,E,c,s,t) induit par un flot ff est le réseau (V,E,cf,s,t)(V,E,c_f,s,t).

Chemin améliorant​

Définir un flot peut se réaliser simplement en choisissant dans le réseau un chemin de ss à tt et en prenant pour valeur la capacité minimale des arcs de ce chemin.

Définition​

Soit G=(V,E,c,s,t)G=(V,E,c,s,t) un réseau et pp un chemin élémentaire dans GG de ss à tt. La capacité de pp est le minimum des capacités des arcs que possède pp et est notée c(p)c(p). Le flot induit par pp est la fonction notée fpf_p qui associe à tout arc (u,v)∈V2(u,v) \in V^2 la quantité définie par :

  • c(p)c(p) si (u,v)(u,v) appartient à pp ;
  • −c(p)-c(p) si (v,u)(v,u) appartient à pp ;
  • 00 sinon.

Un chemin pp allant de ss à tt améliore un flot ff de GG si la capacité de pp dans le réseau résiduel de GG induit par ff est strictement positive.

Lemme​

La fonction fpf_p induite par un chemin élémentaire pp de la source au puits dans un réseau est un flot de valeur c(p)c(p).

Flot maximal et coupe minimale​

Nous allons établir le théorème minimax qui caractérise un entier maximal à vérifier une certaine propriété comme étant minimal à en vérifier une seconde. Ce genre de résultat est à remarquer car il augure souvent favorablement la possibilité de calculer efficacement un tel entier.

Définition​

Une coupe dans un réseau G=(V,E,c,s,t)G=(V,E,c,s,t) est un couple d'ensembles de sommets de la forme (X,Y)(X,Y) avec X⊆VX\subseteq V, Y=V−XY = V-X, s∈Xs \in X et t∈Yt \in Y. Sa capacité, notée c(X,Y)c(X,Y), est la somme ∑x∈X,y∈Yc(x,y)\sum \limits_{x \in X, y \in Y} c(x,y). Une coupe est minimale si sa capacité est au plus égale à la capacité de toute coupe de ce réseau. Le flot d'une coupe (X,Y)(X,Y) relativement à un flot ff est la quantité f(X,Y)f(X,Y).

Lemme​

Tout flot ff et toute coupe (X,Y)(X,Y) d'un même réseau de capacité cc vérifient :

∣f∣=f(X,Y)≤c(X,Y)|f|=f(X,Y) \leq c(X,Y)

Théorème​

Soit ff un flot dans un réseau GG. Les quatre assertions suivantes sont équivalentes :

  1. ff est un flot maximal
  2. ff n'admet aucun chemin améliorant
  3. il existe une coupe dans le réseau résiduel induit par ff de capacité nulle
  4. il existe une coupe (X,Y)(X,Y) de capacité cG(X,Y)c_G(X,Y) égale au flot f(X,Y)f(X,Y)

Corollaire (flot maximal / coupe minimale)​

Pour tout réseau, la valeur maximale des flots est égale à la capacité minimale des coupes.

Deux solutions au problème du flot maximal​

Ford-Fulkerson​

Algorithme de Ford-Fulkerson

L'algorithme de Ford-Fulkerson est un algorithme pour le problème du flot maximal. Il s'agit d'un algorithme itératif. À chaque itération, la solution courante est un flot qui satisfait les contraintes de capacité (c'est donc un flot réalisable) et l'algorithme essaie d'augmenter la valeur de ce flot. À chaque itération de la boucle, deux sous-procédures interviennent :

  • le marquage, qui consiste à tester si une amélioration du flot est possible (recherche d'un chemin améliorant) ;
  • le changement de flot, qui augmente le flot le long du chemin trouvé.
fonction FordFulkerson(G=(V,E,c,s,t):réseau):flot
fmax = 0
tant qu'il existe un chemin de s à t de capacité positive faire
calculer un chemin p élémentaire de s à t de capacité positive
f = flotInduit(G,p)
G = réseauRésiduel(G,f)
fmax = fmax + f
retourner fmax

Pour garantir une complexité polynomiale, le marquage doit être fait dans le même ordre que la découverte des sommets (parcours en largeur). La complexité de l'algorithme est alors en O(nm2)O(n m^2) pour un graphe avec nn sommets et mm arcs (algorithme d'Edmonds-Karp, ci-dessous).

Une amélioration de Ford-Fulkerson qui termine​

Dans la définition de FordFulkerson, aucune précision n'a été indiquée sur la façon de calculer un chemin de ss à tt de capacité non nulle. Cette question est pourtant cruciale : sur des réseaux à capacités réelles (irrationnelles), l'algorithme peut ne pas terminer, et avec des capacités entières son nombre d'itérations peut être proportionnel à la valeur du flot maximal.

Cette grande faiblesse de FordFulkerson peut être facilement corrigée : en effet, si l'on utilise un simple parcours en largeur à partir de ss pour calculer un plus court chemin de ss à tt, on obtient un algorithme qui termine toujours, avec une bien meilleure complexité en temps dans le pire des cas : l'algorithme d'Edmonds-Karp.

Algorithme d'Edmonds-Karp

fonction EdmondsKarpRec(G=(V,E,c,s,t):réseau):flot
si il n'existe aucun chemin de s à t de capacité positive alors
retourner 0
sinon
calculer un plus court chemin p de s à t de capacité positive
f = flotInduit(G,p)
H = réseauRésiduel(G,f)
retourner f + EdmondsKarpRec(H)

Le temps d'exécution en O(nm2)O(n m^2) s'obtient en constatant que chaque chemin augmentant peut être trouvé en temps O(m)O(m), qu'à chaque fois au moins un arc de EE est saturé, que la distance de la source à un arc saturé par le chemin augmentant croît à chaque fois que l'arc est saturé, et que cette distance est au plus ∣V∣|V|. Une autre propriété de cet algorithme est que la longueur du plus court chemin augmentant ne décroît jamais.

Théorèmes de Menger​

Nous conclurons ce chapitre en présentant les Théorèmes de Menger. Chacun de ces théorèmes établit, pour tous sommets s≠ts \neq t, l'égalité de deux entiers :

  • le plus petit nombre d'objets qu'il faut retirer pour déconnecter ss de tt ;
  • le plus grand nombre de chemins deux à deux disjoints (vis-à-vis de ces objets) connectant ss à tt.

Fait remarquable, cette propriété concerne des graphes orientés ou non et des "séparateurs" formés de sommets, d'arcs ou d'arêtes.

Un ensemble SS d'arcs (resp. d'arêtes, de sommets) d'un graphe GG sépare un sommet ss d'un sommet tt s'il ne contient ni ss ni tt et si tout chemin de GG allant de ss à tt contient un élément de SS. Un tel ensemble est dit séparateur.

Cette définition en appelle d'autres, qui permettent de quantifier le nombre de sommets, d'arcs ou d'arêtes nécessaires à déconnecter le graphe, c'est-à-dire à séparer deux sommets.

Soit kk un entier. Un graphe GG est :

  • kk-arc-connexe si tout ensemble d'arcs séparateur est de cardinalité au moins kk ;
  • kk-arête-connexe si tout ensemble d'arêtes séparateur est de cardinalité au moins kk ;
  • kk-connexe si tout ensemble de sommets séparateur est de cardinalité au moins kk.