La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Migration de GALOPPS du C vers JAVA (Phase 2)

Présentations similaires


Présentation au sujet: "Migration de GALOPPS du C vers JAVA (Phase 2)"— Transcription de la présentation:

1 Migration de GALOPPS du C vers JAVA (Phase 2)
Genetic ALgorithm Optimized for Portability and Parallelism System Genetic Algorithms Research and Applications Group Par Soumaya Chaffar, Alicia Heraz, Roxane Kouassi, Janice Ng Ka-Yee, Yannick Solari Université de Montréal ~ Faculté Arts & sciences ~ Département Informatique & Recherche opérationnelle IFT6251 Sujets en génie logiciel ~ 15 décembre 2004 ~ Professeur Houari SAHRAOUI

2 Plan de la présentation
Répartition des classes Divergences entre C et JAVA Implémentation sous JAVA Intégration des classes Difficultés rencontrées Parties non réalisées Parties réalisées Déboguage et Tests avec JUnit Diagrammes initial et final de classes Interface GALOPPS Conclusion Migration de GALOPPS du C vers JAVA (Phase 2)

3 Répartitions des Classes 1/7
Selon l’affectation initiale des fichiers dans la phase 1 Chaque membre a été chargé d’implémenter les classes qu’il avait identifié à l’étape précédente du projet Priorité d’implémentation Les classes les plus fréquemment utilisées sont les premières à être implémentées : RandomExt, Parameters, Chromosome et Population. Les classes qui viennent en seconde position sont celles qui représentent les fonctionnalités de GALOPPS Les classes traitant du parallélisme Mise à part la classe Migration, les classes traitant du parallélisme n’ont pas été implémentée Migration de GALOPPS du C vers JAVA (Phase 2)

4 Répartitions des Classes 2/7
[Soumaya Chaffar] Inversion Appliquée sur Chromosome, elle permet d’inverser ses champs.Elle implémente les méthodes d’inversion. InputBuffer Représente le tampon d’entrée, elle implémente la fonction ffscanf qui permet de déterminer le type inclut dans une chaîne de caractère. APP Relative à l’application réalisée pour manipuler l’api GALOPPS. Elle implémente la fonction objective. Interface Permet d’afficher certains attributs de la classe Parameters, de les modifier et de la mis à jour. C’est l’aspect visuel de notre application. Migration de GALOPPS du C vers JAVA (Phase 2)

5 Répartitions des Classes 3/7
[Alicia Heraz] Population Implémente les méthodes appliquées sur une population Population_VB Représente l’ensemble des chromosomes VB Population_PB Représente l’ensemble des chromosomes PB Migration Implémente les méthodes permettant de migrer un chromosome d’une population à une autre. Les méthodes de cette classe ne peuvent être exécutées que dans le mode parallèle Migration de GALOPPS du C vers JAVA (Phase 2)

6 Répartitions des Classes 4/7
[Roxane Kouassi] Chromosome C’est un individu de population, il existe sous deux types Chromosome_VB Représente un chromosome basé sur la valeur Chromosome_PB Représente un chromosome basé sur les permutations Crossover Implémente l’opération de croisement. Cette classe est mère de chacune des deux sous-classes : Crossover_VB et Crossover_PB. RandomExt Implémente des opérations sur les nombre aléatoires Migration de GALOPPS du C vers JAVA (Phase 2)

7 Répartitions des Classes 5/7
J [Janice Ka-Yee NG 1/2] Selection Elle implémente des méthodes de sélection de chromosomes lors de la génération d'une population. Elle est la classe mère des 5 classes suivantes : RankedBasedSelection, RouletteWheelSelection, StochasticUniversalSelection, StochasticRemainderSelection et TournamentSelection. Statistics Elle est utile pour déterminer des propriétés relatives au fitness des chromosomes d'une population, telles que leurs valeurs minimum, maximum et moyenne. Migration de GALOPPS du C vers JAVA (Phase 2)

8 Répartitions des Classes 6/7
J [Janice Ka-Yee NG 2/2] Initialization Utilisée pour initialiser des variables dont les valeurs sont précisées dans un fichier, telles que la taille de la population popsize, pcross, permproblem, chromsize, taille des structure de données (tableaux). OneStart Elle est la classe principale de démarrage, contenant entre autres l'application développée par l'usager. Scale Calcule la valeur calibrée (scaled) relative aux fitnesses des chromosomes d'une population. Elle est la classe mère des 4 types de scale suivants: WindowScale, SigmaTruncation, LinearScale et BoltzmannScale. Migration de GALOPPS du C vers JAVA (Phase 2)

9 Répartitions des Classes 7/7
Y [Yannick Solari] Parameters Contient les attributs statiques et les méthodes de lecture des paramètres d’entrée Mutation Implémente les méthodes de mutation de chromosome, c’est la classe mère de chacune de : Mutation_VB Manipule les chromosome de type value_based Mutation_PB Manipule les chromosomes de type permutation_based Migration de GALOPPS du C vers JAVA (Phase 2)

