Rapport de stage: mise en place de simulation/démonstration d'algorithmes



Documents pareils
Conception de réseaux de télécommunications : optimisation et expérimentations

modélisation solide et dessin technique

LE PROBLEME DU PLUS COURT CHEMIN

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Chapitre 5 : Flot maximal dans un graphe

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Programmation Objet - Cours II

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Eteindre. les. lumières MATH EN JEAN Mme BACHOC. Elèves de seconde, première et terminale scientifiques :

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

Guide de démarrage rapide

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

LibreOffice Calc : introduction aux tableaux croisés dynamiques

Manuel d utilisation NETexcom

Ebauche Rapport finale

Introduction. I Étude rapide du réseau - Apprentissage. II Application à la reconnaissance des notes.

SOUTIEN INFORMATIQUE DEP 5229

1. Introduction Création d'une requête...2

MASTER 2 IMAFA. Informatique et Mathématiques Appliquées à la Finance et à l'assurance

LICENCE : INFORMATIQUE GENERALE

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Navigation dans Windows

Service de réplication des données HP pour la gamme de disques Continuous Access P9000 XP

Gestion de projets. avec. Microsoft Office PROJECT 2003

LES CARTES À POINTS : POUR UNE MEILLEURE PERCEPTION

Le générateur d'activités

Par : Abdel YEZZA, Ph.D. Date : avril 2011 / mise à jour oct (ajout de la section 3 et augmentation de la section 1)

DUT. Informatique, orientation Imagerie Numérique. Domaine : Sciences, Technologies, Santé. Mention : Informatique

NOTIONS DE RESEAUX INFORMATIQUES

chapitre 4 Nombres de Catalan

FICHE UE Licence/Master Sciences, Technologies, Santé Mention Informatique

N de convention Audencia/MAE à rappeler pour toute candidature : 97/08

CHAPITRE VIII : Les circuits avec résistances ohmiques

Algorithmes de recherche

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Transférer et enregistrer les photos sur l'ordinateur

Service d'installation et de démarrage de la solution de stockage réseau HP StoreEasy 1000/3000

YAPBA M. Logiciel libre de suivi de vos comptes

IMO - Informatique, modélisation et optimisation

Date : Tangram en carré page

Guide de configuration de SQL Server pour BusinessObjects Planning

CA Desktop Migration Manager

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Création d'un questionnaire (sondage)

Introduction à la théorie des graphes. Solutions des exercices

MS PROJECT Prise en main. Date: Mars Anère MSI. 12, rue Chabanais PARIS E mail : jcrussier@anere.com Site :

Atelier Transversal AT11. Activité «Fourmis» Pierre Chauvet.

Démontage d'un ordinateur

Baccalauréat technologique

TEXT MINING von 7

REALISER UN SITE INTERNET AVEC IZISPOT SOMMAIRE

Recherche dans un tableau

Analyse tarifaire en ligne (TAO) de l'omc

Créer un tableau avec LibreOffice / Calc

MODE D'EMPLOI DE LA CALCULATRICE POUR LES COURTS SÉJOURS DANS L'ESPACE SCHENGEN

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

L INRIA, institut français des STIC. (en Île-de-France) 24 septembre 2009

Chapitre 1 : Introduction aux bases de données

Date de diffusion : Rédigé par : Version : Mars 2008 APEM 1.4. Sig-Artisanat : Guide de l'utilisateur 2 / 24

SUPPLEMENT AU DIPLOME

Exemples et tutoriels Version 7.5. Tutoriel de l'exemple Recrutement de personnel pour IBM Process Designer

Interface PC Vivago Ultra. Pro. Guide d'utilisation

Didacticiel de mise à jour Web

MEDIAplus elearning. version 6.6

RÉSUMÉ DESCRIPTIF DE LA CERTIFICATION (FICHE RÉPERTOIRE)

VRM Monitor. Aide en ligne

Les bourses de thèse

Mon métier, mon parcours

MIS 102 Initiation à l Informatique

RÉALISATION DE GRAPHIQUES AVEC OPENOFFICE.ORG 2.3

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

1 Gestionnaire de Données WORD A4 F - USB / / 6020 Alco-Connect

Guide de l'utilisateur de l'utilitaire d'installation de caméra Avigilon

Cours 420-KEG-LG, Gestion de réseaux et support technique. Atelier No2 :

v7.1 SP2 Guide des Nouveautés

ÉCONOMIE ET GESTION LYCÉES TECHNOLOGIQUE ET PROFESSIONNEL

Guide d'utilisation du logiciel de NEWSLETTERS

Cours de Génie Logiciel

Gestion de projet. GanttProject Didacticiel V novembre Gérard Gervois Frédéric Giamarchi

Les formations en cycle ingénieur

Environnement logiciel open source pour la création d œuvres artistiques interactives

2 Grad Info Soir Langage C++ Juin Projet BANQUE

Spécialité Sciences Mécaniques et Ingénierie

Cours 1 : Qu est-ce que la programmation?

Sage 50 Comptabilité. Solutions logicielles en nuage, sur place et hybrides : Qu'est-ce qui convient le mieux à votre petite entreprise?

1 è r e étape : créer sa base de d o n n é e s

Mon métier, mon parcours

BADPLUS V5 MANUEL D'UTILISATION. Imports de données joueurs à partir de la base fédérale en ligne Poona. Stéphan KIEFFER - Dominique BOSSERT

Tutorial Ophcrack. I) Ophcrack en API. (ou comment utiliser Ophcrack pour recouvrir un mot de passe sous Windows XP et Windows Vista)

Logiciels concernés. Situation. Ciel et le pont comptable. Note conçue et rédigée par Jalons sprl tous droits réservés - 27/06/2007.

Le modèle de données

Pourquoi l apprentissage?

TITRE Ier DISPOSITIONS GENERALES. Article 1 er

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Boîte à outils OfficeScan

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

Fiche méthodologique Rédiger un cahier des charges

Transcription:

Rapport de stage: mise en place de simulation/démonstration d'algorithmes Marie-Laure GNEMMI Elève en première année à l'ensea juillet-août 2005 MASCOTTE - projet commun CNRS/INRIA/UNSA INRIA Sophia-Antipolis 1

Remerciements Je remercie chaleureusement M. David Coudert, mon responsable de stage, pour m avoir encadrée tout au long de ce stage et pour tout ce qu il m a appris, ainsi que M. Fabrice Peix, l ingénieur expert du projet, pour la formation qu il m a procurée au début du stage, le temps qu il m a accordé et la patience dont il a fait preuve tout au long de ce stage. Je tiens également à remercier les membres de l équipe Mascotte pour leur accueil et leur bonne humeur, notamment M. Jean-Claude Bermond, le responsable scientifique du projet, M. Philippe Mussi, le responsable permanent, les chercheurs M. Hervé Rivano, M. Michel Syska et M. Jean-François Lalande, l'assistante Mme Ephie Deriche, ainsi que M. Michel Cosnard, directeur de l unité de recherche de Sophia-Antipolis. 2

