• Aucun résultat trouvé

Énoncé du problème général SoitGun graphe orienté et connexe

®On suppose qu’il existe un unique sommet s, appelé source, où n’arrive aucun arc

et qu’il existe un unique sommet t, appelé terminal, d’où ne part aucun arc.

®À chaque arc (u, v) est associé un nombre c(u, v) 0, appelé capacité de l’arc ; s’il

n’y a pas d’arc entre deux sommets u et v, on pose c(u, v) = 0.

®Un flot est la donnée pour chaque arc (u, v) d’un nombre f (u, v) 0 satisfaisant les conditions :

i)f (u, v) c(u, v) pour tout arc (u, v).

ii)Siaest un sommet différent deset det, alors

arc (v,a)f (v, a)=

arc (a,u)f (a, u). La condition (ii) exprime la loi de conservation : en tout sommet différent de la source et du terminal, le flux entrant est égal au flux sortant.

®Lavaleur d’un flotf est la quantitéval(f )=

arc (s,u)f (s, u), somme des flux issus de la source. Il résulte de la loi de conservation que l’on a aussival(f )=

arc (v,t)f (v, t). La valeur d’un flot ne peut pas excéder la somme des capacités des arcs aboutissant au terminal, ni celle des arcs issus de la source.

Problème : trouver sur G un flot dont la valeur est la plus grande possible.

Un tel flot s’appelle unflot maximum.

La recherche d’un flot maximum se rencontre dans la plupart des questions relatives aux réseaux de distribution, notamment en télécommunication.

Exemple. Reprenons le graphe de l’exemple présenté en introduction. Sur la figure suivante, nous indiquons à coté de chaque arc un couple capacité, flux : pour l’arc

(s, a), on a ainsi c(s, a) = 3 et f (s, a) = 2. C’est un exemple de flot ; sa valeur est

val(f ) = f (s, a) + f (s, b) = 4 = f (b, t) + f (d, t). a b c d t s (1, 0) (1, 1) (2, 1) (3, 2) (3, 3) (4, 1) (4, 2) (4, 2) (5, 0) figure2

Procédé d'augmentation d'un flot

Supposons que f est un flot (par exemple f (u, v) = 0 pour tout arc (u, v)).

Rappelons qu’un chemin de G est une suite de sommets adjacents deux à deux dif-férents. Dans un chemin de G, il y a en général des arcs parcourus dans le sens de leur orientation et des arcs parcourus dans l’autre sens ; les premiers sont ditsdirects,

les autres sontindirects. Par exemple, dans le cas du graphe de la figure1, le chemin

(s, a, b, c, d, t) a pour arcs directs(s, a), (a, b), (c, d) et (d, t) et l’arc (c, b) est indirect. Supposons queγ est un chemin de svers tdont tous les arcs sont directs et vérifient

f (u, v) < c(u, v). Si p est le minimum des différences c(u, v)− f(u, v) le long de γ, on peut augmenter le flot de la valeur p sur tous les arcs du chemin, car la loi de conservation sera encore satisfaite après cette opération.

Par exemple, sur la figure 2, on peut augmenter le flot de 1 le long du chemin

(s, c, a, b, d, t); le résultat est montré figure 3.

a b c d t s (1, 1) (1, 1) (2, 1) (3, 2) (3, 3) (4, 2) (4, 3) (4, 3) (5, 1) figure3

Plus généralement, nous dirons qu’un chemin estnon saturé si l’on af (u, v) < c(u, v)

pour tous les arcs directs et f (u, v) > 0 pour tous les arcs indirects.

Supposons queγ est un chemin non saturé de sverst. Pour tout arcαdeγ, on pose

p(α) = c(α)− f(α) si αest direct f (α) si αest indirect. On définit p(γ) = min arc α de γ{p(α)}

qui est un nombre strictement positif puisque γ est non saturé. Pour chaque arc du graphe, on pose

ˆ

f (α) = f (α) + p(γ) si α est un arc direct de γ

ˆ

f (α) = f (α)− p(γ) si α est un arc indirect deγ

ˆ

f (α) = f (α) si α n’est pas un arc de γ.

On vérifie facilement que fˆest encore un flot et que l’on a val( ˆf ) = val(f ) + p(γ). Puisque p(γ) est strictement positif, on a val( ˆf ) > val(f ).