10 Divergences entre C et JAVA
Y Il n’y a pas de pointeurs en JAVA La gestion de mémoire transparente en JAVA Les structures et les types définis (typedef) en C deviennent des objets en JAVA L’encapsulation des données, l’héritage et le polymorphisme fournis par le langage JAVA, facilitent la programmation Le langage C est un langage faiblement typé Le langage JAVA est beaucoup moins rapide que C, il perd en rapidité ce qu'il gagne en portabilité... Migration de GALOPPS du C vers JAVA (Phase 2)

11 Implémentation sous JAVA 1/8
[Soumaya Chaffar] Inversion Elle implémente deux méthodes d’inversion InverCir et InverCla. Implémentation en C Deux fichiers séparés qui implémentent la fonctionnalité d’inversion. Void Inversion (int *map) Nouvelle implementation en java Création de la classe Inversion InversionCir( int [] map, Population oldpop ) InversionCla( int [] map, Population oldpop ) APP Il n’y a pas eu de changements majeurs lors de la migration du code de C vers JAVA, juste au niveau des pointeurs et d’allocation mémoire. Migration de GALOPPS du C vers JAVA (Phase 2)

12 Implémentation sous JAVA 2/8
[Soumaya Chaffar] InputBuffer Elle implémente la méthode ffscanf Changements majeurs, puisque cette classe contient beaucoup de manipulation sur les chaînes de caractères. Il fallait trouver l’équivalence de chacune dans l’API de Java. Interface Implémentation direct en Java, pas d’équivalent dans le code C. Migration de GALOPPS du C vers JAVA (Phase 2)

13 Implémentation sous JAVA 3/8
[Alicia Heraz] Population, Population_VB et Population_PB Ces fonctions n’avaient pas de paramètres, lorsqu’elles étaient implémentées en C - void generate(Inversion i, Selection s, Mutation m, Crossover c) - void usualgen(Inversion i, Selection s, Mutation m, Crossover c) Migration Certains types de paramètres ont été changé - boolean GetMigrants(Chromosome IndArray, int donorpop, char []filename, int number_to_migrate, boolean want_best, int migration_incest_reduction, int migration_crowding_amount) Migration de GALOPPS du C vers JAVA (Phase 2)

14 Implémentation sous JAVA 4/8
R [Roxane Kouassi 1/2] Chromosome, Chromosome_VB, Chromosome_PB un chromosome n’est plus une simple structure mais un objet qui encapsule ses attributs et ses méthodes. Un tableau d’entiers pour représenter le contenu d’un chromosome : des bits. Les bits sont regroupés ensemble pour former les champs d’un chromosome. Problématique: la manipulation des bits, la taille d’un entier, la longueur d’un champ, … RandomExt Elle dérive de la classe Random, définie dans le paquetage java.util de l’API JAVA. Migration de GALOPPS du C vers JAVA (Phase 2)

15 Implémentation sous JAVA 5/8
R [Roxane Kouassi 2/2] Crossover, Crossover_VB, Crossover_PB Une opération de croisement est représentée par une classe car il y a plusieurs méthodes de croisement, qui s’appliquent à différents types de chromosomes. Implémentation en C crossover(parent1, parent2, child1, child2, jcross); Nouvelle implémentation en JAVA Crossover c = new Crossover_PB(); c.setParent1(parent1); c.setParent2(parent2); c.crossover(child1, child2, jcross); Migration de GALOPPS du C vers JAVA (Phase 2)

16 Implémentation sous JAVA 6/8
[Janice Ka-Yee NG 1/2] Selection Ne dépend plus du fichier inclus lors de la compilation tel qu’il est en C, mais dépend plutôt de l’instance de l’objet Sélection au moment de l’exécution. Initialization La méthode initialize se charge de l’initialisation de toutes les variables paramètres possiblement lues à partir d’un fichier. À cette étape, on remarque que les allocations de mémoire en C sont transformées principalement en l’initialisation de tableaux en Java. Cette classe fait appel à deux fonctions utilitaires du fichier Report.c, pouvant permettre l’affichage des données relatives à une population et ses chromosomes. Migration de GALOPPS du C vers JAVA (Phase 2)

17 Implémentation sous JAVA 7/8
[Janice Ka-Yee NG 2/2] OneStart Contient le main du programme. Appelle principalement les méthodes d’initialisation pour construire la base du programme et ensuite les différentes méthodes à propos de la génération d’une nouvelle population. Scale Le type de scaling effectué dépend de l’instance de l’objet Scale créé. Statistics Le calcul des statistiques n’a pas impliqué un changement majeur entre les deux versions du programme Migration de GALOPPS du C vers JAVA (Phase 2)

18 Implémentation sous JAVA 8/8
Y [Yannick Solari] Parameters La classe de paramètres possède plusieurs fonctions pour lire différents groupe de paramètres. Les fonctions du fichier FFSCANF.C sous beaucoup utilisées par la classe Parameters. Beaucoup de manipulation de String Utilisation de pointeurs Mutation Une opération de mutation est représentée par une classe car il y a plusieurs types de mutation, qui s’appliquent à différents types de chromosomes. Mutation_VB Mutation_PB Migration de GALOPPS du C vers JAVA (Phase 2)