Table des matières Remerciements 2 I. L'INRIA : Institut National de Recherche en Informatique et en Automatique 5 1.1. 1.2. 1.3. 1.4. 1.5. 1.6. 1.7. L'organisation Une stratégie de proximité Les objectifs Une stratégie internationale Les chiffres clés Organigramme L'unité de Sophia-Antipolis a) Historique: 20 ans au cœur de la technopole sophipolitaine b) Le travail de recherche c) Quelques chiffres 5 5 6 6 7 8 9 9 10 10 II. Le projet MASCOTTE: Méthodes Algorithmiques, Simulation, Combinatoire et OpTimisation pour les Télécommunications 12 2.1. 2.2. 2.3. 2.4. 2.5. Axes de recherche Relations internationales et industrielles Logiciels développés Quelques chiffres Domaines d'application III. Déroulement du stage 3.1. L'organisation a) objectifs b) organisation 3.2. Les outils mis à ma disposition a) la librairie Mascopt b) le serveur CVS 3.3. L'intérêt du stage a) pour le projet b) pour moi 12 12 13 13 13 14 14 14 14 15 15 17 17 17 17 3

IV. Les algorithmes traités 4.1. Le problème des arbres couvrants minimaux a) Définition b) L'algorithme de Prim c) L'algorithme de Kruskal 4.2. Le problème du flot maximal a) Définition b) L'algorithme de Ford-Fulkerson c) Application: couplage dans un graphe biparti 4.3. Algorithme de graphe couvrant de coloration minimale 18 18 18 20 23 26 26 30 34 38 4

I. L'INRIA : Institut National de Recherche en Informatique et en Automatique 1.1. L'organisation Créé en 1967, l'inria (alors IRIA) est un établissement public à caractère scientifique et technologique (EPST). Placé sous la tutelle des ministères de la recherche et de l'industrie, il a pour vocation d'entreprendre des recherches fondamentales et appliquées dans les domaines des sciences et des technologies de l'information et de la communication (STIC). L'INRIA est composé de six unités de recherche situées à Rocquencourt, Rennes, Sophia-Antipolis, Grenoble, Nancy et Bordeaux, Lille, Sarclay et sur d'autres sites à Paris, Marseille, Lyon et Metz. Il y accueille 3500 personnes dont 2700 scientifiques, issus en partie d'organismes partenaires. En effet, la place que prend l'informatique dans l'ensemble des domaines scientifiques et économiques a conduit l'inria à adopter une stratégie de recherche en partenariat avec de nombreux organismes. Ainsi, parmi les 124 équipes (ou projets) de l'institut, plus de la moitié sont des projets communs avec différents organismes de recherches comme le CNRS, les grandes écoles ou les universités. De plus, une grande partie des chercheurs de l'inria sont des enseignants et leurs étudiants, qui préparent leur thèse dans le cadre des projets de recherche de l'inria. L'institut travaille également avec de grands laboratoires industriels: les avancées de la recherche en informatique suivent donc de près les besoins en télécommunications, médecine, biologie, transports, etc... 1.2. Une stratégie de proximité Cette stratégie se traduit par une importante dynamique de transfert des résultats de recherche, aussi bien à travers l'édition, la diffusion de logiciels que par la création de plus d'une soixantaine de start-up soutenue par sa filiale INRIA-Transfert. En effet, cela fait vingt ans que l'inria contribue à la création de nombreuses entreprises: de Simulog, créée en 1984, à Genostar technologies, crée en 2004, en passant par Ilog, cotée au Nasdacq ou Kelkoo... Une quarantaine d'entre elles sont encore en activité, d'autres ont intégré de grands groupes industriels. 5

1.3. Les objectifs Pour l'inria, le développement de produits informatiques n'est pas l'objectif premier de la recherche: elle se doit de participer au développement, notamment économique, dans tous les secteurs d'application des STIC. Ainsi, l'évolution des STIC et leurs contributions aux avancées de la science entraînent l'inria dans une dynamique de développement au service de l'économie et de la société. A cette fin, la stratégie de l'institut se décline en sept défis scientifiques prioritaires: concevoir et maîtriser les futures infrastructures des réseaux et des services de communication développer le traitement des informations et des données multimédias garantir la fiabilité et la sécurité des systèmes à logiciel prépondérant coupler modèles et données pour simuler et contrôler les systèmes complexes combiner simulation, visualisation et interaction modéliser le vivant intégrer pleinement les STIC dans les technologies médicales 1.4. Une stratégie internationale Afin de maintenir l'inria au plus haut niveau d'excellence, l'institut accorde la plus grande importance à sa stratégie internationale. Celle-ci se traduit d'abord par les nombreux échanges et partenariats avec des laboratoires étrangers, et par le fait que chaque projet de recherche est évalué par un comité de chercheurs internationaux. De plus, cette stratégie est mise en oeuvre dans le cadre de priorités géographiques: en effet, l'inria attache la plus grande importance à son engagement dans le développement d'un espace européen de la recherche. La deuxième priorité de l'inria est l'approfondissement des partenariats avec les laboratoires de recherche aux Etats-Unis car on y trouve la plus grande dynamique de projets de recherche dans le domaine des STIC (environ 40% des projets de l'institut sont en partenariat avec des équipes américaines). Enfin, une priorité géographique à venir pour l'inria est l'asie, avec laquelle l'institut veut approfondir ses collaborations. Pour cela, l'inria s'est engagé dans plusieurs structures conjointes de recherche, par exemple le LIAMA en Chine et le Centre Hong Kong d'ingénierie financière. L'institut s'engage aussi dans le développement de programmes multilatéraux de recherche avec le Brésil, le Chili, le Mexique et différents pays africains. 6

1.5. Les chiffres clés Ressources budgétaires: budget total : 125 millions d'euros hors taxe (d'après le rapport annuel 2004) ressources propres: 22% du budget total Ressources humaines: titulaires INRIA: 900, dont 400 chercheurs et 500 ingénieurs et techniciens Post-doctorants, stagiaires et invités: 750 doctorants: 800 chercheurs et enseignants d'autres organismes: 450 Ingénieurs experts (sur contrat de recherche): 200 Indicateurs: contrats de recettes actifs: plus de 800 contrats de recettes signés dans l'année: plus de 300 77 sociétés sont issues de l'inria, depuis ILOG, aujourd'hui cotée au Nasdacq, jusqu'aux toutes dernières, 12 en 2000, 4 en 2001, 3 en 2002, et 7 en 2003. l'inria disposait en 2003 de 150 brevets actifs, 50 licences payantes de logiciels, et 95 licences de logiciels libres étaient actives en décembre 2003. Plus de 150 logiciels sont disponibles en accès gratuit sur le site de l'inria ou à travers la diffusion d'un cédérom. 7

1.6.Organigramme 8

