Flot maximal par l'algorithme d'Edmonds-Karp

download Flot maximal par l'algorithme d'Edmonds-Karp

of 20

  • date post

    07-Aug-2015
  • Category

    Documents

  • view

    217
  • download

    2

Embed Size (px)

description

La théorie des graphes est née en 1736 quand Léonard Euler démontra de manière rigoureuse qu’il était impossible de traverser chacun des sept ponts de la ville de Konigsberg une fois exactement et de revenir à son point de départ. Un graphe est un ensemble de points appelés sommets, reliés par des flèches ou des traits. C’est un outil qui sert à modéliser de nombreux problémes

Transcript of Flot maximal par l'algorithme d'Edmonds-Karp

Ecole nationale des sciences appliques khouribga - Universit Hassan 1er

Flot maximal par l'algorithme d'Edmonds-Karp01 janvier 2012

Mohammed Cheddad

Imad Lamtouni

Yacine abdessalam Amkassou

Encadr par : Mr. Imad hafidi

Table des matires

INTRODUTION : CHAPITRE I : BIBLIOGRAPHIE DE LALGORITHME DEDMONDS-KARP1 Problme du Flot maximal :

1.1 1.2

Introduction au problme du flot maximale Algorithme dEdmonds-Karp

1.2.1 Etapes de lAlgorithme 1.2.2 Pseudo code 1.2.3 Etude de complexit 1.2.4 Exemple dapplication de lalgorithme dEdmond-Karp CHAPITRE II : PROGRAMMATION DE LALGORITHME DEDMONDS-KARP1 Gnration alatoire du graphe :1.1 1.2 1.3 1.4 Introduction Description du programme Les fonctions utilises Fonction principal de cration de graphe

2

Chemin Augmentant2.1 2.2 2.3 Mthode de Marquage Fonction de Parcours Exemple de Parcours Dmarrage de lAlgorithme La recherche de la capacit minimale La mise jour des capacits et des flots

3

Lalgorithme daugmentation de flot3.1 3.2 3.3

4

Exemple dexcution

CONCLUSION

INTRODUTION :Dans le cadre du module dalgorithme avance, nous avons t amen tudier lalgorithme d Edmonds-Karp. Ce mme algorithme est devenu le sujet de notre projet dans ce module.

Nous prsenterons dans un premier temps, lalgorithme d Edmonds-Karp plus en dtails. Dans un deuxime temps nous passerons en revue les diffrentes phases de la ralisation de ce projet et pour terminer nous allons excuter notre programme. Le but est de crer un programme appliquant un algorithme de flot maximum. Lalgorithme devant tre appliqu est lalgorithme d Edmonds-Karp.

CHAPITRE I :BIBLIOGRAPHIE DE LALGORITHME DEDMONDS-KARP

1 Problme du Flot maximal :La thorie des graphes est ne en 1736 quand Lonard Euler dmontra de manire rigoureuse quil tait impossible de traverser chacun des sept ponts de la ville de Konigsberg une fois exactement et de revenir son point de dpart.

Un graphe est un ensemble de points appels sommets, relis par des flches ou des traits. Cest un outil qui sert modliser de nombreux problmes,

1.1 Introduction au problme du flot maximaleLe problme de flot maximum consiste trouver un flot ralisable depuis une source unique et vers un puits unique. Quelquefois le problme rpond simplement la question de trouver la valeur de ce flot. Le problme du flot maximum peut tre vu comme un cas particulier de plusieurs autres problmes de flots dans les rseaux. Le flot maximum (depuis la source s vers le puits t) est gal a la coupe minimale du graphe.1 Dfinition : Un flot est une fonction entire positive ou nulle f dfinie sur les arcs satisfaisant : Contrainte de capacit : ; Conservation du flot : pour tout sommet autre que s et t, la somme des flots sur les arcs entrants et la somme des flots sur les arcs sortants sont gales.

Figure 1 exemple de rseau du flot

1.2 Algorithme dEdmonds-KarpDfinition : Un rseau de transportsans circuit : Muni dune source : un sommet s S tel que , Muni dun puits : un sommet p S tel que Dont chaque arc u A est valu par une capacit : un nombre positif ou nul not Et tel quil existe au moins un chemin de s vers p. est un graphe orient

L'algorithme de Edmonds-Karp construit un flot maximal en partant d'un flot nul et en augmentant son dbit le long de chemins de s t acceptables, c'est dire tels que et que le dbit maximum soit strictement positif.

1

Wikipedia http://fr.wikipedia.org/wiki/Probl%C3%A8me_de_flot_maximum

La particularit de l'algorithme de Edmonds-Karp est de toujours choisir un chemin acceptable dont la longueur (en nombre d'artes) est minimale. Ds qu'un nouveau chemin L acceptable de longueur minimale est trouv, son dbit est ajout et, paralllement, les capacits c de G sont mises jour.2

Figure 2 exemple de rseaux de transport

Cette methode tait cre par Jack Edmonds et Richard Karp en 1971 3 elle sagit dune modification de lalgorithime de Ford-Fulkerson , cette dernire consiste a calculer de debit maximal dans un rseau de transport . La diffrance entre les deux cest que la premire utilise le plus court chemin dans laugmentation du flot .

1.2.1 Etapes de lAlgorithmeLalgorithme repose sur 2 etape principeaux . Dabord il faut chercher un chemin de s vers p ,cette tape est fait par le parcours par Largeure ce qui garentie que le chemin suivant soit minimal en nombe de artes ( sans utiliser aucun methode de plus court chemin) . Arpes quon a trouv ce chemin, letape suivante consiste augmenter ce chemin en quantit de flot qui le traverse . Ceci ncessite de trouver le maximal flot qui peut traverser ce chemin , ce dernier est determine par lquation suivante :

