Le Problème Du Flot Maximum

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 6

théorie des grAPhes

chAPitre 4: le Problème du flot mAximum


Le problème du flot maximum peut correspondre à un problème d'acheminement de tonnages
disponibles sur des bateaux, des camions, des wagons ou à des canalisations, à des voies de
transmission ...etc, vers une destination. Par exemple, l'alimentation journalière d'une ville en gaz
peut être considérée comme un problème de flot maximum, si on s'intéresse à la quantité maximale
de gaz que cette ville peut recevoir.

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

Troisième chemin: Arc saturé


2;2
s x1 3;1 x3 7;3
p

2- Le problème de la recherche du flot maximum:


Le problème de flot maximum consiste à trouver la quantité maximum de flot à acheminer de la
source s vers le puits p, en tenant compte des capacités de transport et de la quantité disponible en s.

Algorithme de Ford et Fulkerson pour la recherche d'un flot maximum:


L'algorithme le plus connu pour résoudre ce problème est celui de Ford et Fulkerson.

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

On efface les marques sauf en g.


- Itération 2:
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 ( , ) = 3 < ( , ) = 5
On pose: = ∪ {( , )} = {( , )}; = ∪ { } = { , }.
Le sommet x3 est le successeur de x1, mais l'arc (x1,x3) est saturé ( , )= ( , )=3
Donc, on ne peut pas marquer x3 (on abandonne ce marquage).
- On marque le sommet x2 d'un +, car il est successeur de g et ( , ) = 0 < ( , ) = 6
On pose: = ∪ {( , )} = {( , )}; = ∪ { } = { , }.
- On marque le sommet x3 d'un +, car il est successeur de x2 et ( , ) = 0 < ( , ) = 7
On pose: = ∪ {( , )} = {( , ), ( , )}; = ∪ { } = { , , }.
- On marque le sommet x4 d'un +, car il est successeur de x3 et ( , ) = 0 < ( , ) = 4
On pose: = ∪ {( , )} = {( , ), ( , ), ( , )}; = ∪ { } = { , , , }.
- On marque le sommet V d'un +, car il est successeur de x4 et ( , ) = 0 < ( , ) = 4
On pose: = ∪ {( , )} = {( , ), ( , ), ( , ), ( , )}; = ∪ { } =
{ , , , , }.

Le sommet V est marqué, on arrête le marquage. La chaine obtenue est augmentante


= ∪ = = {( , ), ( , ), ( , ), ( , )}, et relie les deux sommets g et V

+ 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

Le sommet V est marqué, on arrête le marquage. La chaine obtenue est augmentante


= ∪ = {( , ), ( , ), ( , ), ( , )}, et relie les deux sommets g et V

+ 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:

Arcs (g,x1) (g,x2) (x1,x3) (x2,x3) (x2,x4) (x3,x4) (x3,V) (x4,V)


flux 3 6 3 4 2 2 5 4

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

Vous aimerez peut-être aussi