Vincent SAMILLON Maître de stage : Guillaume CAVORY Laboratoire de Génie Informatique et d'Automatique de l'Artois à Béthune RAPPORT DE STAGE CRÉATION D'UN OUTIL DE GÉNÉRATION DE SCÉNARII ET D'ANALYSE DES RÉSULTATS POUR UN ALGORITHME GÉNÉTIQUE Master I Génie Mathématique et Informatique Université des Sciences et Technologies de Lille Année 2008-2009 Table des matières Remerciements ..................................................................................................................................... 3 INTRODUCTION ............................................................................................................................... 4 I Présentation du LGI2A ...................................................................................................................... 6 A . le LGI2A en bref ........................................................................................................................ 6 B . Thèmes de recherche ................................................................................................................. 6 C . Les Algorithmes Génétique ...................................................................................................... 7 1. Qu'est ce qu'un AG ( Algorithme Génétique) ........................................................................ 7 2. Exemple d'opérateurs ............................................................................................................ 7 3. Exemple d'application .................................................................................................................................................... 8 II LE CADRE DU STAGE : MAGe .................................................................................................... 9 A . Qu'est ce que MAGe ............................................................................................................... 9 Diagramme UML d'une version de MAGe ........................................................................... 10 B. Configuration d'une campagne ....................................................................................................................................................... 11 C. Lancement des Optimisations .................................................................................................. 12 ............................................................................................................................................................ 13 III / LES TRAVAUX EFFECTUÉS ET LES APPORTS DU STAGE............................................... 13 A. Analyse des besoins ................................................................................................................. 13 B. Les outils mis à ma disposition................................................................................................. 14 C. Présentation de l'application .................................................................................................... 14 D . Bilan du stage .......................................................................................................................... 22 Problèmes rencontrés ............................................................................................................... 22 Apports du Stage ..................................................................................................................... 22 Conclusion ............................................................................................................................................................ 23 Remerciements Avant tout développement sur cette expérience professionnelle, il m'apparaît opportun de commencer ce rapport de stage par des remerciements, Aussi, je remercie Guillaume CAVORY, mon maître de stage pour le temps qu'il m'a consacré afin de comprendre le thème et les aboutissements des recherches menées par son équipe et pour la confiance et la liberté qu'il m'a accordées dans la gestion du projet. Je remercie également l’ensemble de mes professeurs de l'IUP GMI, pour la diversité et la qualité de leurs enseignements qui ont facilité mon autonomie et mon adaptation à cette mission. INTRODUCTION Ce stage de un mois effectué dans le cadre du Master I informatique parcours GMI de Lille m'a permis de découvrir le travail d'une équipe d'un Laboratoire d' Informatique, le LGI2A à Béthune, et d'y mener une partie du projet du début à la fin. L'annonce du stage était la suivante : TITRE: Création d'un outil de génération de scénarii et d'analyse des résultats pour un algorithme génétique THEME: Algorithme génétique, plan d'expériences, analyse de données OUTILS: Java, netbeans, XML ANNONCE : Le LGI2A développe actuellement un algorithme génétique. L'inconvénient de cet algorithme génétique (comme de tous les autres) est la création de campagnes d'essais. Lors d'une campagne, il faut générer beaucoup de fichiers de configuration (au format XML) et lancer tous les essais. Une fois les optimisations réalisées, il faut ensuite analyser les résultats. Le travail demandé consiste à créer une interface graphique permettant de générer facilement les fichiers de configuration et aussi de lancer les optimisations. Les optimisations pourront être réparties sur plusieurs machines. Une deuxième interface d'analyse sera demandée afin d'extraire les résultats des fichiers d'optimisation (également au format XML). La méthode des plans d'expériences pourra être une bonne approche, mais d'autres méthodes pourront être utilisées. Cette annonce m'a attiré pour le domaine de recherche ainsi que par les technologies avec lesquels devait être développer le projet, Hormis la possibilité d'approfondir mes connaissances en Java J2EE et notamment en programmation d'interface Homme Machine, ce stage m'as permis de concevoir une application et de la développer, tout en découvrant un domaine de recherche à savoir les algorithmes génétique. Dans ce rapport je m'attacherai à mettre en évidence l'expérience et les connaissances que m'ont apportées la découverte d'un laboratoire informatique, ainsi que les connaissances que j'ai pu acquérir dans ce domaine. Pour cela dans une première partie je ferai une présentation du LGI2A( Laboratoire de Génie Informatique et d' Automatique de l'Artois), puis je décrirai dans une seconde partie le projet sur lequel j'ai été amené a travailler afin de permettre au lecteur de percevoir les difficultés et les objectifs de la mission, que j'ai du faire remplir lors de ce stage, Dans une troisième partie , je ferai part des travaux que j'ai effectués d'un point de vue fonctionnelle et en abordant certaines difficultés techniques que j'ai dû surmonter, je terminerai sur le bilan de cette expérience et les perspectives d'évolution de mon projet au sein du projet global. I Présentation du LGI2A A . le LGI2A en bref L’objectif du laboratoire multidisciplinaire LGI2A est de fédérer des compétences informatique et automatique du pôle universitaire de Béthune autour d’une thématique transversale "Logistique" qui s’est fortement développée avec la création locale de filières d’enseignement (DUT QLIO, Licence Professionnelle Melog, Master e-log, Master OGP). La maîtrise des flux physiques, des flux financiers et des flux d’information sont des points de passage obligés à toute démarche de progrès dans l’entreprise. Les travaux de recherche concernent l’étude et la conception d’outils pour améliorer le pilotage des différents maillons de la chaîne logistique globale (Approvisionnement - Production Transport - Distribution). B . Thèmes de recherche La thématique de recherche entre dans le cadre du pilotage des systèmes discrets complexes. Elle cherche à définir de nouveaux modèles pour étudier le comportement des systèmes considérés ici (systèmes discrets distribués, grande diversité des éléments, objectifs contradictoires, contraintes multiples, perturbations). Compte tenu de la complexité intrinsèque de ces systèmes, une modélisation orientée "multi-modèles" (Simulation - Réseaux de Petri - Multiagents) est bien adaptée. Par ailleurs, compte tenu de l’imperfection des informations gérées par ces modèles, des approches Fusion d’informations sont mises en place (théorie des possibilités, théorie de l’évidence...). Elle propose également de nouvelles méthodes d’ordonnancement qui permettent, à partir de ces modèles, de coupler les approches par optimisation statique avec les approches dynamiques issues du domaine du pilotage des systèmes. Pour répondre en partie à ces problèmes, les travaux de recherche se sont structurés autour de trois axes complémentaires : Modélisation des Systèmes Complexes : Evaluation et Commande des Modèles Discrets et Continus Fusion d’information : Aide à la Décision et Analyse multi-critère Optimisation combinatoire : approches évolutionnistes mono et multi objectifs C'est dans ce dernier domaine que l'on peut classer les AG (algorithmes génétiques ) et MAGe (Multi Algorithme Genétique) qui est développé par le LGI2A. Afin de mieux appréhender le cadre dans lequel s'est déroulé mon stage, j'explique par la suite ce qu'est un algorithme génétique, les particularités de MAGe, ainsi que son mode fonctionnement. C . Les Algorithmes Génétique 1. Qu'est ce qu'un AG ( Algorithme Génétique) Les algorithmes génétiques appartiennent à la famille des algorithmes évolutionnistes. Les algorithmes évolutionnistes ou algorithmes évolutionnistes, sont une famille d'algorithmes s'inspirant de la théorie de l'évolution pour résoudre des problèmes divers. Ils font ainsi évoluer un ensemble de solutions à un problème donné, dans l'optique de trouver les meilleurs résultats. Ce sont des algorithmes stochastiques, car ils utilisent itérativement des processus aléatoires. Les algorithmes génétiques utilisent la notion de sélection naturelle développée au XIXe siècle par le scientifique Darwin et l'appliquent à une population de solutions potentielles au problème donné. On se rapproche par "bonds" successifs d'une solution, comme dans une procédure de séparation et évaluation, à ceci près que ce sont des formules qui sont recherchées et non plus directement des valeurs. Ce type d'algorithme utilise des outils issus de la biologie génétique, essentiellement des opérations intervenant au sein d'un organisme et entrant en jeu dans les mécanismes de la sélection naturelle. 2. Exemple d'opérateurs Ces opérations peuvent être : la sélection , la mutation, enjambement et d'autres encore. Les algorithmes génétiques, afin de permettre la résolution de problèmes, se basent sur les différents principes décrits ci-dessus. De manière globale, on commence avec une population de base qui se compose le plus souvent de chaînes de caractères correspondant chacune à un chromosome. Le contenu de cette population initiale est généré aléatoirement. On attribue à chacune des solutions une note qui correspond à son adaptation au problème. Ensuite, on effectue une sélection au sein de cette population. Il existe plusieurs techniques de sélection. Voici les principales utilisées : Sélection par rang Cette technique de sélection choisit toujours les individus possédant les meilleurs scores d'adaptation, le hasard n'entre donc pas dans ce mode de sélection. Probabilité de sélection proportionnelle à l'adaptation (appelé aussi roulette ou roue de la fortune) Sélection par tournoi Sélection uniforme La sélection se fait aléatoirement, uniformément et sans intervention de la valeur d'adaptation. Chaque individu a donc une probabilité 1/P d'être sélectionné, où P est le nombre total d'individus dans la population. Lorsque deux chromosomes ont été sélectionnés, on réalise un enjambement. On effectue ensuite des mutations sur une faible proportion d'individus, choisis aléatoirement. Ce processus nous fournit une nouvelle population. On réitère le processus un grand nombre de fois de manière à imiter le principe d'évolution, qui ne prend son sens que sur un nombre important de générations. On peut arrêter le processus au bout d'un nombre arbitraire de générations ou lorsque qu'une solution possède une note suffisamment satisfaisante. En effectuant ces opérations (sélection de deux individus, enjambement, mutation), un nombre de fois correspondant à la taille de la population divisée par deux, on se retrouve alors avec une nouvelle population (la première génération) ayant la même taille que la population initiale, et qui contient globalement des solutions plus proches de l'optimum. Le principe des algorithmes génétiques est d'effectuer ces opérations un maximum de fois de façon à augmenter la justesse du résultat. 3. Exemple d'application Le problème du voyageur de commerce : Ce problème est un classique d'algorithmique. Son sujet concerne les trajets d'un voyageur de commerce. Par le biais d'algorithmes génétiques, il est possible de trouver des chemins relativement corrects. Applications industrielles Optimisation de la chaine de production dans l'industrie automobile. Informatique décisionnelle Les algorithmes génétiques sont mis en œuvre dans certains outils d'informatique décisionnelle ou de data mining par exemple pour rechercher une solution d'optimum à un problème par mutation des attributs (des variables) de la population étudiée. Ils sont utilisés par exemple dans une étude d'optimisation d'un réseau de points de vente ou d'agences (banque, assurance, ...) pour tenter de répondre aux questions : quelles sont les variables (superficie, effectif, ...) qui expliquent la réussite commerciale de telle ou telle agence ? en modifiant telle variable (mutation) de telle agence améliore-t-on son résultat ? II LE CADRE DU STAGE : MAGe Pour bien cerner la raison d’être de ma mission, il apparaît nécessaire de développer le fonctionnement de MAGe. A . Qu'est ce que MAGe MAGe (Multi Algorithme Génétique) est un AG ayant les particularités suivantes : plusieurs populations possible un individu peut avoir plusieurs chromosomes chaque chromosome peut avoir son propre fitness (permettant ainsi de faire plus finement du multi-objectif) un chromosome est un objet (au sens informatique) la configuration et les résultats sont en XML En Rouge les différences entre un AG standard et MAGe : AG MAGe 1 population z populations N individus N individus 1 chromosome y chromosomes X gènes X gènes 1 allèle t allèles Diagramme UML d'une version de MAGe La classe principale de l'application MAGe est multiAG, elle permet de lancer les optimisations sur un fichier de configuration xml donné en paramètre. Les classes abstraites et autres classes parentes représentent des types d'opérations génétiques. Par exemple : la sélection avec la classe AbstractSelection, on voit ici qu'il y a deux deux opérateurs génétiques correspondant à la sélection SelectionDeterministe et SelectionTournoiSchochastique. Les opérations génétique au sein de MAGe ont été conçus et implémentés en tant qu'objets ce qui permet de créer et d'ajouter de nouvelles opérations sans avoir à refondre l'ensemble de l'application. MAGe est vraiment évolutif ! B. Configuration d'une campagne Le fichier de configuration de MAGe se fait entièrement en XML. Jusqu'ici la configuration se faisait manuellement, pour une campagne le nombre d'essais pouvant être important ce travail était fastidieux. Voici un exemple suivi des explications : Exemple de fichier de configuration : 1. < ?xml version="1.0" standalone="yes"?> 2. < ?xml-stylesheet href="./mage.xsl" type="text/xsl" ?> 3. < mage interface="true" nombreDeRun="35"> 4. < population nom="adjOmote" trace="10" > 5. < converge nom="NGene" > 25000 </converge> 6. < mutation nom="Swap" probabilite="0.0001"/> 7. < crossover nom="Naive" probabilite="0.8"/> 8. < initialisation nom="InitInteger" > 0 4 </initialisation > 9. < evaluation nom="NurseRostering"> instance.dat </evaluation > 10. < objectif nom="min" /> 11. < elitism value="true"/> 12. < remplacement nom="RemplaceRang" /> 13. < selection nom="Selection" > 2 </selection > 14. < individu nombre="30" nombreChromosome="5" nombreGenesParChromosome="5:10:15:20:25" /> 15. < /population> 16. < /mage> Les explications 1. En-tête du fichier xml. 2. Déclaration du fichier de formatage (pour l'affichage dans un navigateur web) 3. Déclaration d'un nouveau MAGe avec interface graphique lors de l'optimisation activé à true 35 runs différents à réaliser 4. Déclaration d'une nouvelle population le nom de la population est adjOmote et le fichier résultat sera donc adjOmote.xml toute les 10 générations, on place dans le fichier test_runXX.val (ou XX est le numéro du run en cours) les valeurs du fitness mini, moyen et maxi. 5. L'opérateur de convergence est NGene. Cet opérateur recevra le paramètre 25000 6. La mutation est de type swap et la probabilité de mutation est de 0.0001 7. Le cross-over est de type Naive avec 0.8 de probabilité. 8. L'initialisation des individu se fait grace à l'opérateur InitInteger avec les paramètres 0 et 4 9. L'évaluation des individus utilise la classe NurseRostering. Cette classe recevera le paramètre instance.dat 10. L'objectif est de minimiser les individus 11. On réalisera de l'élitisme durant l'optimisation 12. Pour réaliser le remplacement des individus on utilisera la classe RemplaceRang 13. La sélection des individus utilisera la classe Selection avec comme paramètre 2 14. Le nombre d'individus dans la population est de 30 et chaque individu aura 5 chromosomes ayant respectivement 5, 10, 15, 20 puis 25 gènes. 15. Fin de déclaration de la population. A ce point, il est possible de déclarer une autre population. 16. Fin de déclaration du MAGe. Ne plus rien mettre après. Si on désire utiliser plusieurs populations en même temps, il suffit de mettre dans le fichier de configuration plusieurs blocs population. Pour les opérateurs d'initialisation, de sélection, d'accouplement, d'évaluation, de croisement, de mutation et de remplacement, on indique dans le paramètre nom le nom de la classe désirée (il ne faut pas oublier de la compiler !) L'opérateur d'évaluation est particulier dans le sens où il est spécifique à la résolution d'un type de problème. Il est nécessaire d'être expert afin de modéliser un problème sous la forme d'une population au sens génétique. Par exemple NurseRostering est utiliser dans la résolution de problème de plaining hospitalier, il est toujours associé un fichier contenant les données utiles a l'opérateur d'évaluation, et correspondant aux informations sur les gènes des chromosomes des individus d'une population. Il en existe d'autre comme VRP qui modélise des problèmes du voyageurs de commerce, trouver le chemin le plus court. Il est possible de visualiser directement dans un navigateur ce fichier gâce à un autre fichier de type XSL, qui permet la mise en forme d'un fichier XML en format HTML, c'est un excellent outil pour la présentation des données XML. C. Lancement des Optimisations Fichier de configuration en XML ! MAGe Fichiers résultats en XML ! Présentation de la configuration d’une campagne manuellement (sans IHM) Le lancement des optimisations se faisaient aussi manuellement directement en ligne de commande , ou à l'aide d'un script l lorsque le nombre de fichiers .xml de configuration était important. Un fichier de résultat dont le nom figure dans le fichier de configuration XML balisé de la façon suivante : <xml>,,, ... <fichier_resultat nom="MUTrandom_result_pop1.xml" /> </population> </mage> Once the optimizations were launched this results file is created in the execution directory of MAGe application. III / LES TRAVAUX EFFECTUÉS ET LES APPORTS DU STAGE A. Analyse des besoins Le premier objectif du stage était de concevoir une interface graphique permettant de générer ces fichiers de configuration Pour y parvenir il m'a fallu prendre connaissance de l'existant , pour cela j'ai du faire appel a mes connaissances en java acquise au cours de ma formation afin de procéder a une analyse de l'existant et pourvoir envisager des solutions Lors de la création d'une campagne il faut générer beaucoup d'essais au format XML. Il fallait donc trouver des solutions pour créer une campagne d'essais à partir d'opérateurs qui ne sont autres que des classes java dans l'application MAGe. L'algorithme MAGe étant au stade de la recherche cela implique qu'il est amené à évoluer, et en ce qui concerne l'application que j'ai eu a développer cela implique qu'elle devait être compatible avec les futurs versions de MAGe qui contiendrait certainement des opérateurs supplémentaires. Les opérateurs étant amenés à évoluer en nature et en nombre, il fallait que cette application puisse elle aussi s'adapter à ces évolutions pour ne pas avoir à être actualiser (recompilé) à chaque nouvelle version de MAGe ou pire encore s'éffondrer au bout de quelques versions de MAGe. Le nombre d'opérateurs pouvant être important il fallait pouvoir les organiser de la façon la plus claire et la plus facile d'utilisation possible. J'ai donc suggérer à ce sujet que les opérateurs soient regroupés au sein d'un même paquetage, cette remarque a été approuvée et sera certainement mise en oeuvre dans les prochaines versions. Lors d'une campagne d'essais on peut faire varier un ou plusieurs opérateurs d'un essai à l'autre soit par leur nom (type d'opération) soit par les valeurs qu'ont leur attribue, les essais ainsi constitués sont les combinaisons de tous les opérateurs choisis. En vue de pouvoir lancer les optimisations sur les fichiers de configuration et d'analyser les résultats, il apparaît nécessaire d'organiser des sauvegardes et de pouvoir les réutiliser dans le but de procéder à une analyse des résultats. Il fallait également pouvoir lancer les optimisations à la volé sans avoir à modifier la classe principale de l'application MAGe. L'AG étant très gourmand en calcul (des optimisations peuvent parfois prendre des heures voir des jours d'éxécution), l'application devait rester réactive pendant les optimisations, B. Les outils mis à ma disposition Afin de développer l'interface de Mage j'ai eu a ma disposition : - Le code source de MAGe ansi que le diagramme UML - un PC sous l'environnement Windows ainsi que les munis des environnements de développement NetBeans et Eclipse. NetBeans permet l'utilisation rapide de composant swing, il génère automatiquement le code associé à ces composants, les classes ainsi créées sont appelés beans , elles sont facilement réutilisables. Le travail des premiers jours du stage a consisté à me familiariser avec l'environnement NetBeans et à approfondir ma connaissance de la bibliothèque java SWING. Ce travail préalable était un point de passage nécessaire pour prendre connaissance des possibilités qu'offrent ces outils de développement afin d'élaborer un cahier des charges et pouvoir envisager des solutions techniquement réalisable. Les projets réalisés dans le cadre de ma licence m'ont permis de gagner du temps et de m'adapter. C. Présentation de l'application A travers quelques écrans je vais expliquer le fonctionnent de l'application que j'ai développée. Illustration 1: Figure 1 : Menu principal de l'application Comme on le voit sur la figure 1, on peut à partir de l'application soit ouvrir une nouvelle campagne soit ouvrir une campagne existante et ayant été créée a partir de cette application. La figure 2 ci-dessous présente le menu pour la création d'une nouvelle campagne, l'utilisateur doit tout d'abord saisir le nom de la campagne tel qu'il souhaite qu'elle soit sauvegardée. Puis choisir la version de MAGe qu'il souhaite. L'utilisation de la version de MAGe par défaut n'entraine pas d'autre choix supplémentaire, par contre la sélection d'une autre version que celle par défaut oblige l'utilisateur à choisir le nom du paquetage ainsi que le nom de la classe principale de cette version de MAGe. L'application devait permettre de sélectionner les opérateurs nécessaires à la configuration de scénarii . Ces menus pour la création d'une nouvelle campagne répondent au problème posé par l'évolution constante de MAGe. J'ai proposé cette solution afin que mon application soit compatible avec les versions futures et n'a pas besoin d'être modifiée à chaque ajout ou modification d'opérateurs dans MAGe. J'ai crée une classe au sein de mon application qui en fonction du jar sélectionné pour le MAGe et le nom du paquetage va créer une arborescence d'opérateur comme on peut le voir sur l'écran suivant (figure 3). On distingue 3 éléments différents sur la figure 3 numéroté de 1 à 3 : - La partie 1 est un panel contenant L'arborescence d'opérateurs chaque répertoire représente un type d'opération (exemple : accouplement ) et chaque classe un opérateur pouvant être sélectionné et paramétré grâce à la partie 3. 3 -2Configuration d'une campagne - Figure La partie est utile à la configuration de l'individu (balise individu du fichier xml ) elle est obligatoire pour toute campagne. - La partie 3 permet de sélectionner les opérateurs pour les différents essais de la campagne, les opérateurs sélectionnés par « Sélection Invariante » seront les mêmes pour tous les essais , les autres seront combinés à raison de un type d'opération par essai. Par exemple en sélectionnant 2 opérateurs d'accouplement et trois 3 opérateurs de mutation par « sélection variante » on aura 6 essais différents contenant chacun 1 opérateur d'accouplement et 1 opérateurs de mutation. Une fois les opérateurs sélectionnés il faut générer les essais , en cliquant sur le bouton « Générer populations ». Un nouvel onglet « explorateur » est créé, il contient les différents essais générés pour la campagne Les essais sont générés automatiquement par une classe « ConfigGenerator » qui constitue le coeur des traitements de mon application, elle prend en paramètre les listes d'opérateurs sélectionnés et génère les fichiers xml correspondant. Sur la figure 4 ci dessous on peut voir l'explorateur On y voit a gauche une arborescence du répertoire de sauvegarde de la campagne. Il est possible grâce a cet interface de visualiser les essais créés dans le panel de droite et de lancer les optimisations a l'aide des boutons situer en bas de l'ecran. Comme on peut le voir les optimisations peuvent être lancées une à une ou toutes en même temps. Pour chaque essai lorsque l'on lance l'optimisation une fenêtre pop-up est ouverte elle contient deux onglets le premier ci-dessous (figure 4) récapitule la configuration de l'essai. Le deuxième onglet (Figure 5) affiche en temps réel l'état d'avancement de l'optimisation en cours. Figure 5: fenêtre pour l'optimisation (récapitulatif de la configuration de la population 0 de l'essai 0) Figure 6 :visualisation en temps réel des fitness pour la population 0 de l'essai 0 D . Bilan du stage Le bilan est positif selon les mots de mon tuteur au LGI2A : « Je n'ai qu'une seule remarque à faire pour l'instant : du vrai bonheur ! Je fais des tests plus poussé pour traquer d'éventuels problèmes, mais pour l'instant, je prends plaisir à utiliser votre projet. A bientôt, G. » Le stage étant très court et n'ayant pas eu de binôme sur ce projet , il m'a manqué du temps pour réaliser la deuxième partie du projet qui était une interface d'analyse des résultats ( ou optimisations). C'est avec regret que j'ai du renoncer à faire cette seconde partie. Problèmes rencontrés Durant ce stage j'ai rencontré certaine difficultés d'ordre technique que j'ai du surmonter : - Créer une arborescence de classes à partir d'une archive .jar . - Créer un menus de sélection et de paramètrage d'opérateur génétique pour la configuration d'essais, car les opérateurs ont des attributs différent voir spécifique. - ordonnancement des operateurs : l’agorithme génétique attend les opérateurs dans un certain ordre ce qui implique la nécessité d'un tri pour ne pas contraindre l'utilisateur a sélectionner les opérateurs dans un ordre précis l'inconvénient de cette méthode et que qu'il fallu définir une fonction de tri qu'il faudra redéfinir si l'on ajoute un nouveau type d'opérateur à MAGe (le problème ne se pose pas si l'on ajoute un opérateur d'un type existant ). Afin de pouvoir ouvrir une campagne ayant était créée précédemment, il m'a fallu gérer un fichier de configuration, sauvegardé dans le répertoire de la campagne afin de mémoriser la version de MAGe utilisée pour la configuration de la campagne. Ceci permet de lancer les optimisations sur les essais créés avec la bonne version de MAGe. Apports du Stage Ce stage m'as permis : - De procéder à l'étude d'un projet de petite taille. - De me familiarisé avec l'environnement netbeans - D'approfondir ma connaissance de la bibliothèque Swing en Java - De gérer un projet du début a la fin - D'acquérir de nouvelle connaissance pour le développement d'interface graphique et de méthode tel que le design pattern MVC afin de séparer la logique applicative de l'unité graphique. - D'acquérir plus d'autonomie : recours à l'auto-documentation. - De découvrir des travaux de recherche sur les Algorithmes génétiques. Conclusion Cette mission m'a donné l'occasion de prendre des initiatives et de proposer des solutions. Les technologies utilisées sur le projet sont aujourd'hui très répandues , l'expérience acquise pourra certainement être mise à profit dans mes futures missions. Je retiens de ce stage un bilan positif, car proposer une solution satisfaisante pour l'utilisateur a été pour moi une expérience très gratifiante.