1.7. L'unité de Sophia-Antipolis a. Historique: 20 ans au cœur de la technopole sophipolitaine Création de l'unité de recherche En 1980, la décision est prise de décentraliser l'inria. Les premiers chercheurs arrivent alors de Rocquencourt en 1981 et sont accueillis dans les locaux du CMA (Centre de Mathématiques Appliquées) à l'ecole des Mines. En octobre 1983, l'inria intègre ses propres bâtiments, construits grâce à l'aide financière des collectivités territoriales et des organismes gouvernementaux. Tous les décideurs du département des Alpes-Maritimes, de l'etat, de la Région PACA ainsi que des cinq premières communes initiales - Biot, Valbonne, Mougins, Vallauris et Antibes qui vont largement contribuer au succès de la technopole - ont pressenti l'intérêt de l'installation d'un centre de recherche tel que l'inria sur le site sophipolitain. Aujourd'hui le Parc compte plus de 1 260 raisons sociales, soit environ 25 911 emplois. Par son dynamisme et son développement dans le domaine des STIC, l'inria participe à la croissance et à la reconnaissance du Parc au niveau international. La croissance Implantée dans la première technopole européenne, l'unité de recherche a connu une croissance remarquable pendant ces vingt années : 6 équipes de recherche à ses débuts, 30 actuellement, pour une cinquantaine de personnes à l'ouverture contre plus de 500 à ce jour. En 1983, l'unité de recherche comptait une trentaine de chercheurs permanents, aujourd'hui ils sont plus de 200, 3 doctorants en 1983 et plus de 150 actuellement. Environ 140 chercheurs et doctorants sont issus de 42 nationalités différentes. Dès 1988, le Conseil Régional avait compris l'importance de la recherche et la nécessité d'interaction entre les différents organismes ; il associe donc l'inria Sophia Antipolis à la création d'un réseau régional connecté aux Etats-Unis par une liaison transatlantique appartenant à l'inria. Le Conseil Régional complète le réseau par une aide au financement de la Connection Machine, l'un des premiers super-calculateurs de ce type en Europe, en 1989. Le développement rapide et l'impact de l'unité de recherche dans le développement de la région incitent le Conseil Régional et le Conseil Général à financer deux nouveaux bâtiments, l'un inauguré en 1997 et l'autre en 1999. Par sa politique de mobilité et d'essaimage, l'inria Sophia Antipolis a contribué au lancement d'une dizaine de start-up issues de l'unité de recherche qui a permis la création de plus de 300 emplois dans la région. 9

b. le travail de recherche Créer, modéliser, simuler Ces trois mots caractérisent le travail de recherche des chercheurs de l'inria SophiaAntipolis qui affiche un double objectif stratégique : excellence scientifique et transfert technologique. Les travaux des équipes de recherche portent sur la conception et la programmation de systèmes informatiques performants, la représentation et la manipulation d' informations complexes, la création, la modélisation et la simulation d'expériences complexes. Ils permettent l'avancée des connaissances dans sept grands domaines : réseaux et systèmes, génie logiciel et calcul symbolique, interaction homme-machine, images, données, connaissances, simulation et optimisation des systèmes complexes. Pour mener à bien ces études, l'unité de recherche entretient des interactions constantes avec ses partenaires des universités, grandes écoles ou des centres de recherche dans le monde entier par des publications scientifiques, des logiciels et des échanges internationaux. Elle héberge aussi les services du consortium ERCIM qui rassemble des instituts européens de recherche dans les sciences et technologies de l'information et de la communication et qui est également l'hôte de la branche européenne du consortium W3C. Le transfert technologique est l'autre objectif stratégique. L'INRIA Sophia-Antipolis entretient des partenariats avec de nombreuses entreprises et organismes locaux, nationaux ou internationaux dans le cadre de contrats, de réseaux de recherche ou de programmes européens. Des rencontres régulières ont lieu dans le cadre du club des partenaires de l'unité, Intech'Sophia, qui permettent le renforcement de ces partenariats. Par ailleurs, les travaux des chercheurs de l'inria Sophia-Antipolis ont conduit à la création d'une dizaine de sociétés de technologies. Avec leur double préoccupation d'excellence et de transfert, les chercheurs de l'unité participent à la formation aux sciences et technologies de l'information et de la communication par l'accueil d'étudiants ou de chercheurs, mais aussi d'ingénieurs du monde entier. c. quelques chiffres Au 1er janvier 2005: 500 personnes dont 96 chercheurs 150 doctorants 79 ingénieurs, techniciens, administratifs 175 ingénieurs expert, post-doctorants, chercheurs invités, collaborateurs extérieurs, CDD... Activités de recherche 29 projets, équipes de recherche dont 16 projets ou équipes communs avec : le CMA-Centre de Mathématiques Appliquées (ENSMP) le LJAD-Laboratoire J.A. Dieudonné (CNRS et Université de Nice-Sophia Antipolis) I3S-Informatique Signaux et Systèmes de Sophia-Antipolis (CNRS et Université de Nice-Sophia Antipolis) 10

le CERMICS-Centre d'enseignement et de Recherche en Mathématiques, Informatique et Calcul Scientifique le LOV -Laboratoire d'océanographie de Villefranche sur Mer (CNRS et Université Paris 6) l'université de Provence l'ecole Normale supérieure le LIRMM-Laboratoire d'informatique, de Robotique et de Microélectronique de Montpellier (Université Montpellier II et CNRS) l'université Montpellier I l'inra Formation par la recherche 30 thèses soutenues en 2004 5 habilitations à diriger des recherches en 2004 Publications en 2004 12 livres et monographies 160 articles et chapitres de livres 275 communications à des congrès 120 rapports de recherche Actions industrielles en 2004 30 contrats de recherche sur financements industriels 32 contrats de recherche sur financements publics nationaux 18 contrats européens en cours 26 contrats de commercialisation actifs 2 demandes de brevets déposés Actions internationales en 2004 Accueil d'une quinzaine de délégations étrangères Programmes européens de recherche (Ecvision, Cybermove, Inspired, Mowgli, Muse, Netmobil, Telemac) Manifestations scientifiques 20 colloques, ateliers, cours organisés ou co-organisés par l'unité de recherche en 2004 11

II.Le projet MASCOTTE: Méthodes Algorithmiques, Simulation, Combinatoire et OpTimisation pour les Télécommunications Mascotte est un projet commun entre l'inria, le CNRS et l'université de Nice-SophiaAntipolis (UNSA), dans le cadre du laboratoire I3S. L'objectif du projet Mascotte est de développer des méthodes et des outils algorithmiques qui s'appliquent en particulier à la conception de réseaux de télécommunication. La réalisation de cet objectif implique la poursuite de recherches de haut niveau dans les domaines de l'algorithmique, de la simulation et des mathématiques discrètes. 2.1. Axes de recherche Algorithmique, mathématiques discrètes et optimisation combinatoire Algorithmique des communications Conception et dimensionnement de réseaux (optiques WDM,SDH, ATM, embarqués, radio et satellites) Simulation orientée objet en environnement réparti 2.2. Relations internationales et industrielles Relations industrielles: projet OSSA (Direction Générale Transport et Energie de la Commission Européenne) sur la simulation de trafic routier. Alcatel Espace Industries (Toulouse) sur la conception de réseaux de commutateurs tolérants aux pannes embarqués dans des satellites. France Télécom R&D ( Contrat de Recherche Collaborative) sur la dimensionnement de services SDH pour les entreprises. Projet RNRT (Constellations) sur les constellations de satellites. Projet RNRT (Porto) avec Alcatel (Marcoussis) et France Télécom sur la planification et le transport de réseaux optiques. Relations internationales: Brésil: coopération INRIA/CNPq avec l'université de Minas Gerais. Italie et Canada: projet avec l'université de Pise et de Carleton. Canada: Simon Fraser University et DalTech. Israël: projet avec le Weizmann Institute. Espagne: UPC Barcelone. 12

