31.12.2013 Views

Cours 2: Flots et couplages

Cours 2: Flots et couplages

Cours 2: Flots et couplages

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!