Skip to main content

Graphe - Le problème du 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 anturelle 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)

  • (V,E)(V,E) est un graphe simple orienté où EE est supposé être E=V×VE=V \times V
  • ee 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 appelé le flot réel 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 uV{s,t}u \in V - \{s,t\} vérifie : vVf(u,v)=0\sum \limits_{v \in V} f(u,v)=0

La valeur du flot ff, notée f|f| est la quantité vVf(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 vlaeur 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 vV,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é f(X,Y)f(X,Y) et est égale à

f(X,Y)=xXyYf(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, si 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 GG' "plus simple" pour lequel tout flot maximal ff' 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é 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 u,vu,v 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 positive.

Lemme

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

Maxiflot & MiniCoupe

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,VX)(X,V-X) avec XVX\subseteq V tel que sXs \in X et tYt \in Y. Sa capacité, notéée c(X,Y)c(X,Y), est la somme xX,yYc(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 (MaxiFlot & MiniCoupe)

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

fordfulkerson L'algorithme de Ford-Fulkerson est un algorithmes pour le problème du flot maximum. Il s'agit d'un algorithme itératif. A 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. Considérons un flux possible dont les sous-ensembles sont les différents flux associés à chaque arête ou arc du graphe. A chaque itération de la boucle, deux sous-procédures viennent compléter le processus.

  • le marquage qui consiste à tester si une amélioration du flux est possible
  • le changement de flux, soit la procédure qui donne la meilleure solution à partir de l'observation précédent
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 chemmin 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 commets. La complexité de l'algorithme est alors en O(m2n)O(m^2 n) pour un graphe avec nn sommets et mm arcs.

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 non nulle. Cette question est pourtant cruciale, sur des graphes à valeur réelles, l'algorithme ne se termine pas.

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 et donc de bien meilleure complexité en temps dans le pire des cas

edmondkarp

fonction EdmondKarpsRec(G=(V,E,c,s,t):réseau):flot
si il n'existe aucun chemin de s à t de capacité positive faire
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 + EdmondKarpsRec(K)

Le temps d'exécution de 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 longueur est au pllus VV. Une autre propriété de cet algorithme est que la longueur du plus court chemin augmentant croît .

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 sts \neq t l'égalité de deux entiers

  • le plus petit nombre d'objet qu'il faut retirer pour déconnecter ss de tt
  • le plus grand nombre de chemins objet disjoint 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'arc (resp. d'arêtes, de sommets) d'un graphe séparer un sommet ss d'un sommet tt si il ne contient ni ss ni tt et si tout chemin 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é supérieur à kk
  • kk arête connexe si tout ensemble d'arêtes séparateur est de cardinalité supérieur à kk
  • kk connexe si tout ensemble de sommets séparateur est de cardinalité supérieur à kk