2.3. Logiciels développés Le projet Mascotte a développé plusieurs logiciels, parmi lesquels la librairie d'optimisation de réseaux Mascopt que j'ai pu utiliser, ainsi que des outils pour la simulation et pour l'analyse statistique des résultats de simulation (Prosit et Stat-Tool), un logiciel utile pour les réseaux de transport optique (Porto), et un logiciel d'analyse Technique des Marchés Financiers (InteTech). 2.4. Quelques chiffres Ressources budgétaires (hors salaires) en 2004: dotation de base INRIA Sophia-Antipolis: 37000 dotation base CNRS: 3000 Contrats industriels et internationaux: 250000 Ressources humaines: titulaires INRIA: 2 titulaires CNRS: 6 titulaires universitaires: 4 titulaires France Télécom: 2 post-doctorants, invités: 10 doctorants: 7 stagiaires: 10 2.5. Domaines d'application Ces cinq dernières années, le projet a choisi comme principal domaine d'application celui des télécommunications, et plus précisément les réseaux de calcul parallèles. Le projet a aussi des applications dans le domaine du transport. On peut noter cependant qu'il y a de fortes similitudes entre ces deux domaines: en particulier, les outils théoriques et les problèmes de communication ne sont pas si différents si l'on considère le domaine du transport ou celui des télécommunications. Dans le domaine des télécommunications, les applications du projet dépendent beaucoup des partenaires industriels avec lesquels ils sont en collaboration. Avec France Télécom, et les autres partenaires, le projet a travaillé sur le design des réseaux de télécommunications (les réseaux SDH/SONET, WDM, ou encore ATM) et divers problèmes, et sur le regroupement de moyens de transport de faible contenance en d'autres de plus grande contenance. Pour cela, le projet a utilisé les logiciels qu'il a développés, Prosit pour les simulations de trafic routier (dans le cadre du projet européen OSSA), ou encore la simulation d'environnement pour les satellites de télécommunications. 13

III.Déroulement du stage 3.1.L'organisation a) objectifs L'objectif de ce stage était de mettre en place des simulations, ou démonstrations, d'algorithmes sur les graphes. En effet, dans le cadre du projet, l'équipe Mascotte a développé une bibliothèque de manipulation de graphes, la librairie Mascopt. Cette librairie contient des outils qui permettent d'exécuter en mode pas à pas des algorithmes qui mettent en scène des graphes. Mon travail était d'utiliser cette librairie pour implémenter des algorithmes et préparer leurs démonstrations pas à pas: par exemple, afficher l'une après l'autre les arêtes sélectionnées par un algorithme de plus court chemin. Les compétences requises se limitaient donc à des bases d'algorithmique afin de comprendre les algorithmes et de savoir les implémenter. b) organisation Mon stage a duré deux mois, du 4 juillet au 31 août. Il s'est effectué en deux parties: tout d'abord, j'ai dû me familiariser avec le langage objet Java ainsi qu'avec la librairie Mascopt. Ainsi, les premiers jours, Fabrice Peix m'a enseigné certaines bases du langage objet et de la librairie, dont il m'a fourni et expliqué si nécessaire les tutoriels qu'il a rédigés et qui sont disponibles sur le site du projet. Une fois les bases acquises, j'ai pu commencer à faire les démonstrations d'algorithmes: pour chaque algorithme, David Coudert m'en expliquait le fonctionnement, puis je l'implémentais, et enfin j'implémentais la démonstration graphique sur un exemple de graphe, et ce en mode pas à pas. Les différents algorithmes traités font l'objet de la partie IV. Durant ce stage, j'avais un bureau dans une salle réservée aux stagiaires. Je commençais mes journées vers 9h et je repartais vers 17h, cela dépendait d'où j'en étais dans mon travail. De plus, j'ai été très bien encadrée tout au long de mon stage: en effet, David Coudert et Fabrice Peix venaient de temps en temps voir si tout allait bien, et quand je rencontrais des difficultés, je pouvais aller demander de l'aide à Fabrice Peix, ou Jean-François Lalande, en ce qui concernait la programmation, et à David Coudert ou Hervé Rivano pour l'algorithmique. Après avoir traité chaque algorithme, je montrais ce que j'avais fait à David Coudert qui décidait s'il y avait d'éventuelles modifications ou améliorations à apporter. 14

3.2. Les outils mis à ma disposition J'avais à ma disposition un PC sous Linux, sur lequel je programmais exclusivement en Java sous l'environnement de développement Eclipse. J'avais aussi comme outils de programmation la bibliothèque Java MascoptLib, et l'ordinateur sur lequel je travaillais était relié au serveur CVS. David Coudert m'a aussi prêté un livre d'algorithmique, Introduction à l'algorithmique, pour m'aider à comprendre les algorithmes et les problèmes auxquels ils apportaient une solution. a) La librairie Mascopt La librairie Mascopt (contraction de Mascotte et optimisation) est une bibliothèque Java dédiée aux problèmes d'optimisation dans les réseaux. Cette bibliothèque fournit des outils qui facilitent les manipulations de graphes, et privilégie la facilité d'utilisation à la vitesse d'exécution. Dans cette librairie, les graphes sont modélisés de la manière suivante: un graphe G est défini par le couple (V,E) où V = { v1, v2,..., vn } est l'ensemble des sommets du graphe, et E = { e1, e2,..., em } est l'ensemble des arcs du graphe. Les sommets et les arêtes doivent être instanciés par l'utilisateur, qui peut les manipuler librement. Il faut donc que les deux ensembles V et E soient cohérents, c'est-à-dire que tous les sommets reliés par les arêtes de E doivent appartenir à V. De plus, on peut très bien créer plusieurs graphes ayant des éléments en commun et les manipuler aisément. Pour chaque type d'éléments (graphes, sommets, arcs...), les méthodes qui s'y appliquent sont regroupées dans des classes abstraites: par exemple, la méthode de construction de graphe permet à l'utilisateur de créer directement son propre graphe simplement en appelant cette méthode. L'utilisateur peut donc manipuler des graphes et utiliser directement les algorithmes de Mascopt pour manipuler ses propres graphes. La librairie est composée de huit packages, dont celui qui nous intéresse, MascoptLib.graphs, dédié aux classes MascoptGraph et MascoptDiGraph (graphes orientés). Les classes de ce package sont les suivants: MascoptObject: à chaque élement du type MascoptObject, il est possible d associer une valeur du type Integer, Double ou String. On peut accéder à ces valeurs, ou les modifier, grâce à des méthodes telles que setvalue(), getvalue()... Tous les objets qui suivent sont des sous-classes de MascoptObject. MascoptVertex: on peut accéder à ses voisins, aux arcs entrants ou sortants... MascoptAbstractEdge: peut être orienté (MascoptArc) ou non (MascoptEdge). On peut accéder à ses extrémités, ou encore au sommet opposé à un sommet donné... MascoptAbstractGraph: peut être orienté (MascoptDiGraph) ou non (MascoptGraph). Un graphe est construit sur un ensemble de sommets et un 15

