Un réseau de transport est un graphe sans boucle, où chaque arc
est associé à un nombre c(u)
Un flot f dans un réseau de transport est une fonction qui associe à chaque arc u une quantité f(u) qui représente la quantité de flot qui passe par cet arc, en provenance de la source et en destination du puits. Un flot doit respecter la règle suivante: la somme des quantités de flot sur les arcs entrants dans un noeud (autre que s et p) doit être égale à la somme des quantités de flot sur les arcs sortants de ce même noeud. En d'autres termes, la quantité totale de flot qui entre dans un noeud est égale à la quantité totale de flot qui en sort.
Un flot f est compatible avec un réseau si pour tout arc
u, 0
Un flot f est complet si pour tout chemin allant de la source au puits, il y a au moins un arc saturé, i.e. le flot qui le traverse est égal à la capacité de l'arc.
Connaissant les capacités des arcs d'un réseau de transport, le problème du flot maximum consiste à trouver quelle est la quantité maximum de flot qui peut circuler de la source au puits. L'algorithme le plus connu pour résoudre ce problème est celui de Ford et Fulkerson. Nous verrons deux approches pour cette méthode. La première est basée sur la recherche d'une chaîne dans le réseau alors que la seconde construit un graphe "d'écart" dans lequel on recherche un chemin.
On part d'un flot compatible. Le plus évident est le flot nul, i.e. pour tout arc u, f(u) = 0. Ensuite, on cherche une chaîne reliant la source au puits telle que son flot peut être augmenté. Si on n'en trouve pas, le problème est résolu. Sinon, on augmente le flot sur cette chaîne. Ensuite, on recommence à chercher une chaîne augmentante et ainsi de suite. Une chaîne augmentante, i.e. une chaîne pour laquelle le flot peut être augmenté est une chaîne pour laquelle les arcs dans le sens direct n'ont pas atteint leur limite maximum et les arcs en sens indirect ont un flot non nul qui les traverse. L'augmentation de flot maximum pour une chaîne est le minimum des écarts entre le flot courant et le flot maximal pour les arcs directs ou le flot courant pour les arcs indirects. Autrement dit, une chaîne C est augmentante si:
Le flot sur cette chaîne C peut être augmenté de:
Voici une chaîne augmentante de A à E faisant partie d'un réseau de transport. Dans cette chaîne, on peut augmenter le flot de:
On augmentera donc de 1 le flot dans cette chaîne. Ce qui signifie:
On remarque que pour les arcs en sens inverse, augmenter le flot signifie réduire le flot dans le sens direct. Entre D et C, le flot est réduit de 1 pour permettre l'arrivée d'une unité de flot sur C par B tout en conservant l'équilibre du noeud. D ayant une unité de trop, son équilibre n'est pas respecté. C'est pourquoi une unité de flot supplémentaire circule entre D et E.
Titre: FordFulkerson1 Début
L'idée est la même que pour la recherche d'un chemin (cf. méthode avec le graphe d'écart). On parcours le réseau jusqu'à visiter le noeud p. Cependant, on utilisera un arc pour se déplacer:
Titre: RechercherChaineAugmentante Début
Comme pour la méthode précédente, on part d'un flot compatible. Ensuite, on construit un graphe d'écart à partir de ce flot. Ce graphe d'écart représente les modifications de flot possibles sur chaque arc. Sur ce graphe, les noeuds ont exactement la même signification que dans le réseau de transport. Par contre, un arc indiquera de combien il est possible d'augmenter le flot entre deux noeuds. Ainsi, pour un arc u = (x;y), on créera dans le graphe d'écart:
Ensuite, dans ce graphe d'écart, on cherchera un chemin de la source au puits. Si on n'en trouve pas, le problème est résolu. Sinon, on augmente le flot sur ce chemin, qui correspond en fait à une chaîne si l'on se ramène à la première méthode. Le flot sera augmenté de la plus petite capacité des arcs du chemin. Autrement dit, le chemin C sera augmenté de:
Voici un réseau transport dans lequel circule un flot. Le graphe d'écart correspondant est le suivant. (A,B,C,D,F,G) est un chemin pour aller de A à G. On peut augmenter le flot de:
On augmentera donc le flot de 1 sur ce chemin, ce qui signifie:
On remarque que le chemin (A,B,C,D,F,G) trouvé correspondait à la chaîne augmentante (A,B,C,D,F,G).
Titre: FordFulkerson2 Début
Pour construire le graphe d'écart G, il suffit de parcourir tous les arcs du réseau R et de créer pour chacun un ou deux arcs dans G selon la méthode expliquée précédemment.
Titre: ConstruireGrapheEcart Début
Pour rechercher un chemin entre s et p, il suffit de parcourir le graphe dans le sens des arcs et de marquer les noeuds que l'on visite. On ne visitera pas deux fois un même noeud. Pour effectuer ce parcours, on dispose d'un ensemble X' des noeuds restant à visiter. Au départ il n'y a que s. Ensuite, à chaque itération, on prend un noeud dans X', on le marque pour éviter de le visiter à nouveau, on l'enlève de X' et on met ses successeurs dans X', seulement s'ils ne sont pas déjà marqués. On s'arrête quand on a visité p.
Titre: RechercherChemin Début
|