Pour le flotf de la figure 3, le chemin γ = (s, a, b, c, d, t) est non saturé : en effet, sur les arcs directs, le flot est strictement inférieur à la capacité et sur l’arc indirect(c, b), le flot est strictement positif. On a p(s, a) = p(a, b) = p(c, b) = p(c, d) = 1, p(d, t) = 2, doncp(γ) = 1. On peut donc augmenter le flot de 1sur les arcs directs (s, a), (a, b),

(c, d) et (d, t) et le diminuer de 1 sur (c, b) : on obtient le flot fˆde la figure 4.

a b c d t s (1, 1) (1, 0) (2, 2) (3, 3) (3, 3) (4, 3) (4, 3) (4, 4) (5, 1) figure4

Recherche de chemins non saturés

Pour chercher des chemins non saturés, on utilise un procédé de marquage successif des sommets du graphe. Voici la règle du marquage.

®La source s reçoit pour marque (−, ∞), où le signe représente un nombre très grand par rapport aux capacités des arcs du graphe.

®Supposons que le sommet u a été marqué et que v est un sommet non marqué adjacent à u.

marquage en avant :si l’arc orienté est (u, v) et si f (u, v) < c(u, v), on donne à

v la marque (u+, pv), où pv= min{pu, c(u, v)− f(u, v)}.

marquage en arrière :si l’arc orienté est (v, u) et si f (v, u) > 0, on donne à v

la marque (u, pv), où pv= min{pu, f (v, u)}.

Quand un sommet v a été marqué, on peut remonter jusqu’à la source les prédéces-seurs dev dans le marquage : en effet, si la marque de v contientu+ ouu, c’est que

le marquage de u a immédiatement précédé celui de v. Cela détermine un chemin

(s = a0, a1, a2, . . . , ak = v)ai+1 a été marqué à partir de ai. Par construction, la marquepv est strictement positive. Siv =t, on a obtenu un chemin non saturé desàt.

Méthode de recherche d'un flot maximum

Dans une première phase, on marque les sommets successivement en partant de la source s. Cette phase se termine lorsque le terminal t reçoit une marque ou bien lorsqu’aucun sommet ne peut plus recevoir de marque.

Si t a été marqué, on a trouvé un chemin γ non saturé de s à t :

®on augmente alors le flot de la quantité p(γ), minimum des marques pv, où v

parcourt les sommets de γ : on a donc simplement p(γ) = pt.

®On supprime ensuite toutes les marques sauf celle de s, puis on recommence le marquage.

®S’il n’y a plus de sommet à marquer et si t n’a pas été marqué, le flot est maxi-mum, du moins dans le cas où les capacités ont des valeurs entières : dans ce cas en effet, le flot augmente, à partir du flot nul, par valeurs entières, donc la valeur des flots successifs finit par être stationnaire.

Algorithme du flot maximum.On suppose que les capacités sont des entiers positifs ou nuls.

I)Trouver un flot dans le graphe G (on peut prendre f (α) = 0 pour tout arc α) et donner à s la marque (−, ∞).

II)Marquer les sommets successivement jusqu’à ce que t soit marqué ou bien qu’il n’y ait plus de sommet marquable. Sit est marqué, aller en(III); sinon aller en (V). III)Poser v = t et p = pt. Tant que v= s faire :

i)si la marque de v contient u+, alors f (u, v)← f(u, v) + p; ii)si la marque de v contient u, alors f (v, u)← f(v, u) − p; iii)v← u.

IV)Supprimer toutes les marques sauf celle de s et aller en (II). V)Fin de l’algorithme : le flot est maximum.

Exemple. Appliquons l’algorithme à l’exemple précédent. Le graphe est celui de la figure 1 reproduite ci-dessous

a b c d t s (1, 0) (1, 0) (2, 0) (3, 0) (3, 0) (4, 0) (4, 0) (4, 0) (5, 0)

On marque la source s par (−, ∞) et l’on part du flot nul.

®marquage de c à partir de s : la capacité de (s, c) est 4 et f (s, c) = 0, donc

pc= min{∞, 4 − 0} = 4 et c reçoit la marque (s+, 4);

®marquage de a à partir de c : la capacité de (c, a) est 5, f (c, a) = 0, donc