ensemble d'arcs. On peut entre autre faire des copies de graphes, ou encore en extraire des sous-ensembles. MascoptFixedSet: il s'agit des ensembles. Ses deux sous-classes sont: * MascoptVertexSet: ensemble de sommets. * MascoptEdgeSet: ensemble d'arcs, éventuellement orientés. Les graphes sont construits à partir d'un MascoptVertexSet et d'un MascoptEdgeSet. On peut aussi copier des ensembles, ou créer des sousensembles. MascoptPath ou MascoptDiPath: il s'agit respectivement de chemins non orienté et orienté. Ils se construisent à partir d'un graphe, on peut ajouter ou enlever des éléments, les fusionner, accéder aux extrémités... Récapitulatif des relations d'héritage entre les classes (les flèches signifient : est la classe parent de) 16

b) Le serveur CVS CVS permet de garder en mémoire l'historique des modifications de fichiers ASCII ou binaires. Ainsi, tous les utilisateurs de ce serveur ont un accès aux versions antérieures de leurs travaux et peuvent facilement travailler à plusieurs sur le même projet: ils peuvent modifier en même temps le même fichier dans la mesure où ils travaillent sur une copie du fichier original. Les fichiers originaux sont modifiés seulement quand l'utilisateur envoie ses nouvelles versions des fichiers. Les anciens fichiers ne sont jamais détruits: seules les modifications apportées sont enregistrées, et donc on peut facilement revenir en arrière. 3.3. L'intérêt du stage a) pour le projet Mascotte La bibliothèque d optimisation de réseaux Mascopt, développée au sein du projet, contient tous les outils nécessaires à l exécution pas à pas d algorithmes sur les graphes mais n avait pas encore été exploitée. J ai ainsi utilisé les outils de cette librairie, et signalé à Fabrice Peix lorsque je rencontrais des difficultés. Il apportait alors d éventuelles modifications à ces outils. De plus, ces démonstrations d algorithmes seront utiles d une part comme support à l enseignement, et plus généralement pour faciliter la compréhension de certains des travaux du projet. b) pour moi Ce stage a été pour moi le premier contact avec le monde du travail, et m'a permis de vivre les conditions réelles d'un travail d'exécution. Il m'a permis d'observer de l'intérieur l'organisation d'une entreprise ainsi que les contraintes auxquelles est soumis le personnel. De plus, j'ai eu la chance d'effectuer mon stage au sein d'une équipe de travail dans laquelle règne une très bonne ambiance, ce qui m'a permis de réaliser qu'il est très important d'entretenir de bonnes relations avec les collègues de travail. Enfin, il m'a permis de mettre à l'épreuve les connaissances que j'ai acquises en algorithmique et en informatique au cours de ma scolarité dans l'enseignement supérieur, et d'apprendre un nouveau langage informatique. 17

IV.Les algorithmes traités Pour chaque algorithme, l'algorithme en lui-même fait l'objet d'une classe qui hérite de la classe StepAlgo, et l'affichage en mode pas à pas fait l'objet d'une deuxième classe qui hérite de la classe StepAlgoGUI. En ce qui concerne l'affichage, on entre en argument un graphe quelconque, puis il s'ouvre une fenêtre composée du graphe, et des trois boutons start, step et finish. Pour commencer la démonstration, on clique sur start, puis pour voir les différentes étapes, on clique successivement sur step. Enfin, si au cours de la démonstration on veut accéder directement au résultat final, on clique sur finish. 4.1. Le problème des arbres couvrants minimaux a) Définition Lors de la phase de conception d'un circuit électrique, on a souvent besoin de relier entre elles les broches de composants électriquement équivalents. Pour interconnecter un ensemble de n broches, on peut utiliser un arrangement de n-1 câbles qui relient chacun deux broches. Parmi tous les arrangements possibles, le plus rentable est souvent celui qui utilise un longueur de câble minimale. On peut modéliser ce problème de câblage à l'aide d'un graphe non orienté connexe (c'est-à-dire un graphe en un seul morceau dont les arêtes ne sont pas orientées) noté G=(S,A), où S et l'ensemble de sommets (qui correspond à l'ensemble de broches) et A l'ensemble d'arêtes (qui correspond à l'ensemble d'interconnections possibles entre toutes les paires de broches). De plus, pour chaque arête (u,v), on a un poids w(u,v) qui correspond à la longueur de câble nécessaire pour connecter u et v. On souhaite alors trouver un ensemble T d'arêtes qui appartiennent à l'ensemble A, qui connecte tous les sommets, qui ne contienne pas de boucle et dont le poids total, c'est-à-dire la somme de tous les poids des arêtes de T, soit minimal. Puisque T ne contient pas de boucle et qu'il relie tous les sommets, il forme un arbre appelé arbre couvrant (il couvre tous les sommets de G). Le problème de la détermination de l'arbre T porte donc le nom de problème de l'arbre couvrant minimal. Les algorithmes de Prim et de Kruskal permettent de résoudre ce problème d'arbre couvrant de poids minimal. 18

