mercredi 22 avril 2015Page 1 PFA Optimisation des Trajets de Collecte Réalisé par : Eymat Loïc Grange Benoît Fournier Jérémy Moutmir Hamza Garon Sébastien Senhaji Mohammed Responsable pédagogique : Pellegrini François Responsables scientifiques : Sopena Eric et Dussech Bruno
mercredi 22 avril 2015Page 2 Plan Présentation du projet –Contexte du projet –Analyse de l’existant Approche théorique et solutions proposées Réalisation Tests Recherche et amélioration Conclusion
mercredi 22 avril 2015Page 3 Contexte du projet (1) Ce projet s’inscrit dans le cadre du projet de fin d’année à l’ENSEIRB. Le projet est proposé par le LaBRI dans le but de développer une plate-forme logicielle à destination des professionnels de la collecte des déchets ménagers pour la société ECOBOX.
mercredi 22 avril 2015Page 4 Contexte du projet (2) Le but du projet est de fournir une bibliothèque de fonctions permettant d’optimiser le trajet de collecte des bennes à ordures. Notre projet se découpe en deux parties : 1.Constituer des zones de ramassage à partir de tronçons de ramassage ; 2.Puis déterminer un cycle qui minimisera le trajet entre les zones, le cycle étant découpé en morceaux que nous appellerons tournées.
mercredi 22 avril 2015Page 5 Analyse de l’existant 1.Zones : Nécessité d’adapter ces algorithmes et implémenter l’algorithme « KMEANS ». Éventuellement rechercher d’autres algorithmes permettant de résoudre les même problèmes. 2.Cycle : Les algorithmes « RAI » et « Hongrois », permettant de créer le cycle, ont déjà été implémentés et ont été fournis par le client lors du démarrage du projet.
mercredi 22 avril 2015Page 6 Plan Présentation du projet Approche théorique et solutions proposées –Constitution de zones Présentation de l’algorithme « KMEANS » Adaptation au problème Choix des centres Problèmes rencontrés –Constitution de cycles Présentation de l’algorithme « Hongrois » Présentation de l’algorithme « RAI » –Constitution de tournées Réalisation Tests Recherche et amélioration Conclusion
mercredi 22 avril 2015Page 7 Constitution de zones Regrouper des points proches en entités appelées « zone » But : diminuer le nombre d’entités manipulées lors de la constitution d’un cycle Algorithme employé : KMEANS
mercredi 22 avril 2015Page 8 KMEANS – Présentation Partitionne un groupe de points en K sous-groupes Fabrique des zones qui minimisent la somme des distances des points au centre de la zone Utilise le « coût » entre les points pour effectuer ce travail
mercredi 22 avril 2015Page 9 KMEANS – Fonctionnement
mercredi 22 avril 2015Page 10 KMEANS – Fonctionnement 1.Choisir aléatoirement K points qui représenteront les centres de zone 2.Attacher chaque point à la zone dont le centre est le plus proche en terme de « coût » 3.Calculer le nouveau centre de chaque zone 4.Réitérer les étapes 2. et 3. jusqu’à stabilité des zones
mercredi 22 avril 2015Page 11 KMEANS – Fonctionnement Carte des pointsChoix des centres
mercredi 22 avril 2015Page 12 KMEANS – Fonctionnement 1.Choisir aléatoirement K points qui représenteront les centres de zone 2.Attacher chaque point à la zone dont le centre est le plus proche en terme de « coût » 3.Calculer le nouveau centre de chaque zone 4.Réitérer les étapes 2. et 3. jusqu’à stabilité des zones
mercredi 22 avril 2015Page 13 KMEANS – Fonctionnement Ajout des points Le coût inter-points est ici la distance euclidienne On raccroche chaque point au centre le plus proche
mercredi 22 avril 2015Page 14 KMEANS – Fonctionnement 1.Choisir aléatoirement K points qui représenteront les centres de zone 2.Attacher chaque point à la zone dont le centre est le plus proche en terme de « coût » 3.Calculer le nouveau centre de chaque zone 4.Réitérer les étapes 2. et 3. jusqu’à stabilité des zones
mercredi 22 avril 2015Page 15 KMEANS – Fonctionnement Calcul du nouveau centre Cercles : zones précédemment construites Points rouges : centres inchangés Points verts : centre différent
mercredi 22 avril 2015Page 16 KMEANS – Fonctionnement 1.Choisir aléatoirement K points qui représenteront les centres de zone 2.Attacher chaque point à la zone dont le centre est le plus proche en terme de « coût » 3.Calculer le nouveau centre de chaque zone 4.Réitérer les étapes 2. et 3. jusqu’à stabilité des zones
mercredi 22 avril 2015Page 17 KMEANS – Fonctionnement Fin de l’algorithme Stabilité atteinte Les centres des zones ne bougent plus Les points sont rattachés aux même zones
mercredi 22 avril 2015Page 18 KMEANS – Adaptation au problème Nombre de zones initial inconnu Trouver une alternative au choix aléatoire des centres initiaux –Déterminiser ce choix –Faire un choix cartésien Nombre de zones doit pouvoir varier durant l’exécution –Division des zones de poids ou coût trop grands –Fusion des zones de poids ou coût trop faibles
mercredi 22 avril 2015Page 19 KMEANS – Adaptation au problème Estimation du nombre de zones initial N en fonction du poids : –Soit S la somme des poids des points de la carte –Soit M le poids maximum d’une zone (fournit en paramètre) N = S / M
mercredi 22 avril 2015Page 20 KMEANS – Adaptation au problème Nombre de zones initial inconnu Trouver une alternative au choix aléatoire des centres initiaux –Déterminiser ce choix –Faire un choix cartésien Nombre de zones doit pouvoir varier durant l’exécution –Division des zones de poids ou coût trop grands –Fusion des zones de poids ou coût trop faibles
mercredi 22 avril 2015Page 21 KMEANS – Adaptation au problème Choix pseudo-aléatoire des centres initiaux –Utilisation du générateur pseudo-aléatoire rand() de la librairie C –Déterminisation des valeurs générée avec la fonction srand() avec un paramètre fixé à l’avance
mercredi 22 avril 2015Page 22 KMEANS – Adaptation au problème Nombre de zones initial inconnu Trouver une alternative au choix aléatoire des centres initiaux –Déterminiser ce choix –Faire un choix cartésien Nombre de zones doit pouvoir varier durant l’exécution –Division des zones de poids ou coût trop grands –Fusion des zones de poids ou coût trop faibles
mercredi 22 avril 2015Page 23 KMEANS – Adaptation au problème Quadrillage de la carte pour le choix des centres initiaux –Calcul du rectangle encadrant l’ensemble des points –Quadrillage en fonction du nombre de zones initial Les intersections représentent les centres initiaux « fictifs » des zones Fabrication des zones avec ces centres « fictifs » et avec comme coût inter-points la distance euclidienne Calcul du nouveau centre de chaque zone
mercredi 22 avril 2015Page 24 KMEANS – Adaptation au problème Quadrillage et zones fictives Calcul des nouveaux centres
mercredi 22 avril 2015Page 25 KMEANS – Adaptation au problème Nombre de zones initial inconnu Trouver une alternative au choix aléatoire des centres initiaux –Déterminiser ce choix –Faire un choix cartésien Nombre de zones doit pouvoir varier durant l’exécution –Division des zones de poids ou coût trop grands –Fusion des zones de poids ou coût trop faibles
mercredi 22 avril 2015Page 26 KMEANS – Adaptation au problème Division d’une zone en cas de : –Poids trop grand Le nouveau centre est le centre des points de la zone initiale privée de son centre –Coût trop grand Le nouveau centre est le points le plus éloigné du centre de la zone initiale en terme de coût inter-points
mercredi 22 avril 2015Page 27 KMEANS – Adaptation au problème Poids trop grandCoût trop grand
mercredi 22 avril 2015Page 28 KMEANS – Adaptation au problème Nombre de zones initial inconnu Trouver une alternative au choix aléatoire des centres initiaux –Déterminiser ce choix –Faire un choix cartésien Nombre de zones doit pouvoir varier durant l’exécution –Division des zones de poids ou coût trop grands –Fusion des zones de poids ou coût trop faibles
mercredi 22 avril 2015Page 29 KMEANS – Adaptation au problème Fusion d’une zone –Poids ou Coût trop petit ET –Proche d’une autre zone Empêche la fusion de zones isolées
mercredi 22 avril 2015Page 30 On arrive donc à un algorithme KMEANS « dynamique »
mercredi 22 avril 2015Page 31 KMEANS – Problème rencontré Boucle dans l’exécution –Division et fusion successives sur le même ensemble de zones Solution : détecter les configurations de zone similaires durant l’exécution de l’algorithme
mercredi 22 avril 2015Page 32 KMEANS – Problème rencontré Détection des redondances de l’algorithme –Utilisation d’une fonction de hachage de la liste des zones Ne doit dépendre que du centre de chaque zone –Stockage du haché de chaque tour dans un tableau pour comparaison Tableau de taille le nombre de tour maximum prévu –Si redondance détectée, arrêt de l’exécution dans un état final On arrête l’exécution avec toutes les zones correctement construites
mercredi 22 avril 2015Page 33 Plan Présentation du projet Approche théorique et solutions proposées –Constitution de zones Présentation de l’algorithme « KMEANS » Adaptation au problème Choix des centres Problèmes rencontrés –Constitution de cycles Présentation de l’algorithme « Hongrois » Présentation de l’algorithme « RAI » –Constitution de tournées Réalisation Tests Recherche et amélioration Conclusion
mercredi 22 avril 2015Page 34 Construction de cycles Une fois les zones construites, le but est de constituer un chemin de collecte dont le cycle est minimal. Ce problème est également connu sous le nom de ATSP (Asymetric Travelling Salesman Problem). Nous avons implémenté deux solutions à ce problème : –Un premier algorithme, appelé algorithme Hongrois construit une matrice de 1 et de 0 (les 1 montrent l’adjacence des deux zones) telle que la somme des coûts où se situent les 1 soit minimal. –Un deuxième appelé RAI construisant un cycle par ajout/suppression de zones à un cycle considéré comme étant minimal.
mercredi 22 avril 2015Page 35 Présentation de l’algorithme « Hongrois » (1) L’algorithme hongrois comporte six étapes : 1.Réduction des lignes : créer une nouvelle matrice des coûts en choisissant la coût minimal de chaque ligne et en le soustrayant à chaque coût sur cette ligne ; 2.Trouver un zéro dans la matrice : s’il n’y a aucun zéro marqué dans la ligne ou la colonne, marquer ce zéro. Réitérer ceci pour tous les zéros puis aller à l’étape 3 ; 3.Déterminer le nombre minimal de lignes nécessaires sur les lignes et les colonnes pour couvrir tous les zéros. Si ce nombre est égal au nombre de lignes, la matrice est réduite, passer à l’étape 6 ;
mercredi 22 avril 2015Page 36 Présentation de l’algorithme « Hongrois » (2) 4.Trouver un zéro non couvert et le primer. S’il n’y a aucun zéro marqué dans sa ligne, aller à l’étape 5. Sinon couvrir cette ligne et découvrir sa colonne. Reproduire cette procédure tant qu’il y a des zéros non-couverts. Retenir la plus petite valeur Z 0 de ces zéros non couverts et aller à l’étape 6 ; 5.Construire une série alternée de zéros primés et marqués comme suit, soit Z 1 le zéro marqué de la colonne de Z 0 s’il existe, et Z 2 le zéro primé de la ligne de Z 1. Continuer ainsi de façon à ce que la série termine lorsqu’un zéro primé n’ait aucun zéro marqué dans sa colonne. Démarquer tous les zéros marqués de la série, marquer tous les zéros primés, transformer les zéros primés en non primés et découvrir chaque ligne de la matrice. Retourner à l’étape 3. 6.Ajouter la valeur trouvée à l’étape 4 à tous les éléments de chaque ligne couverte, et l’ôter de tous les éléments de chaque colonne non couverte. Retourner à l’étape 4.
mercredi 22 avril 2015Page 37 Présentation de l’algorithme « RAI » (1) L’algorithme RAI comporte dix étapes : 1.Initialisation : on choisit un sommet au hasard, le cycle est alors constitué seulement de ce sommet ; 2.Choisir un sommet qui n’est pas encore dans le cycle ; 3.Insérer ce sommet de façon optimum. Si le cycle n’est pas complet, retourner à l’étape 2 ; 4.Soit S la solution trouvée ; 5.Répéter 2n 2 fois les étapes 6 à 10 ; 6.Choisir aléatoirement deux entiers i et j (entre 1 et le nombre de zones, avec i < j) 7.Enlever la portion du sommet i au sommet j, et refermer le cycle; 8.Choisir aléatoirement un sommet dans la portion enlevée ; 9.Insérer ce sommet de façon optimum. Si le cycle n’est pas complet, retourner à l’étape 8 ; 10.Comparer la solution trouvée à la solution S et garder la meilleure.
mercredi 22 avril 2015Page 38 Présentation de l’algorithme « RAI » (2) L’algorithme RAI a été implémenté de deux façons différentes : –Avec un tableau de taille fixe et une représentation séquentielle du cycle. –Avec un tableau de taille fixe géré en liste chaînée.
mercredi 22 avril 2015Page 39 Plan Présentation du projet Approche théorique et solutions proposées –Constitution de zones Présentation de l’algorithme « KMEANS » Adaptation au problème Choix des centres Problèmes rencontrés –Constitution de cycles Présentation de l’algorithme « Hongrois » Présentation de l’algorithme « RAI » –Constitution de tournées Réalisation Tests Recherche et amélioration Conclusion
mercredi 22 avril 2015Page 40 Constitution de tournées Construire des tournées consiste à répartir les zones à collecter entre les bennes à ordure dont nous disposons. Une manière de le faire consiste à découper le cycle en tranches dont le poids est borné par les capacités maximum des bennes. On obtient ainsi un découpage du cycle, chaque tranche étant collectée par une benne. Si le nombre de tranches du cycle est supérieur au nombre de bennes dont on dispose, un deuxième tour de collecte doit être lancé. La notion de tours est laissée au soin de l’utilisateur : celui-ci clonera des bennes s’il décide de leur faire faire un deuxième tour.
mercredi 22 avril 2015Page 41 Plan Présentation du projet Approche théorique et solutions proposées Réalisation –Données de départ –Structure –Données retournées à l’utilisateur –Affichage des résultats Tests Recherche et amélioration Conclusion
mercredi 22 avril 2015Page 42 Données de départ Conformément au cahier des charges, le client fourni les coordonnées entières de chaque point de la carte dans un tableau. De la même manière, il devra fournir le poids de chaque rue ainsi que le coût de chacune des rues dans un tableau de réels.
mercredi 22 avril 2015Page 43 Les différents modules
mercredi 22 avril 2015Page 44 Structure (1) Structure point : –Indice du point –Pointeur sur le point suivant Structure zone : –Pointeur vers la zone suivante –Numéro de la zone –Poids de la zone –Coût de la zone –Liste des points qu’elle contient –Centre de la zone
mercredi 22 avril 2015Page 45 Structure (2) Lors de la construction de zones, il est nécessaire de connaître un certain nombres de constantes, nous les avons regroupés dans la structure configuration. Structure configuration : –Nombre de points de la carte –Type d’initialisation choisie –Nombre de tours maximal –Poids maximal d’une zone –Poids minimal d’une zone –Coût maximal d’une zone –Coût minimal d’une zone –Coût minimal entre deux centres de zone
mercredi 22 avril 2015Page 46 Structure (3) Nous avons également créé une structure benne : –Numéro de la benne –Charge maximal Ainsi que la structure tournée : –Numéro de benne associé (1 benne = 1 tournée) –Poids total –Coût total –Indices des zones collectés lors de cette tournée –Pointeur sur la prochaine tournée
mercredi 22 avril 2015Page 47 Données retournées à l’utilisateur Les données exploitables par l’utilisateur sont : –Un pointeur sur une liste chaînée de zones : zone * zones; –Un pointeur sur une liste chainée de tournées : Tournee * tournees;
mercredi 22 avril 2015Page 48 Affichage des résultats (1) Exemple de fichier Scilab : X = [1, 4, 8, 5]; Y = [7, 3, 6, 1]; plot(X,Y);
mercredi 22 avril 2015Page 49 Affichage des résultats (2) Exemple de fichier Scilab : X = [4, 3, 4, 5, 4, 3, 4, 5, 4, 2]; Y = [4, 6, 4, 2, 4, 1, 4, 6, 4, 3]; plot(X,Y);
mercredi 22 avril 2015Page 50 Plan Présentation du projet Approche théorique et solutions proposées Réalisation Tests Recherche et amélioration Conclusion
mercredi 22 avril 2015Page 51 Tests (1) Nous allons ici comparer les résultats obtenues avec nos différents algorithmes : –L’algorithme KMEANS avec initialisation aléatoire et avec initialisation par quadrillage ; –L’algorithme KMEANS avec différents paramètres ; –L’algorithme hongrois et l’algorithme RAI. Les tests sont réalisés à l’aide du jeu de tests réel fourni par le client.
mercredi 22 avril 2015Page 52 Tests (2) Comparaison des deux initialisations de KMEANS : Résultats assez proches Initialisation aléatoire Initialisation par le quadrillage Temps de calcul0,5s0,7s Nombre de zones crées 5249
mercredi 22 avril 2015Page 53 Zones après initialisation aléatoire
mercredi 22 avril 2015Page 54 Zones après initialisation quadrillage
mercredi 22 avril 2015Page 55 Tests (3) Tests de l’algorithme KMEANS avec différents paramètres : Poids max d’une zone : 1000 Poids max d’une zone : entre 500 et 3000 (ie avec fusion) Poids max d’une zone : 3000 Temps de calcul 0,7 s0,4 s0,5 s Nombre de zones crées
mercredi 22 avril 2015Page 56 Zones avec poids maximale égale à 1000
mercredi 22 avril 2015Page 57 Zones avec fusion
mercredi 22 avril 2015Page 58 Tests (4) Comparaison entre les deux algorithmes qui créent un cycle. Les tests ont été réalisés dans le cas suivant : poids maximum d’une zone : 2000, initialisation aléatoire, poids minimum d’une zone 300. Ceci conduit à 74 zones. –Avec l’algorithme hongrois, le résultat de l’algorithme est quasi instantané et la longueur du cycle est –Avec l’algorithme RAI, le temps de calcul est d’environ 0,3s et la longueur du cycle est Sur ce jeu de test, l’algorithme RAI est nettement plus efficace : sa solution est environ 10% moins longue que celle proposée par l’algorithme hongrois.
mercredi 22 avril 2015Page 59 Résultat Hongrois
mercredi 22 avril 2015Page 60 Résultat RAI
mercredi 22 avril 2015Page 61 Tests (6) D’autres jeux de tests pourraient nous permettre de confirmer, ou au contraire d’infirmer les observations réalisées avec ce jeu de test. Cependant ces tests sont tout à fait cohérents et aucune aberration n’a été notée. De plus, nous pouvons noter que le temps de calcul nécessaire pour trouver une solution est tout à fait acceptable.
mercredi 22 avril 2015Page 62 Plan Présentation du projet Approche théorique et solutions proposées Réalisation Tests Recherche et amélioration Conclusion
mercredi 22 avril 2015Page 63 Recherche et amélioration (1) Les algorithmes génétiques appartiennent à la famille des algorithmes méta heuristiques dont le but est d’obtenir une solution approchée à un problème d’optimisation. Le principe de ce type d’algorithmes est de se rapprocher par ``bonds’’ successifs d’une solution grâce à la notion de sélection naturelle.
mercredi 22 avril 2015Page 64 Recherche et amélioration (2) La sélection naturelle : la sélection des individus est effectuée en fonction du critère à optimiser, les principaux types de sélection sont : –La sélection par rang ; –La sélection proportionnelle à l’adaptation ; –La sélection par tournoi ; –La sélection uniforme.
mercredi 22 avril 2015Page 65 Recherche et amélioration (3) Nous présentons ci-après des pistes qui pourraient permettre de résoudre le problème du voyageur de commerce à l’aide d’un algorithme génétique. –Fonction d’adaptation d’un chemin : sa longueur (ou son coût de passage entre les zones). –Procédure de croisement : Choisir aléatoirement deux points de découpe que nous appellerons « locus » ; Intervertir les zones qui se trouvent entre ces deux locus ; Éliminer les zones à l’extérieur des locus qui se trouvent déjà à l’intérieur des locus ; Recenser les zones qui ne figurent pas dans ces deux cycles ; Compléter les cycles aléatoirement avec les zones recensés précédemment.
mercredi 22 avril 2015Page 66 Recherche et amélioration (4) –Procédure de mutation : permuter deux zones présentes dans le cycle L’objet que l’on cherche à optimiser est un cycle, il se peut que deux cycles soient identiques à une rotation près. Une solution possible est d’imposer une zone par laquelle devront commencer tous les cycles (par exemple la zone de dépôt des bennes à ordures).
mercredi 22 avril 2015Page 67 Recherche et amélioration (5) Cet algorithme présente en inconvénient important : il est parfaitement adapté pour un espace de solutions très grand, par contre pour un nombre de points réduit ou raisonnable, il est peut être plus sur de parcourir cet espace de façon exhaustive. Le gros avantage de cet algorithme est qu’il s’adapte parfaitement à l’environnement dans lequel il est placé.
mercredi 22 avril 2015Page 68 Plan Présentation du projet Approche théorique et solutions proposées Réalisation Tests Recherche et amélioration Conclusion
mercredi 22 avril 2015Page 69 Conclusion Ce projet fut très intéressant et enrichissant du point de vue organisationnel même si les motivations de chacun étaient diverses. Il nous a permis d’utiliser de nouveaux outils de communication (SVN, WIKI, liste de diffusion). Tous les objectifs fixés dans le cahier des charges ont été atteints, mais par manque de temps l’implémentation d’autres solutions n’a pas pu être réalisée.