Introduction à Python Algorithmes de recherche locale (chemin le plus court)
Contenu Introduction à Python Algorithme de recherche locale (Recuit simulé) Application du recuit simulé au TSP LECTURES: Chapitres 4-5 Russell & Norvig, Artificial Intelligence: A Modern Approach LECTURES: Python For Everyone, C. Horstmann et R.D. Necaise Notes de cours (site ftp UQTR)
Introduction à Python Définitions de variables et constantes Fonctions mathématiques
Introduction à Python Importation de modules (packages) Énoncés conditionnels
Introduction à Python Énoncés répétitifs (boucles) Définition de fonctions
Introduction à Python Opérateurs (listes partielles) et précédence Chaînes de caractères
Introduction à Python Listes (lists)
Introduction à Python Tables I/O
Introduction à Python Ensembles (sets) et dictionnaires (dictionaries)
Introduction à Python Fichiers
Introduction à Python Définitions de classes
Introduction à Python Héritage
Algorithmes de recherche locale (Recuit simulé) Recherche locale: Algorithme Recuit Simulé Une recherche locale conserve que certains nœuds visités (de l’arbres des solutions possibles) en mémoire. La recherche locale (recuit simulé) conserve juste un nœud (le nœud courant) et l’améliore itérativement jusqu’à converger à une solution. Une fonction objectif doit être optimisée (maximiser ou minimiser). Pour l’approche par recuit simulé, elle permet de trouver le prochain nœud à visiter.
Algorithmes de recherche locale (Recuit simulé) Recherche locale: Algorithme Recuit Simulé Une recherche locale ne garantie pas de solution optimale mais permet de trouver une solution acceptable rapidement
Algorithmes de recherche locale (Recuit simulé) Recherche locale: Algorithme Recuit Simulé Pour expliquer le recuit simulé nous référons au concept de pente de descente (gradient descent) et en observant comment une balle de ping-pong peut se loger dans la plus grande crevace d’une surface cahoteuse. Si on laisse rouler la balle, elle pourrait se loger dans un minimum local. Si nous brassons Ia surface, la balle sortira de ce minimum local. Le recuit simulé commence en appliquant un brassage d’assez forte intensité (haute température) et en reduisant cette intensité (diminution de la température)
Algorithmes de recherche locale (Recuit simulé) Recherche locale: Algorithme Recuit Simulé
Algorithmes de recherche locale (Recuit simulé) Recherche locale: Algorithme Recuit Simulé L’algorithme Simulated annealing minimise le risque de resté pris dans un minimun/maximum local. CEPENDANT, il est possible selon la forme de la fonction objectif (f(n)) que les successeurs générés par l’algorithme oscillent en pouvant revenir à des nœuds déjà visités. En enregistrant les nœuds visités comme dans l’approche A* nous pourrions éviter la situation précédente. MAIS, avec des espaces d’états volumineux il devient difficile de conserver tous ces états. L’algorithme de recherche tabou permet de conserver les k derniers nœuds générés, ce qui permet de réduire l’incidence des possibles oscillations.
Algorithmes de recherche locale (Recuit simulé) Recherche locale: Algorithme Recuit Simulé L’algorithme Simulated annealing minimise le risque de resté pris dans un minimun/maximum local. L’algorithme de recherche locale en faisceau (Local Beam) permet de conserver les k différents nœuds générés, ce qui permet aussi de réduire l’incidence des possibles oscillations. L’algorithme commence en sélectionnant aléatoirement k nœuds, ensuite, les successeurs de ces nœuds sont générés, les k meilleurs nœuds successeurs sont ensuite sélectionnés et sont à leur tour étendus. La variante stochastique de la recherche locale en faisceau choisie k successeurs aléatoirement, avec la probabilité de choisir un successeur donné étant une fonction croissante de sa valeur f(n) (fitness).
Application du recuit simulé au TSP Traveling Saleman Problem (TSP) (chemin le plus court)
Application du recuit simulé au TSP Étant donné n nœuds dans un graphe (des « villes ») et des arcs annotés par les distances séparant chaque noeud, trouver un chemin de longueur totale minimale qui passe exactement une fois par chaque point et revienne au point de départ. Formellement, une instance est un graphe complet G=(V,A,c) avec V un ensemble de sommets, A un ensemble d'arêtes (arcs) et c une fonction de coût sur les arcs. Le problème est de trouver le plus court cycle hamiltonien dans le graphe G. Un cycle hamiltonien étant un chemin dans le graphe passant par chaque nœud une seule fois et qui se termine au point de départ
Application du recuit simulé au TSP Cycle hamiltonien Cycle hamiltonien de longueur minimale
Application du recuit simulé au TSP Traveling Salesman Problem: Implémentation du TSP (version Recuit simulé) (Voir EX-TSP-Recuit-Simule-Py)
Application du recuit simulé au TSP Traveling Salesman Problem: Implémentation du TSP (version Recuit simulé) (Voir EX-TSP-Recuit-Simule-Py) Exemples d’exécution
Application du recuit simulé au TSP Traveling Salesman Problem: Implémentation du TSP (version Recuit simulé) (Voir EX-TSP-Recuit-Simule-Py) Importation des librairies requises (ex: numpy et matplotlib) Générer une liste de villes “cities”, chacune avec une coordonnée (x, y) dans un intervalle [0, 100[, choisie aléatoirement. La méthode range(100) retourne une liste [0,1,2,...,100[ La méthode random.sample( ,2) permet de choisir un ensemble (set) de dimension 2 de cette liste. La sélection des coordonnées est répétée 15 fois, formant ainsi une liste de coordonnées de 15 villes (cities).
Application du recuit simulé au TSP Traveling Salesman Problem: Implémentation du TSP (version Recuit simulé) (Voir EX-TSP-Recuit-Simule-Py) Une tournée “Tour” est une liste de 15 indices (dans la liste cities) représentant l’ordre de visite des villes. Sachant que nous devons avoir un circuit fermé avec la dernière ville visitée se connectant automatiquement à la première. La méthode numpy.logspace(0,5,num=100000) génère une liste 100,000 nombres dans l’intervalle [1, 10^5] dont le logarithme produit alors des nombres uniformément espacés. La température variera alors exponentiellement. Pour que la température soit élevée au début, nous devons inverser la liste, l’énoncé [::-1] permet de faire cette inversion.
Application du recuit simulé au TSP Traveling Salesman Problem: Implémentation du TSP (version Recuit simulé) (Voir EX-TSP-Recuit-Simule-Py) Permet de générer une nouvelle route en permutant 2 villes choisies aléatoirement. Choix de 2 nombres i, j parmis les 15 villes possibles par l’appel à la méthode random.sample( ,2) classés en ordre croissant par la méthode sorted( ). La nouvelle tournée est générée en: Copier les villes de la liste tour (old tour) de la position 0 à i-1 (tour[:i]) dans la liste newTour Ajouter la ville à la position j de la liste tour dans la liste newTour (tour[j:j+1]) Copier les villes de la liste tour (old tour) de la position i+1 à j-1 (tour[i+1:j]) dans la liste newTour Ajouter la ville à la position i de la liste tour dans la liste newTour (tour[i:i+1]) Copier les villes de la liste tour (old tour) de la position j+1 jusqu’à la fin (tour[j+1:]) dans la liste newTour
Application du recuit simulé au TSP Traveling Salesman Problem: Implémentation du TSP (version Recuit simulé) (Voir EX-TSP-Recuit-Simule-Py) Les distances sont seulement calculées entre les 2 villes allant vers la iième et la jième ville et les villes suivants la iième et la jième ville, les autres distances restant les mêmes
Application du recuit simulé au TSP Traveling Salesman Problem: Implémentation du TSP (version Recuit simulé) (Voir EX-TSP-Recuit-Simule-Py) Si la condition de l’énoncé if est vrai, nous faisons une mise à jour de la tournée avec newTour La somme des distances entre les villes correspond à l’énergie d’un système que nous devons minimiser Le facteur de Gibbs est l’ exponentiel de la variation (négative) de l’énergie sur la température Ce qui représente la probabilité de transition vers un nouvel état à partir d’un ancien état Si le facteur de Gibbs est > 1 alors la nouvelle énergie est plus basse, nous sélectionnons le newTour.
Application du recuit simulé au TSP Traveling Salesman Problem: Implémentation du TSP (version Recuit simulé) (Voir EX-TSP-Recuit-Simule-Py) Sinon, même si le newTour est moins bon, nous pourrions le prendre quand même selon la valeur d’une probabilité, permettant d’éviter de rester pris dans un minimum local Alors si avec r [0,1] généré par la méthode random.random() Permet l’affichage du chemin le plus court généré
Application du recuit simulé au TSP Traveling Salesman Problem: Implémentation du TSP (version Recuit simulé) (Voir EX-TSP-Recuit-Simule-Py) Exemple d’exécution