Exemple d'arbre couvrant minimal pour un graphe connexe: L'arbre couvrant minimal est représenté en orange. Son poids total est égal à 37. Cet arbre couvrant n'est pas unique: en effet, si on remplace l'arête (b,c) par l'arête (a,h), on obtient un autre arbre couvrant de poids total égal à 37. Définitions et notations: Soit G=(S,A) le graphe connexe de départ, où S est l'ensemble de ses sommets et A l'ensemble de ses arêtes. Si (u,v) est une arête, soit w(u,v) le poids attribué à cette arête. Soit E l'ensemble d'arêtes sélectionnées au cours de l'algorithme et qui formeront au final l'arbre couvrant minimal. L'ensemble G\E désigne l'ensemble des éléments de G qui n'appartiennent pas à E (et donc encore sélectionnables par l'algorithme). Si X est un ensemble d'éléments, on note X le nombre d'éléments qu'il contient. 19

b) L'algorithme de Prim Principe L'algorithme de Prim a pour propriété que les arêtes de E forment toujours un arbre unique. Le principe est le suivant: au départ E est constitué d'une seule arête choisie arbitrairement, puis parmi toutes les arêtes du graphe connectées à l'ensemble E (c'est-à-dire à l'unique arête qui le constitue pour l'instant), on sélectionne celle de poids minimal et on l'ajoute à l'ensemble E. A chaque étape, une arête est ainsi rajoutée à l'ensemble E pour le relier à un sommet isolé de l'ensemble G. Il faut alors faire attention, lorsque l'on sélectionne une arête, que l'ajout de celle-ci à l'ensemble E ne crée pas de boucle dans l'ensemble. Pour cela, il suffit de vérifier, lors de la sélection de l'arête, que l'une de ses extrémités ne soit pas dans l'ensemble E. A la fin de l'algorithme, les arêtes de E forment alors un arbre couvrant de poids minimal. Pour implémenter efficacement l'algorithme de Prim, l'important est de faciliter la sélection de la nouvelle arête à ajouter dans l'arbre constitué des arêtes de E. L'algorithme L'algorithme est le suivant: Soit S' un ensemble vide de sommets Soit A' un ensemble vide d'arêtes Soit E = (S',A') un graphe vide Soit p un entier Soit a une arête Ajouter un sommet u quelconque à S' Tant que ( S' < S ) p = ; a = null; Pour chaque sommet u de S' déterminer l'arête (u,v) de G\E telle que w(u,v) soit minimal Si1 v n'appartient pas à A' Si2 ( w(u,v) < p) p min( w(u,v), p ); a (u,v) ; Ajouter à S' le sommet de l'arête a qui n'appartient pas à S' Ajouter a à A' ; Ainsi, à la fin, S' = S donc S' contient tous les sommets du graphe G, et comme on ajoute une arête à A' seulement si elle relie E à un sommet de G\E, E ne boucle pas. Enfin, on ajoute 20

à A' que des arêtes de poids minimal. On obtient donc bien un arbre couvrant E de poids minimal. Déroulement pas à pas On sélectionne une arête arbitrairement,puis celle de poids minimal parmi ses voisines: 21

L'arête de poids 6 ne peut être sélectionnée sinon cela créerait une boucle, et on n'aurait donc plus un arbre, puis de même pour l'arête de poids 8: Tous les sommets sont couverts pas l'arbre, on obtient donc en rouge un arbre couvrant de poids minimal. 22

c) L'algorithme de Kruskal Principe De même que pour l'algorithme de Prim, au départ l'ensemble E est vide, puis on ajoute à chaque étape une arête de poids minimal à l'ensemble E qui constituera au final l'arbre couvrant recherché. Cependant, contrairement à l'algorithme précédent, l'arête sélectionnée est une arête de l'ensemble G\E dont le poids associé est minimal, elle n'est donc pas obligatoirement adjacente à l'ensemble E. Ainsi, l'ensemble E est une forêt (un ensemble d'arbres disjoints) et non un arbre unique. De plus, au départ, les sommets du graphe sont considérés comme des arbres constitués d'un seul élément. Ainsi, lorsque l'on ajoute à E une arête (u,v), celle-ci ne relie pas E à un sommet mais à un arbre. Au fur et à mesure, on diminue donc le nombre d'arbres disjoints qui constituent E tout en augmentant le nombre de sommets qui appartiennent à E. Comme on effectue cet ajout d'arête de poids minimal tant que E ne contient pas tous les sommets de G, on obtient bien au final un arbre couvrant de poids minimal. Algorithme On a besoin de trois tableaux: vertices[] : un tableau qui contient les sommets, labels[] : un tableau qui contient des labels attribués aux sommets, edges[] : un tableau des arêtes. Pour chaque indice i, labels[i] est le label attribué au sommet vertices[i]. Les labels indiquent de quel arbre le sommet associé fait partie. Au départ, les sommets sont tous dans des arbres différents, donc les labels sont tous différents les uns des autres, chacun étant égal à un chiffre compris entre 1 et le nombre de sommets. Lorsque l'on ajoute une arête à E, on connecte deux arbres pour n'en former qu'un, donc on attribue à tous les sommets de cet arbre le même label, le plus grand des deux labels associés aux deux arbres connectés. A la fin, tous les labels seront donc égaux, E sera en effet constitué d'un seul arbre contenant tous les sommets. Le tableau labels[] sert à simplifier la programmation. En effet, cela permet de ne manipuler que des structures de données simples, des tableaux. Cependant, cela augmente la complexité de l'algorithme car chaque fusion de label nécessite un parcours de tableau, ce qui a une complexité de l'ordre de O(n), alors que contracter les arêtes prendrait O(1) pour aboutir au même résultat. Etant donné que l'objectif est ici de faire un algorithme pas à pas avec affichage, cette augmentation de complexité n'est pas importante: il faut seulement que l'algorithme soit suffisamment rapide pour l'utilisateur, qui fait afficher les étapes à sa guise. 23

L'algorithme est le suivant: Soit E=(S',A') où S' = S et A' est un ensemble vide; Création et initialisation des tableaux vertices, labels, et edges; Tri du tableau edges[] par ordre croissant de poids des arêtes; Pour chaque arête (u,v) du tableau prise par ordre croissant de poids soient i0 et i1 les indices respectifs de u et v dans vertices[] Si1 ( labels[i0] labels[i1] ) soit indx_max = max(i0,i1); soit indx_min = min(i0,i1); Pour chaque label x du tableau labels[] Si2 ( x = indx_min ) x indx_max ; Ajouter (u,v) à A'; Déroulement pas à pas Au départ, on sélectionne une arête dont le poids est minimal,ici égal à 1, et ainsi de suite: 24

Si une arête sélectionnée crée une boucle, on ne la fusionne pas avec l'ensemble E: 25

26

4.2. Le problème du flot maximal a) Définition De même que l'on peut modéliser une carte routière par un graphe orienté pour trouver le plus court chemin d'un point à un autre, on peut également interpréter un graphe orienté comme un réseau de transport et l'utiliser pour répondre à des questions ayant trait aux flots de matériaux. Imaginons un matériau s'écoulant à travers un système depuis une source, où il est produit, vers un puit, où il est consommé. La source produit le matériau à un certain débit, et le puit consomme le matériau avec le même débit. Le flot d'un matériau à un endroit quelconque du système est intuitivement la vitesse avec laquelle ce matériau se déplace. Les réseaux de transport peuvent servir à modéliser l'écoulement des liquides à travers des tuyaux, du courant dans les circuits électriques, de l'information à travers les réseaux de communication, etc... On peut considérer chaque arc du réseau de transport comme un conduit à travers lequel peut s'écouler le matériau. Chaque conduit a une capacité fixe: par exemple le volume horaire de liquide qui peut traverser un tuyau, ou encore l'intensité maximale de courant que peut supporter un câble électrique... Les sommets correspondent aux jonctions du conduit. De plus, à part pour la source et le puit, le débit qui arrive à un sommet est égal au débit qui en sort: c'est la propriété de conservation du flot. Dans le cas du courant électrique, cette propriété équivaut à la loi de Kirchhoff. Le problème du flot maximal est de déterminer la plus grande vitesse à laquelle le matériau peut voyager entre la source et le puit, en obéissant aux contraintes de capacité. La notion de flot et de capacité On considère l'exemple suivant où, pour une raison quelconque, on pousse de s à t 2 unités de flot par le chemin en bleu et 3 unités de flot du même matériau par le chemin en vert: 27

Les valeurs des flots totaux qui traversent chaque arc sont alors: La capacité est la valeur du flot total maximal que l'on peut faire passer par l'arête concernée. Exemple: figure 1 Figure 1 : Il s agit d un réseau de transport qui représente le problème d une entreprise de transport. L usine de Lille est la source s, et le fabricant de Marseille est le puit t. Le trajet traverse plusieurs villes intermédiaires, mais les nombres associés à chaque arc représentent le nombre de rouleaux que l on peut convoyer entre les deux villes à ses extrémités : c est la capacité de l arc. 28