pa= min{pc, 5− 0} = 4 et a reçoit la marque (c+, 4);

®marquage de b à partir de a : pb= min{pa, c(a, b)− f(a, b)} = 4, donc b reçoit la marque (a+, 4);

®marquage de t à partir de b : on a pt= min{pb, c(b, t)− f(b, t)} = min{4, 3} = 3

donc t reçoit la marque (b+, 3).

Augmentons le flot de la quantité pt= 3 sur le chemin (s, c, a, b, t) : il vient

f (b, t) = f (a, b) = f (c, a) = f (s, c) = 3(phase III) et supprimons toutes les marques sauf celle de s. On a obtenu le flot de la figure 5.

a b c d t s (1, 0) (1, 0) (2, 0) (3, 0) (3, 3) (4, 0) (4, 3) (4, 3) (5, 3) figure5

b)Marquons successivement les sommets c, b, d, t.

®marquage de c : la capacité de (s, c) est 4, donc pc = min{∞, 4} = 4 et c est marqué (s+, 4);

®marquage de bà partir de c: la capacité de (c, b)est 1, donc pb= min{pc, 1} = 1

et b est marqué (c+, 1);

®marquage ded à partir deb: la capacité de (b,d)est1, doncpd= min{pb,1}=1, et d est marqué (b+, 1);

®marquage de tà partir de d: la capacité de (d, t) est4, donc pt= min{pd, 4} = 1

et t est marqué (d+, 1).

On augmente le flot de 1 sur le chemin (s, c, b, d, t), en posant f (d, t) = f (b, d) = f (c, b) = 1 et f (s, c) = 3 + 1 = 4 puis on supprime toutes les marques sauf celle de s. Le flot obtenu est montré figure 6.

a b c d t s (1, 1) (1, 1) (2, 0) (3, 0) (3, 3) (4, 1) (4, 4) (4, 3) (5, 3) figure6

c)Sur l’arc (s, c), le flot est égal à la capacité, donc on ne peut pas marquer c à partir de s.

®Le sommet a est marquable : pa= c(s, a)− f(s, a) = 3, donca reçoit la marque

(s+, 3). On peut alors marquer b, mais ensuite ni d ni t ne sont marquables, car sur les arcs (b, d) et (b, t), le flot est égal à la capacité.

®À partir de a, on peut marquer c (marquage en arrière), car le flot de c vers

a est positif. On obtient pc= min{pa, 3} = 3 et c reçoit la marque (a, 3).

®On peut maintenant marquer successivement d et t : le sommet d est marqué

(c+, 2) et pour t, on a pt= min{pd, c(d, t)− f(d, t)} = min{2, 4 − 1} = 2, donc la marque de t est (d+, 2).

Le chemin parcouru au cours du marquage est (s, a, c, d, t); sur les arcs directs

(d, t), (c, d) et (s, a), on augmente le flot de pt= 2 et sur l’arc indirect (c, a), on diminue le flot de 2. On obtient le flot figure 7.

a b c d t s (1, 1) (1, 1) (2, 2) (3, 2) (3, 3) (4, 3) (4, 4) (4, 3) (5, 1) figure7

d)Sur l’arc (s, c), le flot est égal à la capacité, donc on ne peut pas marquer c à partir de s. Le sommet a peut être marqué, car c(s, a)− f(c, a) = 3 − 2 = 1 > 0. On peut aussi marquer b etc à partir de a. Mais sur les arcs (b, t), (b, d)et (c, d), le flot est égal à la capacité : il sera donc impossible de marquer t. Les phases II, III, IV de l’algorithme sont exécutées, donc le flot obtenu est maximum (figure7). La valeur du flot maximum est val(f ) = f (s, a) + f (s, c) = 2 + 4 = 6.

En faisant d’autres choix pour les marquages, on peut obtenir d’autres flots maximum de même valeur, comme ceux de la figure8.

a b c d t s (1, 1) (1, 1) (2, 2) (3, 2) (3, 3) (4, 3) (4, 3) (4, 3) (5, 0) a b c d t s (1, 1) (1, 0) (2, 2) (3, 2) (3, 3) (4, 3) (4, 4) (4, 4) (5, 2) figure8

Documents relatifs