Cours 2: Flots et couplages
Cours 2: Flots et couplages Cours 2: Flots et couplages
Cours 2: Flots et couplages • Flots et coupes • Algorithmes de calcul du flot maximal • Modélisation par flots • Couplages et graphes des augmentations • Mariages stables 1-1 Gilles Schaeffer INF-550-2: Flots et couplages
- Page 2 and 3: Réseau de transport et flots Donn
- Page 4 and 5: Les coupes d’un réseau de transp
- Page 6 and 7: Cours 2: Flots et couplages • Flo
- Page 8 and 9: Algorithme de Ford Fulkerson • In
- Page 10 and 11: Cours 2: Flots et couplages • Flo
- Page 12 and 13: Problème de l’expédition idéal
- Page 14 and 15: Cours 2: Flots et couplages • Flo
- Page 16 and 17: Couplages dans un graphe biparti Po
- Page 18 and 19: Intersection de matroïdes Données
- Page 20 and 21: Cours 2: Flots et couplages • Flo
- Page 22 and 23: Mariages stables, algorithme de Gal
<strong>Cours</strong> 2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong><br />
• <strong>Flots</strong> <strong>et</strong> coupes<br />
• Algorithmes de calcul du flot maximal<br />
• Modélisation par flots<br />
• Couplages <strong>et</strong> graphes des augmentations<br />
• Mariages stables<br />
1-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Réseau de transport <strong>et</strong> flots<br />
Données: Un graphe orienté G = (X, A),<br />
une valuation c : A → N, <strong>et</strong> 2 somm<strong>et</strong>s<br />
s <strong>et</strong> t avec d in (s) = 0 <strong>et</strong> dout(t) = 0.<br />
s<br />
2<br />
2<br />
1<br />
2<br />
2<br />
t<br />
• Les somm<strong>et</strong>s s <strong>et</strong> t sont la source <strong>et</strong> puit, c(a) la capacité de l’arc a.<br />
• Un flot est une application φ de A dans R + telle que<br />
- le flot en chaque arc a est inférieur à la capacité: φ(a) ≤ c(a)<br />
- pour tout somm<strong>et</strong> de X \ {s, t}, flot entrant = flot sortant<br />
La valeur du flot φ est le flot sortant de s (égal au flot entrant en t).<br />
Problème: Trouver un flot de valeur maximale.<br />
• Un flot φ est saturé si sur tout chemin de<br />
s à t il existe un arc a tel que φ(a) = c(a).<br />
s<br />
2<br />
1<br />
1<br />
1<br />
2<br />
t<br />
2-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Les coupes d’un réseau de transport<br />
• Une coupe est une partition de l’ensemble des somm<strong>et</strong>s en 2 parties<br />
disjointes, l’une contenant la source <strong>et</strong> l’autre le puit:<br />
Y ∪ Z = X, Y ∩ Z = ∅, s ∈ Y, t ∈ Z<br />
Y 2 3 Z<br />
• La capacité C(Y, Z) d’une coupe est la<br />
somme des capacités des arcs de Y à Z.<br />
11 s 5 t<br />
• Le flux de Y à Z dans un flot φ est<br />
φ(Y, Z) =<br />
X<br />
2<br />
4 2<br />
φ(u)<br />
u∈Y ×Z<br />
C(Y, Z) = 8<br />
<strong>et</strong> le flux orienté de la coupe (Y, Z) est<br />
∆(Y, Z) = φ(Y, Z) − φ(Z, Y ).<br />
φ(Y, Z) = 5<br />
∆(Y, Z) = 3<br />
Tout flot a pour valeur V φ = φ({s}, X \ {s}) = ∆({s}, X \ {s}).<br />
Lemme. Plus généralement V φ = ∆(Y, Z) pour toute coupe.<br />
Preuve par récurrence sur |Y |: Y ′ = Y ∪ {y}, i + i ′ = o + o ′ .<br />
3-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Les coupes d’un réseau de transport<br />
• Une coupe est une partition de l’ensemble des somm<strong>et</strong>s en 2 parties<br />
disjointes, l’une contenant la source <strong>et</strong> l’autre le puit:<br />
Y ∪ Z = X, Y ∩ Z = ∅, s ∈ Y, t ∈ Z<br />
Y<br />
• La capacité C(Y, Z) d’une coupe est la<br />
somme des capacités des arcs de Y à Z.<br />
s<br />
• Le flux de Y à Z dans un flot φ est<br />
φ(Y, Z) =<br />
X<br />
φ(u)<br />
Y Y ′<br />
u∈Y ×Z<br />
i<br />
<strong>et</strong> le flux orienté de la coupe (Y, Z) est<br />
o<br />
∆(Y, Z) = φ(Y, Z) − φ(Z, Y ).<br />
y<br />
Tout flot a pour valeur V φ = φ({s}, X \ {s}) = ∆({s}, X \ {s}).<br />
2 3<br />
Lemme. Plus généralement V φ = ∆(Y, Z) pour toute coupe.<br />
11 5 2<br />
4 2<br />
o ′ i ′<br />
Preuve par récurrence sur |Y |: Y ′ = Y ∪ {y}, i + i ′ = o + o ′ .<br />
Z<br />
t<br />
3-2<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Le graphe des augmentations d’un flot<br />
Le graphe des augmentations G φ :<br />
• Les somm<strong>et</strong>s de G φ sont ceux de G,<br />
• Tout arc a = (x, y) de G reste dans G φ si φ(a) < c(a).<br />
• L’opposé (y, z) de l’arc a = (x, y) de G est dans G φ si φ(a) > 0.<br />
s<br />
5<br />
3<br />
3<br />
3<br />
2<br />
2<br />
1<br />
2<br />
4 4<br />
3<br />
2<br />
t<br />
s<br />
5<br />
3<br />
2<br />
3<br />
1<br />
2<br />
0<br />
2<br />
3 4<br />
3<br />
2<br />
t<br />
s<br />
5 3<br />
3<br />
2<br />
1<br />
2<br />
0<br />
2<br />
3 4<br />
3<br />
2<br />
t<br />
Lemme. S’il existe un chemin de s à t dans G φ , le flot peut être amélioré.<br />
Lemme. S’il n’existe pas de chemin de s à t dans G φ , alors il existe une<br />
coupe (Y, Z) telle que c(Y, Z) = V φ .<br />
Théorème. Valeur du flot maximal = Capacité de la coupe minimale.<br />
4-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
<strong>Cours</strong> 2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong><br />
• <strong>Flots</strong> <strong>et</strong> coupes<br />
• Algorithmes de calcul du flot maximal<br />
• Modélisation par flots<br />
• Couplages <strong>et</strong> graphes des augmentations<br />
• Mariages stables<br />
5-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Algorithme de Ford Fulkerson<br />
• Initialiser avec un flot quelconque (nul par exemple).<br />
• Tant qu’il existe un chemin dans le graphe des augmentations,<br />
augmenter le flot.<br />
Théorème. L’algorithme de Ford Fulkerson constuit un flot maximal.<br />
Les somm<strong>et</strong>s atteignables depuis s dans le graphe des augmentations<br />
forment une coupe minimale. Complexité O(mΦ)<br />
Remarques. • Le flot maximal obtenu est à valeur entière.<br />
• On a pas spécifié quel chemin on choisit à chaque étape.<br />
s<br />
N<br />
N<br />
1<br />
N<br />
N<br />
t<br />
s<br />
i<br />
i<br />
0<br />
i<br />
i<br />
t<br />
s<br />
i + 1<br />
i<br />
1<br />
i<br />
t<br />
i + 1<br />
6-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Algorithme de Ford Fulkerson<br />
• Initialiser avec un flot quelconque (nul par exemple).<br />
• Tant qu’il existe un chemin dans le graphe des augmentations,<br />
augmenter le flot.<br />
Théorème. L’algorithme de Ford Fulkerson constuit un flot maximal.<br />
Les somm<strong>et</strong>s atteignables depuis s dans le graphe des augmentations<br />
forment une coupe minimale. Complexité O(mΦ)<br />
Remarques. • Le flot maximal obtenu est à valeur entière.<br />
• On a pas spécifié quel chemin on choisit à chaque étape.<br />
s<br />
N<br />
N<br />
1<br />
N<br />
N<br />
t<br />
s<br />
i<br />
i<br />
0<br />
i<br />
i<br />
t<br />
s<br />
i + 1<br />
i<br />
1<br />
i<br />
t<br />
i + 1<br />
6-2<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Algorithme de Dinic, Edmonds <strong>et</strong> Karp<br />
• Effectuer Ford-Fulkerson en choisissant à chaque étape le premier<br />
chemin d’augmentation obtenu par recherche en largeur dans G φ .<br />
G φ<br />
s<br />
1<br />
2<br />
3<br />
4<br />
Théorème. L’algorithme DEK effectue au plus O(nm 2 ) opérations si<br />
le graphe G à n somm<strong>et</strong>s <strong>et</strong> m arcs.<br />
Preuve. • Lorsqu’un chemin d’augmentation est utilisé, le flot devient nul<br />
ou maximal sur au moins l’une des arêtes: celle-ci est r<strong>et</strong>ournée.<br />
• Quand l’arc (x, y) du chemin se r<strong>et</strong>ourne, les distances à s ne peuvent<br />
qu’augmenter. Si (y, x) revient sur le chemin ce sera plus loin.<br />
• Donc chacun des m arcs peut être r<strong>et</strong>ourné au plus n fois.<br />
• Le nombre de chemins d’augmentation utilisés est donc O(nm).<br />
• Le coût de la recherche d’un chemin d’augmentation est O(m).<br />
t<br />
autrement dit on choisit un plus<br />
court chemin d’augmentation.<br />
7-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
<strong>Cours</strong> 2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong><br />
• <strong>Flots</strong> <strong>et</strong> coupes<br />
• Algorithmes de calcul du flot maximal<br />
• Modélisation par flots<br />
• Couplages <strong>et</strong> graphes des augmentations<br />
• Mariages stables<br />
8-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Répartition d’approvisionnement<br />
Données: • les fournisseurs A 1 , . . . , A p , avec A i de capacité a i .<br />
• les clients B 1 , . . . , B q , le client B i demande une quantité b i .<br />
• les contraintes: B j ne peut être livré que par les {A i } i∈Cj .<br />
Problème: maximiser l’approvisionnement mutuel.<br />
Modélisation en flot: somm<strong>et</strong>s X = {s, t, A 1 , . . . , A p , B 1 , . . . , B q }<br />
s<br />
a 4 B 3 b 3<br />
A 3 b 2<br />
b 1<br />
a 3<br />
a 2<br />
a 1<br />
A 4 B 2<br />
A 2<br />
A 1<br />
B 1<br />
t<br />
arête (A i , B j ) si i ∈ C j<br />
de capacité ∞.<br />
arête (s, A i ) de capacité a i<br />
arête (B j , t) de capacité b j<br />
Approvisionnement mutuel maximal = flot maximal dans ce graphe.<br />
9-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Problème de l’expédition idéale<br />
Données: • les instruments A 1 , . . . , A p , avec A i de coût c i .<br />
• des expériences B 1 , . . . , B q à faire, B i rapporte b i .<br />
• pour pouvoir effectuer B j il faut avoir {A i } i∈Cj .<br />
Problème: maximiser le gain de l’expédition.<br />
Modélisation en flot: on utilise le même graphe<br />
s<br />
a 4 B 3 b 3<br />
A 3 b 2<br />
b 1<br />
a 3<br />
a 2<br />
a 1<br />
A 4 B 2<br />
A 2<br />
t<br />
une coupe minimale doit<br />
éviter les arcs (A i , B j )<br />
une expédition ⇔ une coupe (Y, Z):<br />
Z = {A i emportés}∪{B i effectués}∪{z}<br />
A 1<br />
B 1<br />
c(Y, Z) = P A i ∈Z a i + P B i /∈Z b j<br />
Gain maximal = P b j − c(Y, Z) pour la coupe de capacité minimale.<br />
10-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Résistance aux pannes<br />
Données: Un graphe G, non orienté.<br />
Problème: Nb minimum d’arêtes à r<strong>et</strong>irer pour déconnecter G ?<br />
Modélisation en flot: le nb min d’arêtes à enlever pour séparer deux<br />
somm<strong>et</strong>s s <strong>et</strong> t de G est la capacité de la coupe minimale dans le graphe<br />
symétrique associé avec capacité 1 sur chaque arête<br />
s<br />
s<br />
t<br />
t<br />
On trouve la résistance aux pannes en appliquant un calcul de flot au<br />
réseau (R(G), s, t) pour chaque somm<strong>et</strong> t du graphe, avec s fixé<br />
arbitrairement.<br />
11-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
<strong>Cours</strong> 2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong><br />
• <strong>Flots</strong> <strong>et</strong> coupes<br />
• Algorithmes de calcul du flot maximal<br />
• Modélisation par flots<br />
• Couplages <strong>et</strong> graphes des augmentations<br />
• Mariages stables<br />
12-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Couplages dans un graphe non orienté<br />
Données: un graphe non orienté (ou symétrique)<br />
Un couplage est un ensemble d’arêtes sans extrémités comunes<br />
Problème: déterminer un couplage de cardinalité maximale.<br />
Un chemin alternant alterne les arêtes libres<br />
<strong>et</strong> couplées.<br />
Théorème. Couplage maximum ⇔ pas de<br />
chemins alternants entre 2 somm<strong>et</strong>s libres.<br />
maximal pour l’inclusion<br />
Preuve de la réciproque: comparer un couplage maximal (sans chemin<br />
augmentant) avec un couplage optimum en les superposant.<br />
Théorème (Edmonds 1965) On peut trouver les chemins alternants en<br />
temps polynomial.<br />
13-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Couplages dans un graphe biparti<br />
Pour les graphes bipartis, on se ramène à un problème de flot:<br />
1. Décrire le problème de flots associé<br />
G<br />
⇔<br />
s<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
t<br />
R(G)<br />
capacités 1 ou ∞<br />
2. Montrer l’équivalence entre pbl initial <strong>et</strong> maximisation du flot<br />
ici: bijection entre <strong>couplages</strong> sur G <strong>et</strong> flots à valeur entière sur R(G)<br />
⇔<br />
1<br />
1<br />
1<br />
telle que le cardinal du couplage maximum est égal au flot maximum.<br />
1<br />
1<br />
1 1<br />
démarche à r<strong>et</strong>enir!!<br />
14-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Couplages <strong>et</strong> matroïdes<br />
Soit G = (Y ∪ Z, E) un graphe biparti.<br />
La famille F des parties couplables de Y est l’ensemble des Y ′ ⊂ Y<br />
tels qu’il existe un couplage parfait entre Y ′ <strong>et</strong> un Z ′ ⊂ Z.<br />
Lemme. F est un matroïde.<br />
Preuve. Si |Y ′′ | > |Y ′ | on superpose les <strong>couplages</strong> associés à Y ′ <strong>et</strong> Y ′′<br />
pour trouver une chaine alternante qui perm<strong>et</strong> d’étendre Y ′ .<br />
Corollaire (<strong>Cours</strong> 1). Les transversaux d’un ensemble de parties<br />
forment un matroïde.<br />
Remarques. • La famille des <strong>couplages</strong> ne forme pas un matroïde.<br />
mais c’est l’intersection de 2 matroïdes: les ensembles d’arêtes sans<br />
extrémité commune dans Y <strong>et</strong> dans Z respectivement.<br />
• Par augmentation on a trouvé un élément max de c<strong>et</strong>te intersection.<br />
15-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Intersection de matroïdes<br />
Données: un graphe à n somm<strong>et</strong>s dont les arêtes sont partitionnées<br />
en E 1 , . . . , E k sous-ensembles disjoints (couleurs).<br />
Problème: Trouver une forêt multicolore maximale.<br />
Remarque: ces forêts sont dans l’intersection de 2 matroïdes.<br />
Algorithme glouton: T := ∅; tant qu’il existe une arête e d’une couleur<br />
n’apparaissant pas dans T , <strong>et</strong> ne créant pas de cycle, faire T := T ∪ {e}.<br />
Ça ne donne pas l’optimum !<br />
16-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
16-2<br />
Intersection de matroïdes<br />
Données: un graphe à n somm<strong>et</strong>s dont les arêtes sont partitionnées<br />
en E 1 , . . . , E k sous-ensembles disjoints (couleurs).<br />
Problème: Trouver une forêt multicolore maximale.<br />
Remarque: ces forêts sont dans l’intersection de 2 matroïdes.<br />
Algorithme Améliorant. Initialiser T := ∅ <strong>et</strong> itérer:<br />
• Soit D(T ) le graphe d’amélioration (E, X) biparti avec arêtes:<br />
— de a ∈ T à b ∈ E \ T si T − a + b est sans cycle<br />
— de b ∈ E \ T à a ∈ T si T − a + b est multicolore<br />
• Soit E 1 = {b | T + b sans cycle}, E 2 = {b | T + b multicolore}<br />
• Si D(T ) a un chemin C de E 1 \ T à E 2 \ T<br />
faire T := T ∆C min où C min est un plus court tel chemin.<br />
Théorème. L’algorithme Améliorant trouve l’indépendant maximal<br />
dans l’intersection de 2 matroïdes.<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
<strong>Cours</strong> 2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong><br />
• <strong>Flots</strong> <strong>et</strong> coupes<br />
• Algorithmes de calcul du flot maximal<br />
• Modélisation par flots<br />
• Couplages <strong>et</strong> graphes des augmentations<br />
• Mariages stables<br />
17-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Mariages stables<br />
Données: • Deux ensembles X = {x 1 , . . . , x p } <strong>et</strong> Y = {y 1 , . . . , y p }<br />
• Les listes de préférences F i de x i <strong>et</strong> G j de y j pour tous i, j.<br />
• Le graphe des mariages est le graphe biparti sur X ∪ Y avec<br />
une arête (x i , y j ) si x i ∈ G j <strong>et</strong> y j ∈ F i .<br />
• Un couplage dans ce graphe décrit un (multi)mariage acceptable.<br />
Si x est couplé à y on note α(x) = y <strong>et</strong> β(y) = x.<br />
exemple: X = {x 1 , x 2 , x 3 } <strong>et</strong> Y = {y 1 , y 2 , y 3 }<br />
F 1 y 2 y 1 y 3 G 1 x 1 x 3 x<br />
(x 1 , y 1 ), (x 2 , y 2 ), (x 3 , y 3 )<br />
2<br />
instable: x 1 ↔ y 2<br />
F 2 y 1 y 3 y 2 G 2 x 3 x 1 x 2<br />
(x<br />
F 3 y 1 y 2 y 3 G 3 x 1 x 3 x 1 , y 1 ), (x 2 , y 3 ), (x 3 , y 2 )<br />
2<br />
stable<br />
18-1<br />
• Un mariage stable est un couplage tel que si x <strong>et</strong> y ne sont<br />
pas couplés alors x préfère α(x) à y ou y préfère β(y) à x.<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
Mariages stables, algorithme de Gale Shapley.<br />
• Initialiser α(x i ) au premier élément de la liste F i , <strong>et</strong> β(y) indéfini.<br />
• Itérer:<br />
1. pour chaque y j choisir l’élément x i le plus intéressant dans G j<br />
parmi les x i tels que α(x i ) = y j <strong>et</strong> poser β(y j ) = x i .<br />
2. pour chaque x i<br />
– s’il existe y j tel que β(y j ) = x i , alors α(x i ) = y j ,<br />
– sinon, si α(x i ) n’est pas le dernier dans F i , descendre d’un rang<br />
– sinon laisser α(x) indéfini.<br />
Théorème. Si les toutes les listes de préférences sont complètes,<br />
l’algorithme de Gale-Shapley constuit un mariage stable.<br />
19-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>
<strong>Cours</strong> 2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong><br />
• <strong>Flots</strong> <strong>et</strong> coupes<br />
• Algorithmes de calcul du flot maximal<br />
• Modélisation par flots<br />
• Couplages <strong>et</strong> graphes des augmentations<br />
• Mariages stables<br />
R<strong>et</strong>enir: Modélisation par flots <strong>et</strong> coupes,<br />
algorithmes de Ford-Fulkerson/Edmonds Karp,<br />
dualité MaxFlow=MinCut<br />
20-1<br />
Gilles Schaeffer<br />
INF-550-2: <strong>Flots</strong> <strong>et</strong> <strong>couplages</strong>