figure 2 Figure 2 : Le flot f du graphe G a pour valeur 19. Seuls les flots positifs sont montrés. Si le flot est positif de u vers v, on a noté f/c sur l arc (u,v) où f et c sont respectivement le flot et la capacité de l arc attribués à (u,v). S il n y a qu un seul nombre associé à un arc, il s agit de sa capacité, car le flot est nul. Afin de résoudre le problème du flot maximal, nous allons maintenant considérer les réseaux de transport sous l angle de la théorie des graphes et définir leurs propriétés. Ainsi, nous allons maintenant représenter un réseau de transport par un graphe orienté G=(S,A) dans lequel chaque arc (u,v) possède une capacité c(u,v) 0. Pour simplifier le problème, on suppose que tous les sommets du graphe différents de la source s et du puit t sont sur un chemin qui va de s vers t. Nous pouvons maintenant définir la notion de flot : Un flot du graphe G est une fonction qui associe à chaque arc du graphe une valeur réelle. Le flot satisfait les trois propriétés suivantes : - le flot qui va d un sommet à un autre ne peut pas dépasser la capacité donnée, - le flot qui va d un sommet u à un sommet v est l opposé de celui qui va de v à u, - tout ce qui rentre, ressort. Définitions et notations : on note f le flot total du graphe G, c est à dire le flot qui part de s et qui arrive en t. on note f(u,v) le flot à travers l arc (u,v). on note c(u,v) la capacité attribuée à l arc (u,v). 29

b) Méthode de Ford Fulkerson Principe Il s agit plutôt d une méthode que d un algorithme dans la mesure où l'on peut l implémenter de plusieurs façons différentes, ayant chacune un temps d exécution différent. Cette méthode est itérative : au départ, le flot à travers chaque arc du graphe est nul, donc le flot du graphe est initialement nul. A chaque itération, on augmente la valeur du flot en trouvant un chemin qui relie la source s au puit t, et le long duquel on peut améliorer la quantité de flot. La méthode est donc la suivante : Initialiser le flot f à 0 Tant que il existe un chemin améliorant p Faire augmenter le flot f le long de p Retourner f Ainsi, après chaque itération, on a augmenté le flot qui traverse le graphe, donc les capacités associées aux arcs sont modifiées, c'est-à-dire diminuées de la valeur dont le flot a augmenté à travers l'arc associé. Le graphe obtenu est appelé graphe résiduel: il contient les capacités résiduelles et les flots. Algorithme On a vu que la vitesse d'exécution de l'algorithme dépend de la manière choisie pour augmenter le flot f du graphe, donc du choix du chemin améliorant. Effectivement, si à chaque étape de la boucle, on augmente le flot de 1 seulement, c'est-à-dire si l'on choisie à chaque itération un chemin de s à t sur lequel passe une unité de flot dans chaque arête, alors on arrivera au résultat après davantage d'itérations que si l'on choisissait à chaque fois un chemin aléatoire, ou mieux, le chemin qui supporte le plus grand flot. Nous avons donc choisi d'augmenter le flot en recherchant à chaque itération le chemin de s à t à travers lequel passe le plus grand flot. L'algorithme nécessite l'utilisation de plusieurs variables, dont six tableaux contenant respectivement les sommets, la distance qui les sépare de s (c'est-à-dire le nombre de sommets qui les séparent de s), leur parent, la valeur du flot maximal qui peut traverser chaque arc, les arêtes, les capacités associées. Soit there_is_a_path une valeur booléenne initialisée à vrai qui renvoie l'éventuelle existence d'un chemin qui relie s à t. 30

On a besoin de plusieurs méthodes: init_arrays(): au début de chaque itération, il faut mettre à jour les tableaux car les valeurs des flots et des capacités ont changé à l'étape précédente. setdistance(s,t): remplit le tableau des distances entre chaque sommet et s. Si un sommet n'est pas relié à s, on met sa distance à l'infini. Si l'élément à l'indice i du tableau des sommets est t et que l'élément à l'indice i du tableau des capacités est l'infini, alors there_is_a_path devient faux. Autrement dit, si la distance entre s et t est infinie, c'est qu'il n'existe pas de chemin entre s et t donc la variable there_is_a_path devient fausse. sort_distance_and_vertices(s): trie par ordre croissant de distance le tableau des sommets et celui des distances. setflowmax(): remplit le tableau qui contient le flot maximal qui peut traverser chaque arc. setbestpath(s,t): renvoie le chemin à travers lequel peut circuler le plus de flot. setedgesofthepath(): remplit un tableau contenant les arcs qui constituent le chemin déterminé précédemment. update_residual_graph(): met à jour le graphe résiduel. Soit flot_max le flot maximal qui peut parcourir le chemin. Pour chaque arc du chemin: - diminue la capacité de l'arc de la valeur flot_max, - augmente le flot de l'arc de la valeur flot_max, - créer l'arc opposé s'il n'existe pas déjà, et ajouter à sa capacité la valeur flot_max, son flot est l'opposé du flot considéré précédemment. deletebestpath(): cette méthode supprime tous les arcs qui composent le chemin. setfinalgraph(): à la fin de l'algorithme, on souhaite afficher non pas le graphe résiduel mais le graphe final, correspondant au graphe initial sur lequel est indiqué le flot maximal qui peut parcourir chaque arête. L'algorithme est le suivant: there_is_a_path = vrai; Initialisation du flot à 0; Soit arcs[] le tableau contenant les arcs du graphe; Soit capacities[] le tableau des capacités correspondant aux arcs de même indice; Tant que (there_is_a_path = vrai) init_arrays(); setdistance(s,t); Si (there_is_a_path = faux) sortir de la boucle tant que; sort_distance_and_vertices(s); setflowmax(s,t); setbestpath(s,t); edges_of_the_path = new MascoptArc[best_path.length()]; setedgesofthepath(s); update_residual_graph(); deletebestpath(); setfinalgraph(); 31

Déroulement pas à pas Le graphe initial est le suivant. L'utilisateur a choisi les sommets s et t représentés en vert, qu'il a pu sélectionner avec la souris: A la première étape, le flot maximal qu'un chemin peut faire passer de s à t est 12. La figure ci-dessous représente le chemin en question, en rouge, puis on met à jour le graphe résiduel: 32

Visiblement, il n'y a plus de chemin possible orienté de s vers t. Le graphe final est donc le suivant: Le flot maximal qui peut être acheminé de la source s au puit t à travers le graphe a donc la valeur 23. 33

c) Application: couplage dans un graphe biparti Principe On considère un graphe biparti, c est-à-dire un graphe constitué de deux ensembles de sommets, reliés entre eux par un ensemble d arêtes. Ainsi, le graphe est composé de paires de sommets d ensembles différents reliés par une arête. Par contre, une arête ne peut avoir deux sommets appartenant au même ensemble à ses bornes. Le problème du couplage maximal consiste à déterminer le nombre maximal d arêtes du graphe qui suffisent pour relier le plus possible de sommets tout en respectant la contrainte suivante : chaque sommet peut avoir au plus une arête du couplage adjacente. On appellera Sg l ensemble des sommets de gauche du graphe, et Sd l ensemble des sommets de droite. Exemple: figure 1 figure 2 La figure 1 représente un exemple de graphe biparti. La figure 2 représente un couplage de ce graphe qui contient 4 arêtes. Or on remarque que tous les sommets de la partie droite du graphe sont touchés par les arêtes du couplage, que l'on ne peut donc pas agrandir. Il s'agit donc d'un couplage maximal. L'exemple ci-dessus montre de plus qu'un couplage maximal n'est pas unique: en effet, si l'on remplace la dernière arête du couplage par celle qui est juste au-dessus, on a toujours un couplage maximal. 34

