Vous êtes sur la page 1sur 16

Cours d'optimisation combinatoire

Introduction au problme du flot maximum


Renaud Sirdey (renaud.sirdey@cea.fr) Commissariat lnergie atomique, Saclay Cours doptimisation combinatoire (RO03), UTC

Objectifs de ce cours
> Introduire les notions de rseau de transport et de flot. > Introduire la notion de flot complet sur un rseau de transport. > Poser le problme du flot maximum et montrer comment le rsoudre laide de la programmation linaire et de lalgorithme de Ford-Fulkerson. > Les problmes de flot (plutt dans leurs versions pondres) ont de nombreuses applications industrielles que nous verrons dans un prochain cours.

RO03 - 2011

Cours d'optimisation combinatoire

Notions de rseau de transport et de s-t-flot > Un rseau de transport R=(G,u,s,t) consiste en la donne :
Dun graphe orient G=(V,A) (sans boucle). Dune fonction de capacit u : AR+. De deux sommets particuliers s et t de V (resp. appels source et puit).

> Soit R=(G,u,s,t) un rseau de transport, on appelle s-t-flot sur R une fonction f : AR+ telle que :
f(a) u(a), pour tout a A. a (v) f(a) = a +(v) f(a), pour tout v V \ {s,t} (contraintes de Kirchoff).
On peut poser (t,s) A et u((t,s)) = pour tendre leur validit V.

On pose valeur(f) = a +(s) f(a) - a (s) f(a).

Exemple
> En trois dpts A, B, C, on dispose respectivement de 20, 35 et 10 tonnes de marchandises. On a des demandes de 25, 20 et 20 tonnes aux destinations D, E et F. Il existe des possibilits de transport l'aide de camions. Ces possibilits sont rapportes dans le tableau suivant :
D E F A 15 10 0 B 15 5 5 C 5 0 10

RO03 - 2011

Cours d'optimisation combinatoire

Rseau de transport associ A 20 s 35 10 C 10 15 B 5 5 5 10 F E 15 D 25 20 20 t

Notion de s-t-flot complet, construction


> Soit R=(G,u,s,t) un rseau de transport, un s-t-flot f sur R est dit complet si pour tout P=((s,v1),(v1,v2),,(vn-1,vn),(vn,t)), un s-tchemin, il existe a P tel que f(a) = u(a).
Autrement dit, tout chemin allant de s t possde au moins un arc satur par le flot. Un flot complet nest pas ncessairement maximum.

> Construction dun s-t-flot complet :


Poser f := 0. Rpter
Choisir un s-t-chemin P tel que a P on a f(a)<u(a). Si un tel chemin nexiste pas alors fin. Sinon pour tout a P faire f(a) := f(a) + mina P u(a)-f(a).

RO03 - 2011

Cours d'optimisation combinatoire

Exemple A 0/2 s 0/7 0/2 C 0/5 0/2 B 0/3 0/2 0/8 F E 0/6 D 0/2 0/5 0/7 t

Exemple A 0/2 s 0/7 0/2 C 0/5 0/2 B 0/3 0/2 0/8 F E 0/6 D 0/2 0/5 0/7 t

P = ((s,A),(A,D),(D,t)), mina P u(a)-f(a)=2


8

RO03 - 2011

Cours d'optimisation combinatoire

Exemple A 2/2 s 0/7 0/2 C 0/5 0/2 B 0/3 0/2 0/8 F E 2/6 D 2/2 0/5 0/7 t

Exemple A 2/2 s 0/7 0/2 C 0/5 0/2 B 0/3 0/2 0/8 F E 2/6 D 2/2 0/5 0/7 t

P = ((s,B),(B,E),(E,t)), mina P u(a)-f(a)=3


10

RO03 - 2011

Cours d'optimisation combinatoire

Exemple A 2/2 s 3/7 0/2 C 0/5 0/2 B 3/3 0/2 0/8 F E 2/6 D 2/2 3/5 0/7 t

11

Exemple A 2/2 s 3/7 0/2 C 0/5 0/2 B 3/3 0/2 0/8 F E 2/6 D 2/2 3/5 0/7 t

P = ((s,C),(C,E),(E,t)), mina P u(a)-f(a)=2


12

RO03 - 2011

Cours d'optimisation combinatoire

Exemple A 2/2 s 3/7 2/2 C valeur(f) = 7


13

2/6 0/5

D 2/2 E 5/5 0/7 F t