19 Intégration des classes
Y Les classes les plus importantes étaient utilisées et mises à jour par chaque membre de l’équipe. Chaque groupe de classes devaient être correctement compilé avant d’être rajouté aux autres groupes. Finalement les classes ont été intégrées manuellement : Conflits dans les noms et la visibilité des attributs et des paramètres. Variables non initialisées. Déboguage Migration de GALOPPS du C vers JAVA (Phase 2)

20 Difficultés rencontrées
Y Emplacement, portée et pertinence des attributs Selon le champ et la fréquence d’utilisation des attributs, nous avons modifié la portée et l’emplacement de certains. D’autres ont été carrément supprimés car ils n’étaient plus utilisés Gestion de la mémoire Les méthodes liées à la gestion de la mémoire ont été supprimées et le code a été réadapté Redéfinition des types d’attribut A cause de l’absence de certains types (comme les pointeurs), nous avons du redéfinir certains. Intégration des implémentations individuelles Attributs redéclarés, classes se référant à un module versus à plusieurs modules Migration de GALOPPS du C vers JAVA (Phase 2)

21 Parties non réalisées R Faute de temps, les fonctionnalités suivantes n'ont pas été réalisées : Les utilitaires restart et checkpoint Les modules qui gèrent les fichiers qui sauvegardent les résultats intermédiaires n'ont pas été repris comme CheckHDR.c et CheckRD.c et CheckWT.c Les applications scénario APP*.c Une seule application scénario a été implémentée Parallélisme Mise à part la classe Migration, nous n’avions pas pu implémenter toutes les fonctionnalités du mode parallèle Migration de GALOPPS du C vers JAVA (Phase 2)

22 Parties réalisées Chromosome Mutation Croisement Migration Sélection
Inversion Population Population Migration de GALOPPS du C vers JAVA (Phase 2)

23 Déboguage et Tests A L’outil JUnit a été utilisé pour développer des tests unitaires sur la classe Chromosome. La majorité des méthodes de cette classe (sauf les get() et les set()) ont été testées. En plus de l’outil JUnit, l’outil de déboguage fourni par Eclipse, nous a été d’une grande aide pour détecter les erreurs déclenchées lors de l’exécution de notre code intégré. Migration de GALOPPS du C vers JAVA (Phase 2)

24 Exemple de Test avec JUnit
l’équivalence entre les paramètres calculés par la fonction qui exécute le calcul et les valeurs attendues public void testChromosome() { assertEquals(" numfields ", 4, c.getNumFields()); assertEquals(" tabInts.length ", 1, (c.getTabInts()).length); assertEquals(" fields_ends.length ", 4, (c.getFieldsEnds()).length); } Migration de GALOPPS du C vers JAVA (Phase 2)

25 Diagramme initial de classes
J Migration de GALOPPS du C vers JAVA (Phase 2)

26 Diagramme final de classes
J Migration de GALOPPS du C vers JAVA (Phase 2)

27 Interface de l’API réalisée
Migration de GALOPPS du C vers JAVA (Phase 2)

28 Conclusion Les divergences entre C et JAVA ont été résolues
Les parties qui traitent du parallélisme, de la sauvegarde des calculs intermédiaires et certaines des applications scénario n’ont pas été réalisées. L'interface n'a pas pu être integrée à la classe principale Le diagramme intégral a été revu et corrigé, il a été généré grâce à l’outil de Reverse Engineering via l’environnement Rational Rose Nous espérons qu’une brillante équipe continuera notre travail et finalisera la migration de GALOPPS sous JAVA Migration de GALOPPS du C vers JAVA (Phase 2)

29 Références A Java Tête la première de Kathy Sierra, Bert Bates, Marie-Cécile Baland. Éditions O’REILLY Les Cahiers du programmeur : Java (2), conception et déploiement J2EE de Jérôme Molière Les Cahiers du programmeur (1 livre + 1 CD-Rom) : Java 1.4 et 5.0 de Emmanuel Puybaret Programmer en Java (1Cédérom) de Claude Delannoy Migration de GALOPPS du C vers JAVA (Phase 2)

30 Migration de GALOPPS du C vers JAVA (Phase 2)
Genetic ALgorithm Optimized for Portability and Parallelism System Genetic Algorithms Research and Applications Group Par Soumaya Chaffar, Alicia Heraz, Roxane Kouassi, Janice Ng Ka-Yee, Yannick Solari Université de Montréal ~ Faculté Arts & sciences ~ Département Informatique & Recherche opérationnelle IFT6251 Sujets en génie logiciel ~ 15 décembre 2004 ~ Professeur Houari SAHRAOUI


Télécharger ppt "Migration de GALOPPS du C vers JAVA (Phase 2)"

Présentations similaires


Annonces Google