Chapitre 8 : Flots dans les réseaux

publicité
Chapitre 8 : Flots dans les réseaux
Algorithmique de graphes
Sup Galilée-INFO2
Sylvie Borne
2011-2012
Chapitre 8 : Flots dans les réseaux -
1/57
Plan
1
Flot réalisable
2
Le problème du flot maximum
Exemple
Plusieurs sources, plusieurs puits
Flot maximum et programmation linéaire
3
Chaı̂nes augmentantes
4
Algorithme de Ford et Fulkerson (1961)
Procédure de marquage (labelling)
Algorithme de la chaı̂ne augmentante
Algorithme de Ford et Fulkerson
5
La coupe minimum
Implémentation et complexité de l’algorithme de Ford et
Fulkerson
6
Chapitre 8 : Flots dans les réseaux -
2/57
Problème de flot
Problème de plus court chemin
→ une personne seule de la source à la destination.
Problème de flot
→ acheminement d’une quantité de marchandises (divisibles : on
peut acheminer nos marchandises par des routes différentes) de la
source vers la destination.
Chapitre 8 : Flots dans les réseaux -
3/57
Problème de flot : Applications
Applications :
logistique : transport de marchandises : train, camion,
bateau,. . .
distribution d’eau (canalisations)
transport de pétrole : réseauè de pipelines
énergie : réseau EDF, centrales → clients
information : réseau téléphonique, réseau d’entreprises,
internet.
Chapitre 8 : Flots dans les réseaux -
4/57
Réseau de transport
Définition : réseau de transport
~ ), s, t, c) est formé
Un réseau de transport noté R = (G = (V , E
de :
~ ) un graphe orienté
G = (V , E
s ∈ V appelé sommet source
t ∈ V appelé sommet destination ou puits
~ → N, Q+ fonction capacité (à chaque arc (i, j) ∈ E
~ est
c :E
associée une capacité c(i, j) ≥ 0).
Remarque :
s et t sont deux sommets particuliers de G .
Chapitre 8 : Flots dans les réseaux -
Flot réalisable
5/57
Flot réalisable
Définition : flot réalisable
~ ), s, t, c) un réseau. Un flot f dans R est
Soit R = (G = (V , E
une application f :→ N, Q+ .
Un flot f est réalisable dans R si
1
contrainte de capacité
~
0 ≤ f (i, j) ≤ c(i, j) ∀(i, j) ∈ E
2
contraintes
de conservation
de flot (Loi de Kirschoff)
X
X
f (i, j) −
f (j, k) = 0 ∀j ∈ V \{s, t}
~
i | (i,j)∈E
~
k | (j,k)∈E
(quantité qui entre dans j = quantité qui sort de j)
Chapitre 8 : Flots dans les réseaux -
Flot réalisable
6/57
Flot réalisable
Exemple :
v1
( ?) capacité
s
(5)
5
(4)
x
3
flot
t
(2) 2
7
(7)
5
(6)
v2
Le flot est réalisable.
Chapitre 8 : Flots dans les réseaux -
Flot réalisable
contraintes de capacité Ok
contraintes de conservation
de flot Ok
en v1 : 5-2-3=0
en v2 : 5+2-7=0
7/57
Valeur d’un flot
Définition : valeur d’un flot
~ ), s, t, c) un réseau.
Soit R = (G = (V , E
La valeur d’un flot f réalisable entre s et t est la quantité de flot
envoyéeX
de s à t. On la X
note F et
F =
f (s, i) −
f (j, s) =
~
Xi | (s,i)∈E
f (i, t) −
~
i | (i,t)∈E
~
Xj | (j,s)∈E
f (t, j)
~
j | (t,j)∈E
Exemple :
Ici, la valeur du flot est de 10. (F = 5 + 5 = 3 + 7 = 10).
Chapitre 8 : Flots dans les réseaux -
Flot réalisable
8/57
Arc saturé
Définition : arc saturé
Un arc (i, j) est dit saturé pour un flot f si f (i, j) = c(i, j).
Exemple :
v1
( ?) capacité
s
(5)
5
(4)
x
3
t
(2) 2
5
(6)
flot
7
(7)
v2
Ici, les arcs (s, 1), (1, 2) et (2, t) sont saturés.
Les arcs (s, 2) et (1, t) ne le sont pas.
Chapitre 8 : Flots dans les réseaux -
Flot réalisable
9/57
Arc retour
Remarque :
Pour que la contrainte de conservation de flot soit vérifiée en tout
sommet (y compris (s et t), on ajoute un arc artificiel (t, s) de
capacité infinie et appelé arc de retour.
v1
s
(5)
5
(4)
3
t
(2) 2
5
(6)
7
(7)
Si aucun autre
arc n’entre en s,
la valeur F du
flot f est alors
donnée à f (t, s).
v2
F = 10
(+∞)
Chapitre 8 : Flots dans les réseaux -
Flot réalisable
10/57
Le problème du flot maximum
Problème :
~ ), s, t, c).
Soit un réseau R = (G = (V , E
Le problème du flot maximum consiste à déterminer
un flot réalisable entre s et t qui soit de valeur
maximum.
Chapitre 8 : Flots dans les réseaux -
Le problème du flot maximum
11/57
Le problème du flot maximum : exemple
Exemple :
On remarque que le flot donné dans le réseau précédent n’est pas
maximum. En effet, on peut trouver un flot de valeur 11.
v1
s
(5)
5
(4)
4
t
(2) 1
11
11
6
(6)
7
(7)
v2
Ce nouveau flot est maximum.
En effet, on remarque qu’au mieux il peut rentre 11 unités de flot
dans t à cause des capacités 4 et 7 sur les arcs entrants.
Chapitre 8 : Flots dans les réseaux -
Le problème du flot maximum
12/57
Plusieurs sources, plusieurs puits
Remarque :
Le problème du flot maximum peut être généralisé de la manière
suivante :
Supposons qu’il existe un ensemble de sommets sources et un
ensemble de puits.
On désire déterminer un flot max qui peut être envoyé de toutes
les sources aux différents puits.
Ce problème peut être ramené au problème précédent en ajoutant
une super-source s0 et un super-puits t0 . On relie la super-source à
toutes les sources avec des arcs de capacité infinie et on relie le
super-puits aux différents puits avec des arcs de capacité infinie. Le
problème se ramène alors à un problème de flot max de s0 à t0 .
Chapitre 8 : Flots dans les réseaux -
Le problème du flot maximum
13/57
Plusieurs sources, plusieurs puits
Exemple :
sources : v1 et v2 et puits : v4 et v5
v1
(+∞)
s0
v4
(4)
(1)
v2
Chapitre 8 : Flots dans les réseaux -
(4)
v3
(2)
(+∞)
(+∞)
(2)
(3)
(+∞)
(1)
1
Le problème du flot maximum
t0
v5
14/57
Flot maximum et PL
~
Soient f (i, j) = flot transitant sur l’arc (i, j) ∀(i, j) ∈ E
F = valeur du flot f
Le problème du flot maximum entre s et t peut se formuler de la
manière suivante :

Max





s.c.





F

 −F
0
f (i, j) −
f (j, k) =

F
i | (i,j)∈~
E
k | (j,k)∈~
E
X
X
0 ≤ f (i, j) ≤ c(i, j)
si j = s
si j =
6 s, t
si j = t
∀j ∈ V
~
∀(i, j) ∈ E
~ | + 1 variables
Ce programme linéaire a |E
~ | + |V | contraintes.
et 2|E
Chapitre 8 : Flots dans les réseaux -
Le problème du flot maximum
15/57
Chaı̂nes augmentantes
Exemple :
v1
(5)
s
(4)
t
(2)
(7)
(6)
v2
Pour déterminer un flot maximum dans ce réseau, on peut
commencer par envoyer du flot sur des chemins de s à t.
Chapitre 8 : Flots dans les réseaux -
Chaı̂nes augmentantes
16/57
Chaı̂nes augmentantes
→ Par exemple, on peut commencer par envoyer un flot de 2 sur le
chemin (s, 1, 2, t).
v1
(5)
s
(4)
t
(2)
(7)
(6)
v2
Chapitre 8 : Flots dans les réseaux -
Chaı̂nes augmentantes
17/57
Chaı̂nes augmentantes
→ Vu qu’il y a une réserve de capacité de 3 sur le chemin (s, 1, t),
on peut envoyer 3 unités de flot.
v1
s
(5)
2
(4)
0
t
(2) 2
2
0
(6)
2
2
(7)
v2
Chapitre 8 : Flots dans les réseaux -
Chaı̂nes augmentantes
18/57
Chaı̂nes augmentantes
→ Vu qu’il reste une réserve de 5 sur le chemin (s, 2, t), on peut
envoyer un flot de 5 sur ce chemin.
v1
s
(5)
5
(4)
3
t
(2) 2
5
5
2
0
(7)
(6)
v2
Mais ce flot n’est pas maximum.
Chapitre 8 : Flots dans les réseaux -
Chaı̂nes augmentantes
19/57
Chaı̂nes augmentantes
Considérons la chaı̂ne
v1
(4)
3
s
(2) 2
t
5
(6)
v2
On remarque que l’on peut :
augmenter le flot de 1 sur (s, 2),
diminuer le flot de 2 sur (1, 2),
augmenter le flot de 1 sur (1, t).
Chapitre 8 : Flots dans les réseaux -
Chaı̂nes augmentantes
20/57
Chaı̂nes augmentantes
Donc en augmentant le flot de 1 sur les arcs (s, 2) et (1, t) et en le
diminuant de 1 sur l’arc (1, 2) on aura le flot réalisable suivant :
v1
s
(5)
5
(4)
3
t
(2) 2
10
10
7
5
(7)
(6)
v2
Chapitre 8 : Flots dans les réseaux -
Chaı̂nes augmentantes
21/57
Chaı̂nes augmentantes
Les contraintes de conservation de flot sont respectées.
v1
v1
+1
-1
t
s
-1
+1
v2
Chapitre 8 : Flots dans les réseaux -
v2
Chaı̂nes augmentantes
22/57
Chaı̂nes augmentantes
Définition : chaı̂ne augmentante
Une chaı̂ne C entre s et t est dite augmentante par rapport à un
~ ) réalisable entre s et t si
flot f = (f (i, j), (i, j) ∈ E
~ ) arc conforme)
f (i, j) < c(i, j) si (i, j) ∈ C + ((i, j) ∈ E
~ ) arc non conforme)
f (i, j) > 0 si (i, j) ∈ C − ((j, i) ∈ E
où C + est l’ensemble des arcs de C rencontrés dans le bon sens et
C − est l’ensemble des arcs de C rencontrés dans le sens contraire.
Chapitre 8 : Flots dans les réseaux -
Chaı̂nes augmentantes
23/57
Chaı̂nes augmentantes
Exemple :
v1
(4)
s
(2)
t
(6)
v2
arcs conformes
arcs non conformes
5 < 6, 2 > 0, 3 < 4
La chaı̂ne (s, 2, 1, t) est bien une chaı̂ne augmentante.
Chapitre 8 : Flots dans les réseaux -
Chaı̂nes augmentantes
24/57
Chaı̂nes augmentantes
Lemme :
~ ) réalisable entre s et t.
Soit f = (f (i, j), (i, j) ∈ E
S’il existe une chaı̂ne augmentante par rapport à f entre s et
t,
alors f n’est plus maximum.
Preuve :
Chapitre 8 : Flots dans les réseaux -
Chaı̂nes augmentantes
25/57
Procédure de marquage
Cette procédure permet, étant donné un flot réalisable, de
déterminer si elle existe, une chaı̂ne augmentante par rapport à f .
Cette procédure est basée sur 2 opérations de marquage dits :
marquage direct et marquage indirect.
Chapitre 8 : Flots dans les réseaux -
Algorithme de Ford et Fulkerson (1961)
26/57
Marquage direct
Marquage direct :
Si pour un arc (i, j) on a
*
i
f (i, j) < c(i, j)
j
i marqué
j non marqué
f (i, j) < c(i, j)
alors
on marque j
et on pose
δ(j) =min(δ(i), c(i, j) − f (i, j))
δ(j) est la quantité max avec laquelle on peut augmenter le flot de
s à j.
(δ(i) est une valeur associée à i, elle est initialisée à l’infini pour s.)
Chapitre 8 : Flots dans les réseaux -
Algorithme de Ford et Fulkerson (1961)
27/57
Marquage indirect
Marquage indirect :
Si pour un arc (j, i) on a
*
i
f (j, i) > 0
j
i marqué
j non marqué
f (j, i) > 0
alors
on marque j
et on pose
δ(j) =min(δ(i), f (j, i))
Chapitre 8 : Flots dans les réseaux -
Algorithme de Ford et Fulkerson (1961)
28/57
Algorithme de la chaı̂ne augmentante
Supposons que l’on dispose d’un flot réalisable
~ ) entre s et t.
f = (f (i, j), (i, j) ∈ E
Étape 1
:
Étape 2
:
Chapitre 8 : Flots dans les réseaux -
(initialisation)
Marquer s par (s, +).
Poser δ(s) = +∞.
Répéter les opérations suivantes jusqu’à ce que t
soit marqué ou qu’il ne soit plus possible de marquer.
Algorithme de Ford et Fulkerson (1961)
29/57
Algorithme de la chaı̂ne augmentante
Opération a)
Si il existe un arc (i, j) tel que
i marqué
j non marqué
f (i, j) < c(i, j)
Alors
Marquer j par (i, +)
Poser δ(j) = min(δ(i), c(i, j) − f (i, j))
Chapitre 8 : Flots dans les réseaux -
Algorithme de Ford et Fulkerson (1961)
30/57
Algorithme de la chaı̂ne augmentante
Opération b)
Si il existe un arc (j, i) tel que
i marqué
j non marqué
f (j, i) > 0
Alors
Marquer j par (i, −)
Poser δ(j) = min(δ(i), f (j, i))
Chapitre 8 : Flots dans les réseaux -
Algorithme de Ford et Fulkerson (1961)
31/57
Algorithme de la chaı̂ne augmentante
Étape 3
:
Chapitre 8 : Flots dans les réseaux -
Si t est marqué Alors
une chaı̂ne augmentante C entre s et t est
détectée et on pose = δ(t)
Sinon
le flot f est maximum.
Algorithme de Ford et Fulkerson (1961)
32/57
Algorithme de la chaı̂ne augmentante
Exemple :
Considérons le réseau suivant où le flot de départ est nul (donc
uniquement marquage direct possible).
2
(5)
(3)
(1)
(1)
(7)
1
3
(4)
5
(9)
7
(1)
(4)
(2)
(1)
(5)
(6)
(4)
4
Chapitre 8 : Flots dans les réseaux -
6
Algorithme de Ford et Fulkerson (1961)
33/57
Algorithme de Ford et Fulkerson
~)
On suppose que l’on dispose d’un flot initial f = (f (i, j), (i, j) ∈ E
entre s et t (on peut prendre f = 0).
Étape 1 : Appliquer l’algorithme de la chaı̂ne augmentante à
f.
Si t est marqué,
STOP f est optimal.
Sinon
une chaı̂ne augmentante C est détectée, aller à
l’étape 2.
Étape 2 : Changer le
 flot f comme suit :
si (i, j) 6∈ C
 f (i, j)
f (i, j) + si (i, j) ∈ C +
f (i, j) =

f (i, j) − si (i, j) ∈ C −
Aller à l’étape 1.
Chapitre 8 : Flots dans les réseaux -
Algorithme de Ford et Fulkerson (1961)
34/57
Algorithme de Ford et Fulkerson
Exemple :
2
(5)
1
(1)
4
(7)
1
3
(4)
3
5
9
(3)
0
(1)
4
0
(4)
(2)
0
2
(5)
(9)
5
7
(1)
1
1
(1)
7
9
2
(6)
(4)
4
Chapitre 8 : Flots dans les réseaux -
2
6
Algorithme de Ford et Fulkerson (1961)
35/57
Algorithme de Ford et Fulkerson
Exemple :
2
(5)
1
(1)
4
(7)
1
3
(4)
3
7
11
(3)
0
(1)
4
0
(4)
(2)
2
2
(5)
(9)
5
7
(1)
1
1
(1)
7
11
4
(6)
(4)
4
Chapitre 8 : Flots dans les réseaux -
2
6
Algorithme de Ford et Fulkerson (1961)
36/57
Algorithme de Ford et Fulkerson
Exemple :
2
(5)
1
(1)
4
(7)
1
3
(4)
3
7
13
(3)
0
(1)
4
2
(4)
(2)
2
2
(5)
(9)
5
7
(1)
1
1
(1)
7
13
6
(6)
(4)
4
Chapitre 8 : Flots dans les réseaux -
4
6
Algorithme de Ford et Fulkerson (1961)
37/57
Algorithme de Ford et Fulkerson
Exemple :
2
(5)
1
(1)
4
(7)
1
3
(4)
3
7
14
(3)
0
(1)
4
3
(4)
(2)
3
1
(5)
(9)
5
8
(1)
0
1
(1)
7
14
6
(6)
(4)
4
Chapitre 8 : Flots dans les réseaux -
4
6
Algorithme de Ford et Fulkerson (1961)
38/57
Coupe
Définition : coupe
Étant donné un graphe G =
~ ) et un sous-ensemble S de
(V , E
sommets de V , on appelle coupe
associée à S, et on la note δ(S),
l’ensemble des arcs (i, j) tels que
i ∈ S et j ∈ V \S.
Chapitre 8 : Flots dans les réseaux -
La coupe minimum
39/57
Coupe
Exemple :
2
1
5
3
4
δ({1, 3, 4}) = {(1, 2), (1, 5), (3, 2), (4, 5)}
Chapitre 8 : Flots dans les réseaux -
La coupe minimum
40/57
Coupe
Définition : sépare
Étant donnés deux sommets s et t de G et une coupe δ(S), on dit
que δ(S) sépare s et t si s ∈ S et t ∈ V \S.
Exemple :
2
1
5
3
La coupe ci-contre sépare 1 et
5.
Elle sépare aussi 3 et 2.
4
Chapitre 8 : Flots dans les réseaux -
La coupe minimum
41/57
Capacité d’une coupe
Définition : capacité d’une coupe
~ ) est un système de capacités associé aux
Si c = (c(i, j), (i, j) ∈ E
~ ) et si δ(S) est une coupe du graphe
arcs du graphe G = (V , E
alors la capacité de δ(S) est définie par
X
C (δ(S)) =
c(i, j).
(i,j)∈δ(S)
Chapitre 8 : Flots dans les réseaux -
La coupe minimum
42/57
Flots et coupes
Théorème :
~ ), s, t, c).
Soit un réseau R = (G = (V , E
~ ) est un flot réalisable entre s et t de
Si f = (f (i, j), (i, j) ∈ E
valeur F et si δ(S) est une coupe qui sépare s et t alors
F ≤ C (δ(S)).
Preuve :
Chapitre 8 : Flots dans les réseaux -
La coupe minimum
43/57
Th du flot max - coupe min
Théorème : Th du flot max - coupe min
La valeur maximum d’un flot réalisable entre s et t est égale
à la capacité minimum d’une coupe séparant s et t.
Preuve :
Chapitre 8 : Flots dans les réseaux -
La coupe minimum
44/57
Th du flot max - coupe min
Exemple :
2
(5)
1
(1)
4
(7)
1
3
(4)
3
7
14
(3)
0
(1)
4
3
(4)
(2)
3
1
(5)
(9)
5
8
(1)
0
1
(1)
7
14
6
(6)
(4)
4
4
6
Remarque :
Tous les arcs appartenant à la coupe sont saturés et la valeur du
flot sur ces arcs est bien de 3+4+1+6=14.
Chapitre 8 : Flots dans les réseaux -
La coupe minimum
45/57
Flots entiers
Remarque :
Si les capacités sont entières alors le flot max a des valeurs
entières.
Chapitre 8 : Flots dans les réseaux -
La coupe minimum
46/57
Graphe d’écart
Définition : graphe d’écart
~ ), s, t, c) un réseau. Soit f un flot sur R.
Soit R = (G = (V , E
~
~ :
Gf = (V , Ef ) est le graphe d’écart de f avec pour (i, j) ∈ E
f (i, j) < c(i, j) ⇒ (i, j) ∈ E~f (arc conforme)
f (i, j) > 0
⇒ (j, i) ∈ E~f (arc non conforme)
Chapitre 8 : Flots dans les réseaux -
Implémentation et complexité de l’algorithme de Ford et Fulkerson
47/57
Graphe d’écart
Exemple :
2
(5)
1
(1)
4
(7)
1
13
0
(1)
(3)
3
(4)
3
2
(4)
(2)
2
(9)
5
4
7
2
(5)
7
7
(1)
1
13
6
(1)
1
(6)
(4)
4
6
4
Chapitre 8 : Flots dans les réseaux -
Implémentation et complexité de l’algorithme de Ford et Fulkerson
48/57
Graphe d’écart
Exemple :
2
arcs conformes
arcs non conformes
3
5
(5)
4
1
4
Chapitre 8 : Flots dans les réseaux -
7
6
Implémentation et complexité de l’algorithme de Ford et Fulkerson
49/57
Graphe d’écart
Exemple :
1
(7)
2
arcs conformes
arcs non conformes
3
5
7
7
4
Chapitre 8 : Flots dans les réseaux -
6
Implémentation et complexité de l’algorithme de Ford et Fulkerson
50/57
Graphe d’écart
Exemple :
arcs conformes
arcs non conformes
2
(1) 0
1
5
3
4
Chapitre 8 : Flots dans les réseaux -
7
6
Implémentation et complexité de l’algorithme de Ford et Fulkerson
51/57
Graphe d’écart
Exemple :
arcs conformes
arcs non conformes
2
1
5
3
4
Chapitre 8 : Flots dans les réseaux -
7
6
Implémentation et complexité de l’algorithme de Ford et Fulkerson
52/57
Graphe d’écart
Remarque :
La recherche d’une chaı̂ne augmentante se ramène à un parcours
en profondeur dans le graphe d’écart à partir s.
Exemple :
arcs conformes
arcs non conformes
2
1
5
3
4
Chapitre 8 : Flots dans les réseaux -
7
6
Implémentation et complexité de l’algorithme de Ford et Fulkerson
53/57
Graphe d’écart
Remarque :
On calcule ensuite les capacités résiduelles sur la chaı̂ne de s à t.
Exemple :
arcs conformes
arcs non conformes
2
=1
1
5
3
7
2
2
2
3
1
4
Chapitre 8 : Flots dans les réseaux -
6
Implémentation et complexité de l’algorithme de Ford et Fulkerson
54/57
Complexité
1
Complexité d’une itération : O(m)
recherche d’une chaı̂ne augmentante
parcours en profondeur :O(m)
2m arcs au plus
calcul de la capacité résiduelle pour la chaı̂ne
trouver le minimum d’au plus n − 1 capacités résiduelles
O(n)
calcul du nouveau flot : O(n)
construction du nouveau graphe d’écart :
au max 2 × (n − 1) arcs qui changent : O(n)
2
Nombre max d’itérations de Ford / Fulkerson
Chapitre 8 : Flots dans les réseaux -
Implémentation et complexité de l’algorithme de Ford et Fulkerson
55/57
Complexité
1
Complexité d’une itération : O(m)
2
Nombre max d’itérations de Ford / Fulkerson
hypothèses : c ∈ N et le flot de départ est entier.
Les capacités résiduelles sont entières.
⇒ la suite des flots est entière.
⇒ la valeur du flot augmente au moins de 1 à chaque
itération.
⇒ au P
plus F ∗ itérations avec F ∗ =valeur du flot max.
∗
F ≤ j c(s, j) ≤ (n − 1)C avec C = max(i,j)∈E~ c(i, j)
donc au pire, (n − 1)C itérations.
Complexité dans le pire des cas de Ford / Fulkerson : O(n.m.C )
Chapitre 8 : Flots dans les réseaux -
Implémentation et complexité de l’algorithme de Ford et Fulkerson
56/57
Améliorations de Ford et Fulkerson
Idée 1 : Choisir une chaı̂ne augmentante de capacité résiduelle
maximum.
→ pas de garantie que les augmentations suivantes
→ ce n’est plus un parcours mais la recherche d’un chemin de
débit maximum
Idée 2 : Choisir une chaı̂ne augmentante la plus courte possible en
termes de nombre d’arcs.
→ parcours en largeur
Chapitre 8 : Flots dans les réseaux -
Implémentation et complexité de l’algorithme de Ford et Fulkerson
57/57
Téléchargement