0/2 B 3/3 2/2 0/8

Le problme du s-t-flot maximum


> Soit R=(G,u,s,t) un rseau de transport, le problme du s-t-flot maximum consiste trouver un s-t-flot f* tel que valeur(f*) soit maximum.
I.e., trouver f* t. q. pour tout s-t-flot f sur R on ait valeur(f) valeur(f*).

14

RO03 - 2011

Cours d'optimisation combinatoire

Approche par programmation linaire


> Formulation du problme :
Maximiser valeur(f) = a +(s) f(a) - a (s) f(a), sous les contraintes, a (v) f(a) = a +(v) f(a), v V \ {s,t}, f(a) u(a), a A, f(a) 0, a A.

> Il sagit donc dun programme linaire : min{cTx : Ax b}.


Avec c Rn, A Rmxn, b Rn.

> Remarque : le systme dingalits linaires ci-dessus possde toujours au moins une solution.

15

Consquences
> Le problme du s-t-flot maximum est un problme polynomial.
Consquence direct du thorme de Khachiyan.

> On peut utiliser nimporte quel algorithme pour la programmation linaire (par ex. lalgorithme du simplexe) afin de rsoudre ce problme.
En termes de complexit nous allons faire mieux laide dalgorithmes combinatoires . En pratique, par contre, ce nest pas forcment idiot, mais cela devient une question de gnie logiciel.

16

RO03 - 2011

Cours d'optimisation combinatoire

Notion de graphe rsiduel


> Soit G=(V,A) un graphe orient (sans boucle), on dfinit G=(V,AA) tel que si a=(v,w)A alors a=(w,v)A.
Remarque : G peut contenir des arcs parallles alors que G nen contient pas.

> Soit un rseau de transport R=(G,u,s,t) et un s-t-flot f sur R, on dfinit la fonction de capacit rsiduelle uf : AAR+ t. q. :
uf(a) = u(a) f(a), pour tout aA. uf(a) = f(a), pour tout a=(v,w)A et a=(w,v)A.

> On appelle graphe rsiduel associ f le graphe Gf = (V,{aAA : uf(a) > 0}).

17

Notion de chemin f-augmentant


> Soit R=(G,u,s,t) un rseau de transport, f un s-t-flot sur R, P un chemin (ou un circuit) sur Gf et > 0, augmenter f de selon P signifie faire :
f(a) := f(a) + si a A. f(a) := f(a) si a A.

> On appelle chemin f-augmentant, tout s-t-chemin dans le graphe rsiduel Gf.

18

RO03 - 2011

Cours d'optimisation combinatoire

Lalgorithme de Ford-Fulkerson
> Entre : R=(G,u,s,t) un rseau de transport. > Sortie : un s-t-flot f de valeur maximum. > nonc :
Poser f := 0. Rpter :
Choisir un chemin f-augmentant P. Si un tel chemin nexiste pas alors fin (f est alors maximum). Augmenter f de =minaP uf(a) selon P.

19

Exemple (prcdent) A 2/2 s 3/7 2/2 C 0/5 0/2 B 3/3 2/2 0/8 F E 2/6 D 2/2 5/5 0/7 t

20

RO03 - 2011

10

Cours d'optimisation combinatoire

Exemple (prcdent) A 2/2 s 3/7 2/2 C 0/5 0/2 B 3/3 2/2 0/8 F E 2/6 D 2/2 5/5 0/7 t

P = ((s,B),(B,D),(D,A),(A,E),(E,C),(C,F),(F,t)), mina P uf(a) =2


21

Exemple (prcdent) A 2/2 s 5/7 2/2 C 2/5 2/2 B 3/3 0/2 2/8 F E 0/6 D 2/2 5/5 2/7 t

valeur(f) = 9, f est maximum


22

RO03 - 2011

11

Cours d'optimisation combinatoire

vous A 1/1 1/1 1/1 1/1 0/1 B 1

1/1 2 1/1 1/ 0/ 3 1/1 C 1/ 0/1 0/ 4 D 1/1 0/ 5 E

1/ 1/ 0/

Transformez le flot complet ci-dessus en flot maximum.


23

Retour sur le problme du couplage biparti de cardinalit maximum > Mettre ce problme sous la forme dun problme de flot maximum.

24

RO03 - 2011

12

Cours d'optimisation combinatoire

Retour sur le problme du couplage biparti de cardinalit maximum > Mettre ce problme sous la forme dun problme de flot maximum.