Pour résoudre ce problème, une manière possible est d utiliser l algorithme de FordFulkerson. Pour cela : on crée deux sommets : une source s à gauche de Sg, et un puit t à droite de Sd. On crée ensuite une arête entre s et chaque sommet de Sg, et entre chaque sommet de Sd et t. on oriente alors le graphe obtenu en orientant chaque arête de gauche à droite. on attribue une capacité égale à 1 à chaque arête adjacente à s ou à t, et une capacité infinie à tous les autres arcs (qui se trouvent donc être les arcs du graphe initial). On obtient alors un graphe orienté possédant une source et un puit, sur lequel on peut donc appliquer l algorithme de Ford-Fulkerson. On remarquera que, d après la construction, l ensemble des arcs du graphe initial est égal à l ensemble des arcs non adjacents à s ni à t. Nous allons maintenant expliquer pourquoi cet algorithme donne bien un couplage maximal du graphe biparti initial. Tout d abord, les capacités entrantes en chaque sommet de Sg sont toutes de 1, et comme le flot entrant en un sommet ne peut dépasser la capacité entrante, il peut sortir de chaque sommet de Sg au plus une unité de flot. De même, les capacités sortantes de chaque sommet de Sd sont toutes égales à 1, chaque sommet de Sd ne peut donc être traversé que par au plus une unité de flot. Ainsi, au final, comme un flot est toujours un entier, le flot qui sort d un sommet de Sg ne peut pas traverser deux arcs différents, et le flot qui traverse un sommet de Sd ne peut pas être issu de deux arcs différents. Or, on considère que le couplage obtenu est la réunion des arcs du graphe orienté (non adjacents à s ou t) qui sont traversés par un flot égal à 1. La contrainte selon laquelle chaque sommet du graphe peut avoir au plus une arête du couplage adjacente est donc bien respectée. Ensuite, comme chaque arc ne peut être parcouru que par un flot nul ou égal à 1, le flot total correspond au nombre d arcs de flot non nul adjacents à s, ou encore au nombre d arcs de flot non nul adjacents à t, mais encore et surtout au nombre d arcs du graphe initial traversés par un flot non nul. Or le flot déterminé par l algorithme de Ford-Fulkerson est le flot maximal qui peut traverser le graphe, donc le nombre maximal d arêtes qui peuvent constituer un couplage. On obtient donc bien un couplage maximal du graphe biparti. 35

Exemple: La figure ci-dessous représente le graphe orienté créé à partir du graphe biparti afin de lui appliquer l'algorithme de Ford-Folkerson: La figure ci-dessous représente le résultat de l'algorithme de Ford Fulkerson: le couplage correspond aux arcs qui appartiennent au graphe biparti dont le flot est égal à 1. 36

Algorithme Il suffit de créer le graphe orienté et d'appliquer directement l'algorithme de FordFulkerson. Ainsi, on a besoin d'une méthode qui crée le graphe orienté tel que nous l'avons vu précédemment, et d'appliquer directement les méthodes de l'algorithme de FordFulkerson (et dans le même ordre). Cependant, pour l'affichage, on ajoute une méthode qui colorie les arêtes pour faire ressortir le couplage, que l'on insère à la fin de la boucle Tant que de l'algorithme. Déroulement pas à pas On affiche directement le graphe orienté créé. Puis, à la fin de l'algorithme de Ford Fulkerson, on a: Finalement, on en déduit un couplage maximal du graphe biparti initial: 37

4.3. Algorithme de graphe couvrant de coloration minimale Cet algorithme peut être utile pour des problèmes d'optimisation de réseaux de communication. Il a été développé au sein même du projet, afin de palier à des problèmes engendrés par des pannes dans un réseau de fibres optiques. Principe On considère un graphe G = (S,A) non orienté connexe dont toutes les arêtes sont colorées. Une même couleur peut être attribuée à une ou plusieurs arêtes. Le but de l'algorithme est déterminer un ensemble E de couleurs suffisantes tel que: on obtienne un graphe connexe qui couvre tous les sommets du graphe initial, ce graphe soit uniquement constitué d'arêtes du graphe initial dont la couleur appartienne à E. Ainsi, cet algorithme est itératif et construit un graphe G' initialement vide en lui ajoutant à chaque étape les arêtes d'une couleur sélectionnée. Cette couleur est déterminée comme étant la couleur non encore choisie qui ajouterait au graphe G' le plus grand nombre de sommets de G. Cependant, toutes les arêtes de cette couleur ne sont pas forcément utiles: par exemple, si une arête de G relie deux sommets qui sont déjà dans G', cette arête n'est pas nécessaire. Il faut donc supprimer les arêtes inutiles avant chaque itération. Exemple: Sur ce graphe, on remarque que l'une des trois arêtes vertes est inutile, donc on la supprime: 38

On sélectionne la couleur rouge car c'est elle qui touche le plus grand nombre de sommets. On peut alors supprimer une arête verte qui est inutile: On remarque qu'en sélectionnant la couleur bleu, tous les sommets du graphe sont touchés, et que les arêtes vertes et jaunes sont toutes inutiles donc on les supprime: On obtient donc un graphe connexe qui relie tous les sommets en un minimum de couleurs. Un ensemble minimal de couleurs suffisantes est donc {rouge,bleu}. 39

Algorithme Chaque couleur est représentée par un entier. On considère une couleur comme un ensemble d'arêtes. Au cours de l'algorithme, les ensembles des sommets,des arêtes et des couleurs associées à chaque arête sont répertoriés dans des tableaux. On a aussi besoin d'une liste des couleurs non encore choisies, et d'une liste des couleurs choisies. De plus, on appelle les méthodes suivantes: setcolor() : détermine la couleur qui, si on la sélectionne, ajoute le plus de sommets à G'. Cette méthode fait appel à une autre méthode qui, pour une couleur donnée, détermine le nombre de sommets de G\G' touchés. Elle fait cet appel pour chaque couleur de C, et mémorise dans un tableau le résultat, et enfin, elle renvoie la couleur associée au plus grand élément de ce tableau. update_g'(): met à jour G' en lui ajoutant les arêtes de la couleur sélectionnée et bien sûr les sommets à leurs extrémités. update_g(): met à jour G en supprimant les arêtes inutiles. Si une couleur disparait car toutes ces arêtes viennent à disparaître, cette méthode supprime alors la couleur de la liste C, car elle ne pourra plus être choisie. L'algorithme est alors le suivant: Soit G' le graphe que l'on construit; Soit C la liste des couleurs encore sélectionnables; Soit E la liste des couleurs choisies; G' est vide; C contient toutes les couleurs du graphe initial G; E est vide; Suppression des arêtes de G inutiles Tant que tous les sommets de G ne sont pas dans G' setcolor(); Ajouter la couleur sélectionnée à E; Supprimer la couleur sélectionnée de C; update_g'(); update_g(); Retourner E; 40