Le Problème Du Flot Maximum
Le Problème Du Flot Maximum
Le Problème Du Flot Maximum
1- Définitions:
Réseau de transport:
Un réseau de transport est un graphe sans boucles, où chaque arc est valué par un nombre positif
c(u) appelé capacité de l'arc u. Ce réseau comporte un sommet sans prédécesseurs appelé "l'entré du
réseau" ou "la source" et autre sommet sans successeurs appelé "la sortie de réseau" ou "le puits".
On note un réseau par R=(X ,U,C).
Exemple:
3
La capacité 2 x1
de l'arc (s,x1) x3
6
3 La sortie
s p du réseau
L'entré
x4
du réseau 7
4 x2 2
Flot:
Un flot "f" dans un réseau de transport, associe à chaque arc u une quantité f(u) qui
représente la quantité de flux qui passe par cet arc en provenance de la source vers le puits.
Remarque:
Un flot est conservatif, s'il obéit à la règle de Kirchoff aux nœuds (aux sommets) suivantes:
la somme des quantités de flux sur les arcs entrant dans un sommet doit être égale à la somme des
quantités de flux sur les arcs sortant de ce même sommet.
Exemple: 1
s 2 x1
1
Dans le graphe, la quantité de flux rentrant dans x1 est égale à la somme des quantités de flux
sortant de x1. La quantité de flot a pour valeur 2. La loi de Kirchoff est vérifiée au sommet x1.
Flot compatible:
Un flot est compatible dans un réseau si pour tout arc u=(x,y), 0≤f(u)≤c(u), autrement dit
pour chaque arc u, le flux qui le traverse ne dépasse pas sa capacité. On retiendra dans ce qui suit la
représentation suivante:
x y
La capacité c(u);f(u)
Le flux qui
de l'arc u traverse de l'arc u
30
théorie des grAPhes
Exemple: 1;1
Soit le réseau R=(X,U,C) suivant: 2;2 x1 x3
6;1
3;1
s p
x4
7;3
4;2 x2 2;2
Dans le réseau R, le flot qui traverse chaque arc ne dépasse pas sa capacité, alors se flot est
compatible.
Flot complet:
Un flot est complet si pour tout chemin allant de la source au puits il y'a au moins un arc
saturé, c'est-à-dire: le flux qui le traverse est égal à sa capacité (f(u)=c(u)).
Exemple:
Dans la figure précédente, on a 3 chemins qui mènent de s à p pour lesquels on a au moins un
arc saturé. Le flot est complet.
Arc saturé
Premier chemin:
4;2
s x2 2;2 x4 7;3
p
Arcs saturés
Deuxième chemin:
2;2
s x1 1;1 x3 6;1
p
Le principe:
L'idée de l'algorithme de Ford et Fulkerson est de faire passer un flot compatible dans le
réseau, le plus évident est le flot nul, puis l'améliorer jusqu'à ce qu'on obtienne un flot complet.
Une chaine pour laquelle le flot peut être augmenté est une chaine dont les arcs dans le sens
direct n'ont pas atteint leur limite et les arcs dans le sens indirect ont un flux non nul qui les traverse.
Autrement dit: une chaine C est dite augmentante si:
- Pour tout arc u direct de C, c'est-à-dire ∈ : ( ) < ( )
- Pour tout arc u indirect de C, c'est-à-dire ∈ : ( ) > 0
Le flot sur cette chaine C peut être augmenté de la valeur suivante:
= { ( ) − ( )/ } et { ( )/ }
Pour améliorer le flot, on ajoute au flot des arcs C+, c'est-à-dire les arcs directs dans la
chaine, et on retranche au flot des arcs de C-, c'est-à-dire, les arcs indirects, dans la chaine.
31
théorie des grAPhes
Exemple:
Voici une chaine C reliant les sommets s et p prise d'un réseau de transport dont le flot peut
être augmenté:
3;1
s x1 4;2 x2 3;1 4;1
x3 p
Dans la chaine on a:
- Les arcs dans le sens direct = {( , ), ( , ), ( , )} n'ont pas attient leur limite:
( ) < ( ).
- Les arcs dans le sens indirect = {( , )} ont un flux non nul ; ( ) > 0.
D’où la chaine C est augmentente.
Le flot sur cette chaine peut être augmenté de la valeur suivante:
= [ { ( ) − ( )/ } ; { ( )/ }]
= Min[3-1;4-2;4-1;1]=1
On augmentera donc le flot de cette chaine de 1, ce qui signifie:
- Augmenter de 1 le flux entre s et x1.
- Augmenter de 1 le flux entre x1 et x2.
- Diminuer de 1 le flux entre x3 et x2.
- Augmenter de 1 le flux entre x3 et p.
On obtient alors le nouveau flot sur la chaine:
3;2
s x1 4;3 x2 3;0 4;2
x3 p
On remarque que pour les arcs en sens inverse, améliorer le flot signifie réduire le flux les
traversant. Entre x3 et x2, le flux est réduit d'une unité pour permettre l'arrivée d'une unité de flux sur
x2 par x1 en augmentant le flux entre x1 et x2 d'une unité et ceci en conservant la loi de kirchoff au
sommet x2.
Enoncé:
Données: un 1-graphe valué G=(X,U,c); f un flot maximum.
Résultat: un flot f complet.
(0) Initialisation: Marquer un sommet s et poser: = ∅; = ∅; = 0; = { }; ≔ 0
(1) Soit A l'ensemble des sommets marqués et soit x un sommet de A:
Marquer le sommet y successeur de x tel que ( , ) < ( , )
On pose: ≔ ∪ {( , )}; ≔ ∪ { }
Marquer le sommet y prédécesseur de x tel que ( , ) > 0
On pose: ≔ ∪ {( , )}; ≔ ∪ { }
Quand on ne peut plus marquer, deux cas se présentent:
1- p est marqué aller en (2)
2- p n'est pas marqué, terminé le flot est maximum.
(2) On a obtenu une chaine augmentante = ∪ de s à p.
Pour améliorer le flot on calcule:
= [ ( ) − ( ); ]
= [ ( ); ]
D’où = { , }
On définit le nouveau flot:
( )+
( )= ( )−
( ) ∉
Effacer les marques sauf en s, et aller en (1).
32
théorie des grAPhes
Application:
Une usine à gaz alimente une ville V par l'intermédiaire du réseau de distribution ci-dessous.
Les nombres associés aux arcs représentent les capacités de transport.
3
5 x1 x3
8
7
4
g V
x4
4
6 x2 5
On voudrait connaitre la quantité maximale que peut écouler l'usine. Ce qui revient à
chercher un flot maximum sur le réseau.
- Initialisation:
On marque le sommet g (entré du réseau R) par le signe +.
On pose : = { }; ∪ =∅ = 0; un flot défini sur le réseau R, k=0
3;0
5;0 x 1
x3 8;0
+ 7;0
g 4;0
V
x4
4;0
6;0 x2 5;0
Le réseau R après défini le flot f 0
- Itération 1:
Dans le réseau R, on suit la procédure de marquage suivante:
- On marque le sommet x1 d'un +, car il est successeur de g et ( , ) = 0 < ( , ) = 5
On pose: = ∪ {( , )} = {( , )}; = ∪ { } = { , }.
- On marque le sommet x3 d'un +, car il est successeur de x1 et ( , ) = 0 < ( , ) = 3
On pose: = ∪ {( , )} = {( , ), ( , )}; = ∪ { } = { , , }.
- On marque le sommet V d'un +, car il est successeur de x3 et ( , ) = 0 < ( , ) = 8
On pose: = ∪ {( , )} = {( , ), ( , ), ( , )}; = ∪ { } = { , , , }.
Le sommet V était marqué, la procédure s'arrête. On obtient donc la chaine augmentante
= ∪ = = {( , ), ( , ), ( , )} reliant le sommet g et V
+ 5;0 + 3;0 + +
g x1 x3 8;0 V
On calcule: = [ ( ) − ( ); ]
= [ ( , ) − ( , ); ( , ) − ( , ); ( , ) − ( , )]
= [5 − 0; 3 − 0; 8 − 0] = 3
On améliore ainsi le flot f 0 pour obtenir un nouveau flot f 1, en ajoutant la quantité au flot
des arcs de C +. Le flux des arcs n'appartenant pas à la chaine, reste inchangé.
Arc saturé
+ 3;3
x1 +
5;3 x3
8;3
+ 7;0
Le réseau R après avoir 4;0 +
g V
défini le nouveau flot f 1 x4
4;0
6;0 x2 5;0 33
théorie des grAPhes
+ 6;0 + +
g x2 7;0 4;0 + +
x3 x4 4;0 V
On calcule: = [ ( ) − ( ); ]
( , )− ( , ); ( , ) − ( , ); ( , ) − ( , );
=
( , )− ( , )
= [6 − 0; 7 − 0; 4 − 0; 4 − 0] = 4
On améliore ainsi le flot f 1 pour obtenir un nouveau flot f 2, en ajoutant la quantité au flot
des arcs de C +. Le flux des arcs n'appartenant pas à la chaine, reste inchangé.
3;3
5;3 x1 +
x3 8;3
+ 7;4
g 4;4 +
V
x4
+ 4;4
6;4 x2 5;0
Le réseau R après défini le flot f 2
On efface les marques sauf en g.
- Itération 3:
Dans le réseau R, on suit la procédure de marquage suivante:
- On marque le sommet x2 d'un +, car il est successeur de g et ( , ) = 4 < ( , ) = 6
On pose: = ∪ {( , )} = {( , )}; = ∪ { } = { , }.
- On marque le sommet x4 d'un +, car il est successeur de x2 et ( , ) = 0 < ( , ) = 5
On pose: = ∪ {( , )} = {( , ), ( , )}; = ∪ { } = { , , }.
- On marque le sommet x3 d'un +, car il est prédécesseur de x4 et ( , ) = 4 > 0
On pose: = ∪ {( , )} = {( , )}; = ∪ { } = { , , , }.
- On marque le sommet V d'un +, car il est successeur de x3 et ( , ) = 5 < ( , ) = 8
On pose:
= ∪ {( , )} = {( , ), ( , ), ( , )}; = ∪ { } = { , , , , }.
34
théorie des grAPhes
+ 6;4 + +
g x2 5;0 4;4 + +
x4 x3 8;5 V
On calcule: = [ ( ) − ( ); ]
= [ ( , ) − ( , ); ( , ) − ( , ); ( , ) − ( , )]
= [6 − 4; 5 − 0; 8 − 5] = 2
= [ ( ); ]
= [ ( , )] =4
= min[ , ] = min[2,4] = 2
On améliore ainsi le flot f 2 pour obtenir un nouveau flot f 3, en ajoutant la quantité au flot
des arcs de C + et retranchant la quantité au flot des arcs C-. Le flux des arcs n'appartenant pas à la
chaine, reste inchangé. 3;3
5;3 x1 +
x3 8;5
+ 7;4
g 4;2 +
+ V
x4
+ 4;4
6;6 x2 5;2
Le réseau R après défini le flot f 3
On efface les marques sauf en g.
- Itération 4:
Dans le réseau R, on ne peut pas marquer le sommet V. Donc le flot obtenu est maximum, on
le représente comme suit:
La valeur du flot maximum est égale à celle des flux sortant de la source g, ou la somme des
valeurs des flux entrant au puits p.
C'est-à-dire: = ∑( ( , )/ ∈ Γ ( )) = ∑( ( , )/ ∈ Γ ( ))
La production maximale que peut écouler l'usine g vers la ville V:
= ( , ) + ( , ) = 5 + 4 = 9 ou = ( , )+ ( , )= 3+6= 9
Remarque 1:
Pour accélérer le processus de résolution de problème de recherche de flot maximum, on
démarre avec un flot au jugé, et on essaie de le rendre complet.
Un flot au jugé, consiste à envoyer une matière à partir du sommet s, et de la distribuer sur le
réseau tout en respecter la conservation de la matière en chaque sommet. On applique ensuite
l'algorithme de Ford et Fulkerson avec comme flot de départ, le flot complet obtenu.
Remarque 2:
Lors de l'application de l'algorithme de Ford et Fulkerson; on peut déterminer dans un
premier temps un flot complet, c'est-à-dire, déterminer toutes les chaines augmentantes qui sont des
chemins, puis dans un second temps, chercher toutes celles qui permettront de rendre le flot complet
maximum.
35