Application Associations Étudiantes
Système d'appariement intelligent pour séjours linguistiques
Aperçu du projet
Cette application graphique développée en Java avec JavaFX réalise des associations optimales d'étudiants pour des séjours linguistiques. Elle utilise une logique basée sur la théorie des graphes et un système de pondération pour associer des hôtes et des invités selon différents critères de compatibilité (centres d'intérêt, langues, préférences, etc.).
J'ai été responsable de la conception et de l'implémentation complète de l'algorithme d'appariement basé sur les graphes bipartis, du développement de l'interface graphique avec JavaFX permettant la visualisation des associations, ainsi que de la gestion de l'import/export des données des participants. J'ai également optimisé l'algorithme pour gérer efficacement de grands volumes de données et garantir des résultats pertinents.
Contexte
SAÉ réalisée en équipe dans le cadre du BUT Informatique à l'IUT de Lille, autour d'une problématique réelle d'échanges linguistiques entre étudiants. Le projet a permis d'approfondir l'algorithmique avancée (graphes bipartis, appariement optimal) et la mise en œuvre d'une application JavaFX complète.
Objectifs
- Modéliser les compatibilités hôtes/invités sous forme de graphe pondéré.
- Calculer un appariement optimal respectant les contraintes strictes (allergies, régimes).
- Fournir une interface graphique utilisable par un encadrant non-développeur.
Mon rôle
Au sein de l'équipe, j'ai conçu et implémenté l'algorithme d'appariement (graphes bipartis pondérés via JGraphT, algorithmes Hongrois et Hopcroft-Karp), développé l'interface JavaFX et géré l'import/export CSV des participants. J'ai également pris en charge l'optimisation pour grands volumes et la validation des résultats produits.
Fonctionnalités principales
- Algorithme d'appariement intelligent Utilisation de graphes pondérés pour calculer les meilleures associations basées sur des critères multiples
- Système de scoring Attribution de poids selon les affinités (hobbies, régime alimentaire, allergie aux animaux, etc.)
- Interface graphique intuitive Visualisation claire des profils et des associations suggérées via JavaFX
- Gestion des profils Import CSV des profils participants et persistance de l'historique par sérialisation Java
- Validation des contraintes Respect des contraintes strictes (allergies, régimes alimentaires, etc.)
- Export des résultats Génération de rapports détaillés avec les scores de compatibilité
Technologies utilisées
Java
Langage principal pour la logique métier et les algorithmes
JavaFX
Framework pour l'interface graphique moderne et responsive
Théorie des graphes
Modélisation par graphes bipartis pondérés via la bibliothèque JGraphT
Algorithmes d'optimisation
Appariement biparti optimal via algorithmes Hongrois (Kuhn-Munkres) et Hopcroft-Karp
Fonctionnement de l'algorithme
Construction du graphe
Création d'un graphe biparti avec les hôtes d'un côté et les invités de l'autre
Calcul des poids
Attribution d'un score de compatibilité pour chaque paire possible basé sur les critères
Filtrage des contraintes
Élimination des associations incompatibles (allergies, régimes, etc.)
Optimisation
Appariement biparti maximisant le score global via les algorithmes Hongrois (Kuhn-Munkres) et Hopcroft-Karp fournis par JGraphT
Défis techniques
Complexité algorithmique
Optimisation de l'algorithme d'appariement pour gérer efficacement un grand nombre de participants tout en garantissant des résultats optimaux.
Pondération des critères
Définition d'un système de poids équilibré qui prend en compte l'importance relative de chaque critère (certains étant prioritaires sur d'autres).
Interface utilisateur
Conception d'une interface intuitive permettant de visualiser clairement les associations et leurs scores de compatibilité.
Compétences développées
Compétences techniques
- Maîtrise de la théorie des graphes et des algorithmes d'appariement
- Conception d'algorithmes d'optimisation complexes
- Développement d'interfaces graphiques professionnelles avec JavaFX
- Gestion de données structurées et validation de contraintes
- Architecture logicielle modulaire et maintenable
- Tests unitaires et validation de l'exactitude des résultats
Compétences transversales
- Autonomie : appropriation de la théorie des graphes à partir de la documentation JGraphT.
- Rigueur : gestion des contraintes strictes sans compromis (allergies, régimes).
- Communication : vulgarisation de l'algorithme auprès des membres non-spécialistes de l'équipe.
Résultats obtenus
Application livrée avec un appariement optimal calculé en quelques secondes sur des jeux de données réalistes, respect strict des contraintes éliminatoires, et exports lisibles pour l'utilisateur final.
Bilan & recul
- Ce que j'ai appris : un bon algorithme ne suffit pas : le système de pondération et la validation des contraintes pèsent autant que l'optimisation elle-même.
- Difficulté surmontée : équilibrer les poids pour qu'aucun critère n'écrase les autres ; résolu en confrontant les sorties à des cas-test conçus avec l'équipe.
- Ce que je referais autrement : exposer les poids dans un fichier de configuration plutôt qu'en dur, pour permettre à l'utilisateur d'ajuster sans recompiler.
Explorez le code
Le code source complet est disponible sur GitHub avec la documentation de l'algorithme. Découvrez l'implémentation des graphes et du système de pondération !
Voir le repository GitHub →