1 s 1 1 1 1 1
25

1 1 1 1 1 1

Lemme des contraintes de Kirchoff gnralises > Soit R=(G,u,s,t) un rseau de transport et f un s-t-flot sur R alors pour tout X V \ {s,t} on a : a (X) f(a) = a +(X) f(a). > Preuve :
Pour tout v X on a a (v) f(a) - a +(v) f(a) = 0, do v X (a (v) f(a) - a +(v) f(a)) =0. Or -(v)= -(v) -(X) -(v) \ -(X) et -(v)= +(v) +(X) +(v) \ +(X), v X (a (v)(X) f(a) - a +(v)+(X) f(a)) = a (X) f(a) - a +(X) f(a) et v X (a (v)\(X) f(a) - a +(v)\+(X) f(a)) = a A(X) f(a) - a A(X) f(a) = 0.

26

RO03 - 2011

13

Cours d'optimisation combinatoire

Lemme
> Soit R=(G,u,s,t) un rseau de transport et f un s-t-flot sur R alors pour tout X V t. q. s X et t X on a :
(a) valeur(f) = a +(X) f(a) - a (X) f(a). (b) valeur(f) a +(X) u(a).

> Preuve :
(a) : analogue la preuve du lemme des contraintes de Kirchoff gnralises. (b) : consquence triviale de (a) et de 0 f(a) u(a).

27

Thorme
> Soit R=(G,u,s,t) un rseau de transport, un s-t-flot f sur R est maximum si et seulement si il nexiste pas de chemin faugmentant. > Preuve :
Ncessit : sil existe un chemin f-augmentant alors lalgorithme de FordFulkerson fourni un flot de plus grande valeur et donc f nest pas maximum. Suffisance : sil ny a pas de chemin f-augmentant t nest (par dfinition) pas atteignable depuis s dans Gf. Soit Y lensemble des sommets atteignables depuis s dans Gf. Par dfinition de Gf on a f(a)=u(a) (car uf(a)=u(a)-f(a)=0) pour tout a de +G(Y) et f(a)=0 (car uf(a)=f(a)=0) pour tout a de -G(Y). Le lemme prcdent (partie (a)) implique
valeur(f) = a +

et la partie (b) permet de conclure.


28

G(Y)

u(a),

RO03 - 2011

14

Cours d'optimisation combinatoire

Lien avec le problme de la coupe minimum > Soit G=(V,A) un graphe orient, C A est une s-t-coupe sur G si G=(V,A \ C) ne contient pas de s-t-chemin.
On dfinit galement capa(C) = a C u(a).

> Thorme : soit R=(G,u,s,t) un rseau de transport, la valeur maximum dun s-t-flot sur R est gal la capacit minimum dune s-t-coupe. > Preuve :
Dans la preuve du thorme prcdent nous avons construit une s-t-coupe, +(Y), dont la capacit est gale la valeur dun flot maximum, f. toute s-t-coupe minimale C on peut associer X V t. q. s X, t X et C=+(X) Or (lemme prcdent), on a capa(+(X)) = a +(X) u(a) valeur(f).
29

Remarques sur lintgrit


> Corollaire : soit R=(G,u,s,t) un rseau de transport avec u : A Z+, alors il existe un s-t-flot maximum valeurs entires et lalgorithme de Ford-Fulkerson termine avec un tel flot. > Preuve :
Lorsque la fonction de capacit est valeurs entires =minaP uf(a) est entier.

> Remarque : cest aussi le cas des solutions du PL prcdent car les matrices associes aux problmes de flot sont totalement unimodulaires (i.e., tous leurs sous-dterminants sont 0, +1 ou -1).

30

RO03 - 2011

15

Cours d'optimisation combinatoire

Remarques algorithmiques
> Pour obtenir des algorithmes efficaces, il convient de ne pas choisir le chemin f-augmentant arbitrairement.
Par ex. avec des capacits irrationnelles, lalgorithme tel que nous lavons dcrit ne termine pas forcment

> Par ex. dans lalgorithme dEdmonds-Karp on choisit le plus court des chemins f-augmentant.
Thorme : lalgorithme dEdmonds-Karp rsout le problme du s-t-flot maximum en O(m2n).

> Dautres algorithmes existent, par ex. lalgorithme de GolbergTarjan qui rsout le problme en O(n3).

31

RO03 - 2011

16