Bibliothèque Java d'implémentation de graphes et application SafeLogistics pour l'optimisation de trajets de livraison.
- Java 11 ou supérieur
- Maven 3.6 ou supérieur
Le projet est organisé avec Maven :
src/
main/
java/
Aretes/ # Implémentation des arêtes
Entities/ # Entités métier (Depot, Restaurant, Client)
Graphs/ # Implémentation des graphes
Nodes/ # Implémentation des nœuds
SafeLogistics/ # Application principale
resources/ # Ressources (fichiers de données)
test/
java/ # Tests unitaires
pom.xml # Configuration Maven
Compiler le projet :
mvn clean compileExécuter l'application principale :
mvn exec:javaSafeLogistics est une application d'optimisation de trajets de livraison utilisant la théorie des graphes et l'algorithme de Dijkstra pour calculer les chemins les plus courts.
La documentation javadoc est disponible dans le dossier doc
xdg-open doc/javadoc/apidocs/index.htmlLe programme démontre une livraison complète :
-
Création de l'entreprise : SafeLogistics initialise son système
-
Définition des acteurs :
- Dépôt : Amazon
- Restaurants : Pizza del Arte, McDonald's, KFC, Burger King
- Client : Janelle
-
Construction du réseau :
- Amazon → Pizza del Arte (8 km)
- Amazon → McDonald's (5 km)
- Pizza del Arte → KFC (2 km)
- McDonald's → KFC (12 km)
- KFC → Burger King (4 km)
- KFC → Client Janelle (9 km)
- Burger King → Client Janelle (4 km)
-
Calcul des trajets optimaux :
- Dépôt Amazon → Restaurant KFC (chemin le plus court)
- Restaurant KFC → Client Janelle (chemin le plus court)
mvn cleanmvn clean compile
# Vérifier que le dossier target/ est créé et peuplé
ls -la target/// Constructeur
SafeLogistics() // Initialise le graphe
// Méthode principale
planDelivery(Depot start, Restaurant pickup, Client dropoff)
// Calcule et affiche les deux trajets :
// 1. start → pickup (plus court chemin)
// 2. pickup → dropoff (plus court chemin)
// Affiche aussi la distance totalePour modifier le scénario de livraison, éditez SafeLogistics.java :
// Créer une nouvelle entité
Restaurant NewRestaurant = new Restaurant("Nom du Restaurant");
Noeud NodeNewRestaurant = new Noeud(NewRestaurant);
// L'ajouter au graphe
Entreprise.g.ajouterNoeud(NodeNewRestaurant);
// Ajouter les connexions
Entreprise.g.ajouterArete(
new AreteOrientePondere(NodeAmazon, NodeNewRestaurant, 10)
);# Assurez-vous d'être dans le bon répertoire
cd graphlibrary/- Objectif : Trouver le plus court chemin dans un graphe pondéré positif
- Principes :
- Utilise une file de priorité (PriorityQueue)
- Visite les nœuds par ordre de distance croissante
- Garantit la solution optimale pour les poids positifs
- Orienté : Les arêtes ont une direction
- Pondéré : Chaque arête a un poids (distance, coût, temps, etc.)
- Cas d'usage : Réseaux routiers, calcul d'itinéraires, optimisation logistique
- Le programme utilise
AtomicIntegerpour gérer les distances mutables en passage par référence - Les nœuds encapsulent les entités métier (Depot, Restaurant, Client)
- Le graphe utilisé dans SafeLogistics utilise une composition des types orienté et pondéré
Nathan Morin
Projet académique - Libre d'utilisation à des fins éducatives.