Donc le chemin C(s,p) est dit augmentant si . Alors on peut dire que lalgorithme dEdmond-Karp est : initialiser le flot f avec la valeur 0 sur chaque arc tant quil existe un chemin augmentant s p, augmenter le flot de e jusqu lobtention dun flot complet, tant quil existe une chne augmentante de s p, augmenter le flot de e jusqu lobtention dun flot maximal, retourner f

1.2.2 Pseudo code

23

Thomas H. Cormen, Clird Stein, Ronald L. Rivest, and Charles E. Leiserson. Introduction l'algorithmique. Dunod, 2nd edition, 2001. Puplier pour la premier fois dans Journal of the Association for Computing Machinery, Vol. 19, No. 2, Apri| 1972. pp. 248-264

[ ] [ ] [ ] [ ] [ ] [ ]

[ ] [ ] [ ] [ ]

[ ] [ ] [ ]

1.2.3 Etude de complexitLe temps de fonctionnement de O(|S|.|A2|) est trouv en prouvant que chaque chemin augmentant peut tre trouv dedans O(A) temps, celui chaque fois au moins un de A le bord devient satur, ce la distance du bord satur la source le long du chemin augmentant doit tre plus long que la fois passe qu'il a t satur, et ce la distance est au plus S long. Remarque : la longueur du chemin augmentant le plus court augmente monotoniquement. Il y a une preuve accessible dedans4

1.2.4 Exemple dapplication de lalgorithme dEdmond-KarpSoit le graphe suivant tel que la source est l et le puits est 5 et :

Le premier chemin augmentant est :

On va calculer e le minimal des

4

Thomas H. Cormen, Clird Stein, Ronald L. Rivest, and Charles E. Leiserson. Introduction l'algorithmique. Dunod, 2nd edition, 2001.

Donc on augmente tout les flots de e=9 Larte 1 devient satur

par

On cherche le chemin augmentant suivant tel que larte 1 est limin Alors on a:

On va calculer e le minimal des

Donc on augmente tout les flots de par e=5 . Larte 3 est satur

Quand il ne reste aucun chemin augmentant on calcule le flot maximal par une coupe minimal . Alors le flot maximal est

CHAPITRE II :PROGRAMMATION DE LALGORITHME DEDMONDS-KARP

La premire tape du projet fut la comprhension de lalgorithme. Cette tape est sans doute la plus importante du projet car elle permet de partir dans la bonne direction ds le dbut pour les tapes suivantes.

1

Gnration alatoire du graphe :1.1 Introduction

C'est trs important de savoir la fin que le programme ralis fonctionne correctement et atteint l'objectif, mais pour vrifier a nous devons le tester pas seulement une fois ou deux mais plusieurs et sur des cas diffrents, pour viter que notre programme marche pour certains cas et non pas pour tout. Alors nous devons crer un sous

programme qui gnre des graphes juste et de manire alatoire, pour pouvoir tester le programme principal sur diffrents cas. Donc on peut dire que le gnrateur alatoire des graphes est la matire premire de notre projet. Ce qui fait la cration de ce gnrateur doit tre avec vigilance et prudence pour ne pas se baser sur quelques choses de faux. On a adopt pour le graphe un structure de donnes particulires et intelligente qui nous permettra de travailler sur le graphe avec souplesse, cette structure utilise seulement les listes chains pour leurs efficacit (mais difficile coder) la structure de donne adopte est illustre dans la figure suivante:

Figure: Structure de graphe

4 typedef struct graph graph ; 5 struct graph 6{ 7 int val ; 8 CHaine adj ; 9 graph * suiv ; 10 }; 11 12 typedef graph * GRaph ; Cette structure est compose de trois attributs ; Valeur. un pointeur de type chaine pointant vers la liste chaine contenant les adjacents de ce sommet. un pointeur de type graph pointant vers le sommet suivant. Voici la structure de base pour la liste chaine : typedef struct chaine chaine; 5 struct chaine 6{ 7 int valeur; 8 int capacity; 9 int flot; 10 chaine *suivant; 11 };

12 typedef chaine* CHaine;

Figure 3 : chaine

Pendant la ralisation de ce sous programme on a rencontr tant de problmes certains sont rsolus (comme les problmes de programmation) et d'autres non c'est du au complexit du problme.

1.2

Description du programme:

L'utilisateur nous fournit seulement le nombre des sommets et aussi le nombre des arrts et le programme gnre le graphe correspondant. Dans un rseau de transport deux sommets sont particuliers sont: la source et le puit, le puit ne doit pas avoir des successeurs et la source aussi ne doit pas possder des prdcesseurs. On a utilis les nombres entiers comme tiquettes des nuds (1,2,..., S) et nous avons pris que toujours 1 est la source et S le puit car a nous aidera un peu simplifier les tches. EXEMPLE Si S=6, on a: 1 et la source et 6 le puits. L'algorithme de gnration des graphes aura recours des fonctions supplmentaires, donc il est prfrable de les dtailler avant de passer pour dtailler l'algorithme principal.

1.3

Les fonctions utilises:

void repartirArrets(int S, int A, int t[])Cette fonction sert repartir le nombre d'arrts que chaque nud doit faire, cette rpartition se fait alatoirement en se servant de la fonction rand. void reparti