Réseaux de flot
David Pichardie 8 novembre 2016
Entrée
• un graphe pondéré (par une capacité notée c)
• poids strictement positifs
• un sommet source s et un sommet cible t
Le problème du flot maximum
s t
10
5
15
4
4
9
15
8
6
16
15
15 10
10 10
pas d’arc sortant pas d’arc
entrant
Autre hypothèse
(simplificatrice) : si (i,j) est un arc, (j,i) n’en est pas
Définition. Un flot est une pondération (notée f) des arcs telle que
• pour chaque arc e, 0 ≤ f(e) ≤ c(e)
• en chaque sommet,
somme des poids des arcs entrants = somme des poids des arcs sortant
Le problème du flot maximum
s v t
10/10
5/5
10/15
0/4
0/4
5/9
5/15
5/8
0/6
10/16
0/15
0/15 10/10
10/10 5/10
flot capacité En v : 5+5+0 = 0+10
équilibre local
Définition. La valeur du flot est la somme des flots entrants dans le sommet cible
Problème du flot maximum : trouver un flot de valeur maximum
Le problème du flot maximum
s t
10/10
5/5
10/15
0/4
0/4
5/9
5/15
5/8
0/6
10/16
0/15
0/15 10/10
10/10 5/10
flot capacité
valeur : 5 + 10 + 10 = 25
Initialisation. Au départ, un flot nul.
Algorithme de Ford-Fulkerson
s t
0/10
0/5
0/15
0/4
0/4
0/9
0/15
0/8
0/6
0/16
0/15
0/15 0/10
0/10 0/10
valeur du flot = 0
Chemin améliorant : on cherche un chemin (dans le graphe non orienté associé) de s à t
• qui augmente de w le flot des arcs empruntés en avant
• qui diminue de de w le flot des arcs empruntés en arrière
Algorithme de Ford-Fulkerson
s t
valeur du flot = 10
sans dépasser la capacité de l’arc
sans rendre le flot négatif sur cet arc
0/10
0/5
0/15
0/4
0/4
0/9
0/15
0/8
0/6
0/16
0/15
0/15 0/10
0/10 0/10
10 10
10
1er chemin améliorant
Chemin améliorant : on cherche un chemin (dans le graphe non orienté associé) de s à t
• qui augmente de w le flot des arcs empruntés en avant
• qui diminue de de w le flot des arcs empruntés en arrière
Algorithme de Ford-Fulkerson
s t
valeur du flot = 10
sans dépasser la capacité de l’arc
sans rendre le flot négatif sur cet arc
10/10
0/5
0/15
0/4
0/4
0/9
10/15
0/8
0/6
0/16
0/15
0/15 0/10
10/10 0/10
1er chemin améliorant
Chemin améliorant : on cherche un chemin (dans le graphe non orienté associé) de s à t
• qui augmente de w le flot des arcs empruntés en avant
• qui diminue de de w le flot des arcs empruntés en arrière
Algorithme de Ford-Fulkerson
s t
valeur du flot = 10+10
10/10
0/5
0/15
0/4
0/4
10/15
0/8
0/6
0/16
0/15
0/15 0/10
10/10 0/10
2e chemin améliorant
10
10
10 0/9
Chemin améliorant : on cherche un chemin (dans le graphe non orienté associé) de s à t
• qui augmente de w le flot des arcs empruntés en avant
• qui diminue de de w le flot des arcs empruntés en arrière
Algorithme de Ford-Fulkerson
s t
valeur du flot = 10+10
10/10
0/5
10/15
0/4
0/4
10/15
0/8
0/6
10/16
0/15
0/15 10/10
10/10 0/10
2e chemin améliorant
0/9
Chemin améliorant : on cherche un chemin (dans le graphe non orienté associé) de s à t
• qui augmente de w le flot des arcs empruntés en avant
• qui diminue de de w le flot des arcs empruntés en arrière
Algorithme de Ford-Fulkerson
s t
valeur du flot = 20+5
10/10
0/5
10/15
0/4
0/4
10/15
0/8
0/6
10/16
0/15
0/15 10/10
10/10 0/10
3e chemin améliorant
0/9
5 5
10-5 5
5
on diminue le flot pour respecter l’équilibre local
on redistribue le flot perdu à partir de là
Chemin améliorant : on cherche un chemin (dans le graphe non orienté associé) de s à t
• qui augmente de w le flot des arcs empruntés en avant
• qui diminue de de w le flot des arcs empruntés en arrière
Algorithme de Ford-Fulkerson
s t
valeur du flot = 20+5
10/10
5/5
10/15
0/4
0/4
5/15
5/8
0/6
10/16
0/15
0/15 10/10
10/10 5/10
3e chemin améliorant
5/9
Chemin améliorant : on cherche un chemin (dans le graphe non orienté associé) de s à t
• qui augmente de w le flot des arcs empruntés en avant
• qui diminue de de w le flot des arcs empruntés en arrière
Algorithme de Ford-Fulkerson
s t
valeur du flot = 25+3
10/10
5/5
10/15
0/4
0/4
5/15
5/8
0/6
10/16
0/15
0/15 10/10
10/10 5/10
4e chemin améliorant
5/9
+3
+3 +3 +3 -3
+3
+3
Chemin améliorant : on cherche un chemin (dans le graphe non orienté associé) de s à t
• qui augmente de w le flot des arcs empruntés en avant
• qui diminue de de w le flot des arcs empruntés en arrière
Algorithme de Ford-Fulkerson
s t
valeur du flot = 25+3
10/10
5/5
13/15
0/4
0/4
2/15
8/8
3/6
13/16
0/15
0/15 10/10
10/10 8/10
4e chemin améliorant
8/9
Terminaison : tous les chemins de s à t (dans le graphe non orienté associé) sont bloqués
• soit sur un arc e emprunté en avant tel que f(e)=c(e)
• soit sur une arc e emprunté en arrière tel que f(e)=0
Algorithme de Ford-Fulkerson
s t
valeur du flot = 28
10/10
5/5
13/15
0/4
0/4
2/15
8/8
3/6
13/16
0/15
0/15 10/10
10/10 8/10
plus de chemin améliorant
8/9
Algorithme
1. Commence avec un flot nul
2. Tant qu’il existe un chemin améliorant
1. Trouve un chemin améliorant (parcours du graphe orienté résiduel) 2. Calcule le poid maximum w le long de ce chemin
3. Augmente le flot avec w le long de ce chemin
Algorithme de Ford-Fulkerson
s t
10/10
5/5
10/15
0/4
0/4
5/15
5/8
0/6
10/16
0/15
0/15 10/10
10/10 5/10 5/9
s t
10
5
10
5 4
6 10
6 3 5 10
5 4 5
5 5
10
10 4 15
15
Graphe de flot Graphe résiduel
Algorithme de Ford-Fulkerson
Questions
• Quand l’algorithme termine, est-ce qu’il calcule bien un flot maximum ?
• Est-ce que l’algorithme termine toujours ?
• Si oui, après combien de recherche de chemins augmentants ?
s t
10/10
5/5
13/15
0/4
0/4
2/15
8/8
3/6
13/16
0/15
0/15 10/10
10/10 8/10 8/9
Le problème de la coupe minimum
Entrée
• un graphe pondéré (par une capacité notée c)
• poids strictement positifs
• un sommet source s et un sommet cible t
s t
10
5
15
4
4
9
15
8
6
16
15
15 10
10 10
pas d’arc sortant pas d’arc
entrant
Autre hypothèse
(simplificatrice) : si (i,j) est un arc, (j,i) n’en est pas
Définition. Une coupure est une une partition (A,B) de l’ensemble des sommets du graphe telle que s appartient à A et t appartient à B.
Définition. La capacité d’une coupure est la somme des capacités des arcs allant de A vers B.
Problème de la coupure minimum : trouver une coupure de capacité minimum.
Le problème de la coupe minimum
s t
10
5
15
4
4
9 15
8
6 16
15
15 10
10 10
capacité = 10 + 8 + 16
les arcs entrants ne comptent pas
Deux problèmes historiques
Figure 2
From Harris and Ross [1955]: Schematic diagram of the railway network of the Western Soviet Union and Eastern European countries, with a maximum flow of value 163,000 tons from Russia to Eastern Europe, and a cut of capacity 163,000 tons indicated as “The bottleneck”.
Acknowledgements. I thank Sasha Karzanov for his efficient help in finding Tolsto˘ı’s paper in the (former) Lenin Library in Moscow, Irina V. Karzanova for accurately providing me with an English translation of it, Kim H. Campbell and Joanne McLean at Air Force Pentagon for declassifying the Harris-Ross report, and Richard Bancroft and Gustave Shubert at RAND Corporation for their mediation in this.
8
On the history of the transportation and the maximum flow problem. Alexander Schrijver. http://homepages.cwi.nl/~lex/files/histtrpclean.pdf
Théorème. La capacité de la coupe minimum est égale à la valeur du flot maximum.
Le théorème du maxflow-mincut
capacité = 10 + 8 + 10 = 28
s t
valeur du flot = 28
10/10
5/5
13/15
0/4
0/4
2/15
8/8
3/6
13/16
0/15
0/15 10/10
10/10 8/10 8/9
Définition. Soit f un flot et (A,B) une coupure. Le flot net f(A,B) est définie comme la somme des flots des arcs de A vers B, moins la somme des flots des arcs de B vers A.
Ici : (10 + 10 + 0 + 5 + 10) - (0 + 5 + 5 + 0) = 25
Preuve du théorème du maxflow-mincut
s t
10/10
5/5
10/15
0/4
0/4
5/15
5/8
0/6
10/16
0/15
0/15 10/10
10/10 5/10 5/9
B = A =
Lemme. Le flot net f(A,B) est égal à la valeur du flot f.
s t
10/10
5/5
10/15
0/4
0/4
5/15
5/8
0/6
10/16
0/15
0/15 10/10
10/10 5/10 5/9
B = A =
valeur du flot = 25 = f(A,B)
Preuve du théorème du
maxflow-mincut
Lemme. Le flot net f(A,B) est égal à la valeur du flot f.
Preuve. Par récurrence sur la taille de B.
• Cas de base : B = {t}.
• Hérédité : supposons le résultat vrai pour (A,B) [f(A,B) = |f|], fixons y appartenant à A et montrons le résultat pour la coupe (A-{y}, B+{y}).
Preuve du théorème du maxflow-mincut
f(A\{y}, B [ {y}) = X
u2A\{y},v2B[{y}
f(u, v) X
u2B[{y},v2A\{y}
f(u, v)
si un arc e n’existe pas, nous prenons la convention que f(e)=0
Or
Donc
équilibre local en y
par hypothèse de récurrence
f(A\{y}, B [ {y}) = X
u2A\{y},v2B[{y}
f(u, v) X
u2B[{y},v2A\{y}
f(u, v)
X
u2A\{y},v2B[{y}
f(u, v) = X
u2A,v2B[{y}
f(u, v) X
v2B[{y}
f(y, v)
= X
u2A,v2B
f(u, v) + X
u2A
f(u, y) X
v2B
f(y, v) f(y, y)
= X
u2A,v2B
f(u, v) + X
u2A
f(u, y) X
v2B
f(y, v)
f(A\{y}, B [ {y}) =
0
@ X
u2A,v2B
f(u, v) + X
u2A
f(u, y) X
v2B
f(y, v) 1 A 0
@ X
u2B,v2A
f(u, v) + X
v2A
f(y, v) X
u2B
f(u, y) 1 A
= f(A, B) + X
u2A[B
f(u, y) X
v2A[B
f(y, v)
= f(A, B) + 0
= |f|
Lemme. Le flot net f(A,B) est égal à la valeur du flot f.
Corollaire. La somme des flots sortants du sommet s est égale à la somme des flots entrants dans t.
s t
10/10
5/5
10/15
0/4
0/4
5/15
5/8
0/6
10/16
0/15
0/15 10/10
10/10 5/10 5/9
10 + 5 + 10 = 5 + 10 + 10
Preuve du théorème du
maxflow-mincut
Lemme. Pour tout flot f et toute coupure (A,B), la valeur du flot f est inférieure ou égal à la capacité de la coupure
s t
capacité = 10 + 8 + 16
10/10
5/5
13/15
0/4
0/4
2/15
8/8
3/6
13/16
0/15
0/15 10/10
10/10 8/10 8/9
|f| = 8 + 10 + 10
24 28
Preuve du théorème du
maxflow-mincut
Lemme. Pour tout flot f et toute coupure (A,B), la valeur du flot f est inférieure ou égal à la capacité de la coupure.
Preuve.
|f| = X
u2A,v2B
f(u, v) X
u2B,v2A
f(u, v) X
u2A,v2B
f(u, v) X
u2A,v2B
c(u, v) = cap(A, B)
le flot net est égal à
la valeur du flot 8e 2 A, f(e) 0 8e 2 A, f(e) c(e) capacité de la
coupure
Preuve du théorème du
maxflow-mincut
Lemme. Soit f un flot. Les trois propriétés suivantes sont équivalentes.
i) Il existe une coupure dont la capacité est égal à la valeur du flot.
ii) Le flot f est maximal.
iii) Il n’existe pas de chemin améliorant par rapport à f.
s t
10/10
5/5
13/15
0/4
0/4
2/15
8/8
3/6
13/16
0/15
0/15 10/10
10/10 8/10 8/9
Preuve du théorème du
maxflow-mincut
Lemme. Soit f un flot. Les trois propriétés suivantes sont équivalentes.
i) Il existe une coupure dont la capacité est égal à la valeur du flot.
ii) Le flot f est maximal.
iii) Il n’existe pas de chemin améliorant par rapport à f.
Preuve. [i) => ii)]
Soit (A,B) une coupure telle que cap(A,B)=|f|. Pour tout flot f’, sa valeur est inférieure à la capacité cap(A,B). Donc |f’| est
inférieure à |f|.
Donc f est maximal.
Preuve du théorème du
maxflow-mincut
Lemme. Soit f un flot. Les trois propriétés suivantes sont équivalentes.
i) Il existe une coupure dont la capacité est égal à la valeur du flot.
ii) Le flot f est maximal.
iii) Il n’existe pas de chemin améliorant par rapport à f.
Preuve. [ii) => iii)]
Contraposée : si il existe un chemin améliorant, alors f n’est pas maximal puisque le chemin permet d’augmenter la valeur du flot.
Preuve du théorème du
maxflow-mincut
Lemme. Soit f un flot. Les trois propriétés suivantes sont équivalentes.
i) Il existe une coupure dont la capacité est égal à la valeur du flot.
ii) Le flot f est maximal.
iii) Il n’existe pas de chemin améliorant par rapport à f.
Preuve. [iii) => i)]
Supposons l’absence de chemins améliorants et exhibons une coupure dont la capacité soit égal à |f|.
Preuve du théorème du maxflow-mincut
s t
10/10
5/5
13/15
0/4
0/4
2/15
8/8
3/6
13/16
0/15
0/15 10/10
10/10 8/10 8/9
s t
10
5
13
2 4
3 13
3 8 13
2 1 8
2 8
10
10 4 15
3 15
Preuve. [iii) => i)]
Supposons l’absence de chemins améliorants et exhibons une coupure dont la capacité soit égal à |f|.
Soit A l’ensemble des sommets u accessibles depuis s dans le graphe résiduel (vis à vis de f). Soit B le complémentaire de A.
Par définition, s appartient à A.
Comme il n’y pas de chemin améliorant, t appartient à B.
Tous les arc allant de B à A ont un flot nul, donc cap(A,B)= f(A,B) =|f|
Preuve du théorème du maxflow-mincut
s t
10/10
5/5
13/15
0/4
0/4
2/15
8/8
3/6
13/16
0/15
0/15 10/10
10/10 8/10 8/9
s t
10
5
13
2 4
3 13
3 8 13
2 1 8
2 8
10
10 4 15
3 15
Lemme. Soit f un flot. Les trois propriétés suivantes sont équivalentes.
i) Il existe une coupure dont la capacité est égal à la valeur du flot.
ii) Le flot f est maximal.
iii) Il n’existe pas de chemin améliorant par rapport à f.
Conséquences.
1. Puisque pour tout flot f et toute coupure (A,B), la valeur du flot f est inférieure ou égal à la capacité de la coupure, i) est équivalent à l’existence d’une coupure minimale et le théorème maxflow-mincut est démontré.
2. Un flot est maximal s’il n’existe plus de chemin améliorant, donc l’algorithme de Ford-Fulkerson est correct (s’il termine).
3. On peut construire une coupe minimale avec l’ensemble des
sommets u accessibles depuis s dans le graphe résiduel d’un flot maximal.
Preuve du théorème du
maxflow-mincut
Hypothèse. La capacité de chaque arc est un nombre entier.
Lemme. Chaque flot intermediaire de l’algorithme de Ford-Fulkerson a une valeur entière.
Preuve. Par récurrence sur le nombre d’étapes de l’algorithme.
Lemme. Le nombre de chemin améliorant construit est inférieure à la valeur du flot maximal.
Preuve. La valeur du flot augmente d’au moins 1 à chaque chemin. Chaque flot f a une valeur bornée par la capacité de la coupe minimale.
On en déduit que l’algorithme termine toujours sous cette hypothèse et que le flot maximum est un nombre entier.
Complexité :
Terminaison de l’algorithme de Ford-Fulkerson
au plus flot_max chemins construits une construction de chemin
= un parcours à partir de s
O(A · flot max)
Cas le pire. Existe-t-il un cas où le nombre maximum de chemins améliorants est considéré ?
Terminaison de l’algorithme de Ford-Fulkerson
s
t
0/100
0/1
0/100
0/100
0/100
Cas le pire. Existe-t-il un cas où le nombre maximum de chemins améliorants est considéré ?
Terminaison de l’algorithme de Ford-Fulkerson
s
t
1/100
1/1
0/100
0/100
1/100
Terminaison de l’algorithme de Ford-Fulkerson
s
t
1/100
0/1
1/100
1/100
1/100
Cas le pire. Existe-t-il un cas où le nombre maximum de chemins améliorants est considéré ?
Terminaison de l’algorithme de Ford-Fulkerson
s
t
2/100
1/1
1/100
1/100
2/100
Cas le pire. Existe-t-il un cas où le nombre maximum de chemins améliorants est considéré ?
Terminaison de l’algorithme de Ford-Fulkerson
s
t
2/100
0/1
2/100
2/100
2/100
Cas le pire. Existe-t-il un cas où le nombre maximum de chemins améliorants est considéré ?
Terminaison de l’algorithme de Ford-Fulkerson
s
t
N/100
0/1
N/100
N/100
N/100
… après 2N chemins améliorants ! Cas le pire. Existe-t-il un cas où le nombre maximum de chemins
améliorants est considéré ?
Terminaison de l’algorithme de Ford-Fulkerson
s
t
100/100
0/1
100/100
100/100
100/100
… après 200 chemins améliorants ! Cas le pire. Existe-t-il un cas où le nombre maximum de chemins
améliorants est considéré ?
Application
Définition. Un graphe (non-orienté) biparti est un graphe dont l’ensemble de sommet est partitioné en deux ensembles A et B tels que chaque arête ait une extrémité dans A et l’autre dans B.
Définition. Un couplage parfait est un sous ensemble des arêtes d’un graphe biparti tel que chaque sommet est incident à exactement une arête de cet ensemble.
Problème du couplage
parfait
Réduction. On peut résoudre le problème du couplage parfait en se ramenant à un problème de flot maximum.
Il existe un couplage maximal ssi le flot maximal vaut 5.
Problème du couplage parfait
s t
avec une capacité 1 pour chaque arc
Réduction. On peut résoudre le problème du couplage parfait en se ramenant à un problème de flot maximum.
Il existe un couplage maximal ssi le flot maximal vaut 5.
Problème du couplage parfait
s t
ici, le flot maximal vaut 4, donc il n’y a pas de
couplage parfait
Réduction. On peut résoudre le problème du couplage parfait en se ramenant à un problème de flot maximum.
Il existe un couplage maximal ssi le flot maximal vaut 5.
Problème du couplage parfait
s t
une coupe minimale donne des explications
Réduction. On peut résoudre le problème du couplage parfait en se ramenant à un problème de flot maximum.
Il existe un couplage maximal ssi le flot maximal vaut 5.
Problème du couplage parfait
aucune chance !