SAÉ S2 · Java Semestre 2 · printemps 2026

MedMap, des graphes pour organiser les tournées

Une application Java d'aide à la décision pour le responsable d'un district de santé en zone défavorisée : trouver le bon itinéraire entre deux centres, repérer les routes peu sûres et organiser la tournée d'un ou deux camions de livraison.

Compétences
Réaliser · Optimiser
Cadre
BUT Informatique - IUT Lyon 1
Équipe
avec Théo Pipelier et Alexis Chazal
Outils
Java 21 · GraphStream · JUnit · NetBeans

Un district vu comme un graphe

Chaque centre de santé est un sommet, chaque route une arête qui porte trois valeurs : la distance, la durée du trajet et une fiabilité notée sur 10.

3
types de centres : maternités, blocs opératoires, nutrition
3
poids par route : distance, durée, fiabilité
1 ou 2
camions pour la tournée de livraison
64
tests unitaires JUnit

Le district est chargé depuis un fichier .csv (une ligne par centre, avec sa matrice de routes) ou généré aléatoirement. L'application l'affiche avec la bibliothèque GraphStream, un code couleur par type de centre, et des filtres pour afficher ou masquer les routes, les distances, les durées et les fiabilités.

Le code est découpé en paquets distincts : Structure pour le modèle (sommets, routes, graphe), Outils pour les algorithmes, IHM pour l'interface Swing. Chaque méthode publique est documentée en Javadoc.

Ma part : la recherche d'itinéraires et les tournées

Le travail était réparti par paquet. J'ai écrit les trois classes qui calculent des trajets, et participé au modèle de graphe.

01

Recherche : deux plus courts chemins

Dijkstra, appliqué deux fois avec deux poids différents. Le premier minimise la durée brute. Le second minimise une durée estimée qui pénalise les routes peu fiables : durée × (20 - fiabilité) / 10. Une route fiable à 10/10 garde sa durée, une route à 2/10 compte presque double.

02

Glouton : le plus proche voisin

À chaque étape, le camion se rend au centre non visité le plus proche en durée. Rapide et simple, il sert de solution de départ, et peut se limiter à un type de centre (par exemple les seules maternités).

03

RecuitSimule : améliorer la tournée

Un recuit simulé part de la solution gloutonne et inverse des segments de la tournée (mouvements 2-opt), en acceptant parfois une solution moins bonne pour sortir des minima locaux. La température descend de 300 à 0,001 avec un facteur 0,998.

04

Quinze relances, un coût calculé en O(1)

Le recuit est relancé avec quinze graines différentes et garde la meilleure tournée. Le coût d'un mouvement 2-opt est recalculé de façon incrémentale, sans reparcourir la tournée : c'est ce qui le rend utilisable sur des graphes de 150 centres.

Une piste écartée. Nous avons aussi implémenté Christofides (arbre couvrant de Prim, couplage des sommets impairs, parcours eulérien). Sur nos graphes, il donnait des tournées plus longues que le glouton amélioré par le recuit : il n'est pas utilisé dans l'application finale.

L'application

Quatre écrans de MedMap. Cliquez sur une capture pour l'agrandir.

Écran 1

Le district

Un district de 30 centres : 18 maternités en bleu, 6 centres de nutrition en vert, 6 blocs opératoires en rouge. Le panneau de droite regroupe le chargement de la carte, les filtres d'affichage, le calcul d'itinéraire et les tournées.

Un clic droit sur un centre affiche les autres centres classés par proximité, en distance, en durée ou en durée estimée.

Un district de 30 centres de santé affiché dans MedMap
Écran 2

Les routes dangereuses

L'utilisateur fixe un seuil de fiabilité sur 10 ; toutes les routes en dessous passent en orange. Le responsable voit d'un coup d'œil les liaisons à éviter, ou à faire surveiller.

Routes sous le seuil de fiabilité colorées en orange dans MedMap
Écran 3

Le calcul d'itinéraire

On choisit un départ et une arrivée : le chemin s'affiche en bleu sur le graphe, avec la liste des centres traversés et la durée totale. Ici, de S8 à S6 en passant par S2 et S3, en 115 minutes.

Le second bouton lance la même recherche sur la durée estimée : le chemin proposé peut être plus long sur le papier, mais passer par des routes plus sûres.

Plus court chemin de S8 à S6 tracé en bleu dans MedMap
Écran 4

La tournée des camions

Le résultat du recuit simulé pour un camion : l'ordre de visite des dix centres, au départ de S1, et la durée totale de la tournée, 387 minutes.

Avec deux camions, le district est d'abord coupé en deux secteurs équilibrés, puis chaque secteur reçoit sa propre tournée. Les résultats s'exportent en .csv, le format demandé pour le défi algorithmique entre équipes.

Résultat du recuit simulé pour un camion dans le panneau de MedMap

Ce que ce projet m'a appris

  • Le choix du poids change la réponse : le chemin le plus court et le chemin le plus sûr ne passent pas forcément par les mêmes routes, et c'est au décideur de trancher.
  • Un algorithme réputé meilleur en théorie ne l'est pas toujours sur les données du problème : il a fallu mesurer Christofides face au glouton avant de le mettre de côté.
  • Une heuristique vit de ses réglages : température, refroidissement, nombre de relances. Et d'un calcul de coût assez rapide pour permettre des milliers d'essais.
  • À trois sur un même dépôt, un découpage en paquets clair et des tests unitaires évitent de casser le travail des autres.