Skip to content

Latest commit

 

History

History
206 lines (150 loc) · 6.74 KB

README.md

File metadata and controls

206 lines (150 loc) · 6.74 KB

First_Project

Ce projet a pour objectif d’automatiser la répartition logistique d’une CERP en optimisant les itinéraires de livraison des camions vers les pharmacies, à l’aide d’un algorithme génétique, afin de réaliser chaque tournée en moins de 3 heures tout en minimisant le nombre de camions utilisés et la distance parcourues. On genere un pdf contenant les chemins de chaque livreur.

Pour voir toute la documentation: https://esiee5100.atlassian.net/wiki/x/h4EB

Installation et exécution

Tout est automatisé via le script bash fourni.

1. Ouvrez un terminal et place-toi dans le dossier du projet :

cd /chemin/vers/ton/projet

2. Lancez le script d’installation et de génération :

Sur Unix :

bash setup.sh
bash generate_dataset.sh /chemin/vers/le/csv
bash run_generation.sh 

Exemple:

bash setup.sh
bash generate_dataset.sh delivery/livraison85.csv
bash run_generation.sh 

Sur Windows : Utiliser le fichier run_generation.bat

Ce script :

  • crée un environnement virtuel Python,
  • installe toutes les dépendances nécessaires,
  • lance le script Python qui génère les PDF.

3. Les rapports PDF sont générés dans le dossier rapport sous le nom :

  • rapport_livraison.pdf

Récupération des données :

Pour récupérer les coordonnées des pharmacies

python3 data/getCoordinates.py chemin/fichier/base.csv 

Pour récupérer les matrices de distance et de temps

python3 data/getMatrix.py

Execution de l'algorithme génétique :

Pour executer le programme, on utilise la commande :

 make
./exe data/distance_matrix.csv data/time_matrix.csv

Sample Output

Un PDF est généré avec des pages récapitulatives des chemins de tous les livreurs, suivies de pages détaillées pour chacun d’eux. Example de page d'un livreur:

rapport_image

Algorithme Génétique

Example de solution:

livreur 1 : 0 → 2 → 5 → 7 → 0
livreur 2 : 0 → 3 → 6 → 9 → 0
livreur 3 : 0 → 1 → 4 → 8 → 10 → 0

Les contraintes à respecter:

Contraintes appliquées lors de la génération d'un chemin d'un livreur:

  • Chaque chemin commence et se termine au dépôt (ville 0)
  • Chaque ville est visitée une seule fois
  • Chaque chemin commence et se termine au dépôt (ville 0)
  • Aucun chemin ne dépasse 3 heures de livraison, en comptant les 3 minutes de pause dans chaque pharmacie

Contraintes appliquées lors de la génération d'un individu:

  • les chemins de chaque livreur respecte les contraintes au dessus
  • toutes les villes fournies sans parcourus par les livreurs

Démarche de l'algorithme génétique :

On utilise le concept de "Multiple Population Genetic Algorithm", où :

  • on génère plusieurs populations ;

  • on sélectionne 2 parents et on génère plusieurs enfants avec mutation ;

  • on compare la meilleure solution de cette population avec la meilleure solution globale, et on la remplace si elle est meilleure.

Pseudo Code:

while num_population < NB_POPULATIONS do do
    population ← initialize_population()    // Génération aléatoire de NB_POPULATION individus,
                                           // où chaque individu représente une solution complète
                                          // et respecte les contraintes au dessus
    num_generation ← 0

    while num_generation < NB_GENERATIONS do
        cumulative_fitness ← evaluate_fitness(population)
            // cumulative_fitness[i] = somme cumulative des fitness jusqu’à l’individu i
            // fitness mise à jour à partir de la distance, du temps, et du nombre de livreurs

        parents ← selection(cumulative_fitness)
           // on choisit 2 parents avec la plus grande cumulative fitness
        for i = 1 to NB_CHILDREN do
            child ← crossover(parents)
                  // On obtient 1 enfant avec une probablité de CROSSOVER = 0.8 sinon
                 // il sera une copie d'un de ses deux parents
                // on doit verifier que l'enfant respecte les contraintes au dessus
            mutation(enfant)
                // On effectue une mutation sur l' enfant avec une probablité de MUTATION = 0.2
               // en verifiant les contraintes

            update_population(population, enfant)
                // On met à jour la population en ajoutant l'enfant 
               // à la population initiale, remplaçant ainsi un individu
              //existant qui a la plus faible fitness

        generation ← generation + 1

    best_indiv_p ← best_fitness(population)  // Meilleur individu de cette population

    if best_indiv_p est meilleur que best_solution_global:
        best_solution_global ← best_indiv_p

Génération de rapports PDF de tournées de livraison

Ce projet permet de générer automatiquement un rapport PDF pour toutes les camionnettes à partir :

  • d’un fichier CSV d’adresses et coordonnées GPS,
  • d’un fichier texte de résultats (chemins, temps, distances).

Le PDF contient :

  • Une page de synthese qui contient une carte de trajet de tous les livreurs
  • Pour chaque livreur:
    • Une carte du trajet (fond OpenStreetMap, tracé du parcours)
    • Un tableau détaillant chaque étape (lieu, adresse, heure d’arrivée, heure de départ)
    • Les données de synthèse : distance totale, consommation estimée, coût du carburant

Fichiers attendus

  • data/pharmacies_geocodec.csv
    CSV contenant les adresses et coordonnées [lat, long] de chaque point de livraison.

    ATTENTION, le Cerp donc le point de départ doit par logique être l'adresse no 1.

    Exemple :

    CERP, 1 rue du Départ, 75014 Paris, [48.8381, 2.3208]
    Pharmacie Alpha, 10 avenue de la République, 75011 Paris, [48.8655, 2.3702]
    Pharmacie Beta, 25 rue de Vaugirard, 75006 Paris, [48.8472, 2.3205]
    Pharmacie Gamma, 5 boulevard Voltaire, 75011 Paris, [48.8575, 2.3762]
    Pharmacie Delta, 12 rue de la Convention, 75015 Paris, [48.8417, 2.2822]
    
  • text_result/resultats.txt
    Fichier texte listant, pour chaque livreur, le chemin suivi, les temps de trajet, et la distance totale.
    Exemple :

    livreur 1: 0 → 1 → 2 → 0
    12 10 13
    distance totale : 8.5
    livreur 2: 0 → 3 → 4 → 0
    9 11 14
    distance totale : 7.8
    

Dépendances


Remarques

  • Les fichiers PDF sont générés dans le dossier rapport.
  • Les images de carte sont supprimées automatiquement après génération du PDF.
  • Si besoin, adaptez les chemins des fichiers dans le script Python.