Application Associations Étudiantes

Système d'appariement intelligent pour séjours linguistiques

Juin 2025 Java Graphes Algorithmes JavaFX

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

1

Construction du graphe

Création d'un graphe biparti avec les hôtes d'un côté et les invités de l'autre

2

Calcul des poids

Attribution d'un score de compatibilité pour chaque paire possible basé sur les critères

3

Filtrage des contraintes

Élimination des associations incompatibles (allergies, régimes, etc.)

4

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.

Captures du projet

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 →