Skip to content

First Project in ESIEE Paris, first year, CS Engineering. The goal is to use genetic programming to find the shortest cheapest delivery route for N deliverers.

Notifications You must be signed in to change notification settings

nermine11/First_Project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

171 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

First Project in ESIEE Paris, first year, CS Engineering. The goal is to use genetic programming to find the shortest cheapest delivery route for N deliverers.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5