Retour aux projets
JavaCSVIntellij IdeaGithub/Gitlab

SAÉ 2.01 - Application voyageur du commerce

Application Java interactive de visualisation et de résolution du problème du voyageur de commerce. Elle permet de placer des points sur un plan euclidien ou une carte OpenStreetMap pour comparer en temps réel l'efficacité d'algorithmes d'optimisation (glouton, insertion, 2-opt). Un module d'import/export CSV asynchrone est intégré pour garantir une interface fluide durant les calculs lourds.

Début7 avril 2025
Fin26 juin 2025
RôleDéveloppeur
Thumbnail

Fonctionnalités Principales

Double affichage interactif sur carte OpenStreetMap et plan euclidien 2D.
Gestion dynamique des points par clic (ajout, suppression) ou génération de listes aléatoires.
Résolution et comparaison en temps réel de plusieurs algorithmes (glouton, insertion, aléatoire, 2-opt).
Importation de jeux de données et exportation de rapports de performance au format CSV.
Calcul et suggestion automatique de l'itinéraire optimal parmi toutes les approches testées.
Génération et affichage d'un tableau matriciel complet regroupant toutes les distances entre les lieux.
Traitement asynchrone (SwingWorker) lors des exports de masse pour préserver la fluidité de l'IHM.
Affichage dynamique des coordonnées et du nom des points au survol de la souris.

Stack Technique

Back-end
Java
Base de données
CSV
Environnement
Intellij Idea
Autres
Github/Gitlab
Défis

L'application intègre un module d'exportation de masse permettant d'exécuter séquentiellement plusieurs algorithmes combinatoires (Glouton, Insertion et 2-opt) sur un lot complet de fichiers de données. Lors de l'analyse simultanée de grands ensembles de points, le volume de calculs mathématiques et d'opérations d'écriture sur le disque (génération des fichiers CSV et des rapports de voyage) provoquait initialement le gel complet de l'interface graphique (EDT - Event Dispatch Thread). L'application devenait alors "instable" ou "ne répondait plus", altérant l'expérience utilisateur.

Solutions

Pour résoudre ce problème de performance, l'intégralité de la logique de calcul algorithmique et de gestion des flux d'entrée/sortie a été isolée du thread d'affichage principal. En implémentant la classe abstraite SwingWorker, le traitement lourd est entièrement déporté en arrière-plan dans la méthode doInBackground(). En parallèle, une boîte de dialogue d'attente non bloquante est affichée à l'écran, puis automatiquement détruite via la méthode done() dès la fin des calculs, avant d'ouvrir nativement le dossier des résultats pour l'utilisateur. Cette approche garantit une interface utilisateur fluide, réactive et professionnelle, peu importe la charge de données traitée.

Compétences Universitaires Appliquées

CE1.01

Réaliser en respectant les besoins décrits par le client.

CE1.04

Réaliser en veillant à la qualité du code et à sa documentation.

CE1.03

Réaliser en appliquant les principes algorithmiques.

CE6.04

Collaborer en developpant une communication efficace et collaborative.