Dév. d’application interactive III Recherche de chemin.

Slides:



Advertisements
Présentations similaires
Explorer un espace d’états
Advertisements

Algorithmes et structures de données avancés
Unstructured Lumigraph Rendering
Accélération du Rendu Volumique basée sur la Quantification des Voxels
Structures de données et complexité
Structures de données et complexité LIFO – FILO – FIFO – etc…
Sensibilisation à l’Algorithmique et structure de données
– Routage. Sommaire 1)Principes fondamentaux 1)Routage statique et dynamique 1)Convergence 1)Routage à vecteur de distance 1)Routage à état de liens 1)Systèmes.
Le protocole OSPF* *Open Shortest Path First.
ACS et Séquences Comportementales en environnements non-markoviens
Plus rapide chemin bicritère : un problème d’aménagement du territoire
Traitement Co-Séquentiel: Appariment et Fusion de Plusieurs Listes
Algorithmes de recherche informés (heuristiques)
Concepts avancés en mathématiques et informatique appliquées
Plus courts chemins On présente dans ce chapitre un problème typique de cheminement dans les graphes : la recherche d'un plus court chemin entre deux sommets.
Prise de décision dans les shooters TER 08/09 Sandrine Buendia
Structures de données et algorithmes – TP2
Pinage Of Empire.
Heuristiques A. Introduction B. Recherche d ’une branche
IFT313 Introduction aux langages formels
Programmation linéaire
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Projet informatique : optimisation du déplacement d’un robot
Les systèmes de jeux deviennent de plus en plus complexes, nécessitant que lIntelligence Artificielle progresse elle aussi en parallèle. Dans ce contexte,
Recherche de chemins de coût minimal avec l’algorithme A
Algorithme de Bellman-Ford
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT-2000
Présentation Structures de Données et TDA
CSI 4506: Introduction à l’intelligence artificielle
Cours 6 Paires attribut-valeur Structures de traits Unification.
Algorithmes d ’approximation
CLS algorithm Step 1: If all instances in C are positive, then create YES node and halt. If all instances in C are negative, create a NO node and halt.
Mise en oeuvre des MMCs L'utilisation des MMCs en reconnaissance des formes s'effectue en trois étapes : définition de la topologie de la chaîne de Markov,
Simon Langevin Mathieu Poisson
Gestion de Fichiers GF-10: Traitement Co-Sequentiel: Appariment et Fusion de Plusieures Listes (Base sur les sections de Folk, Zoellick & Riccardi,
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Pour le chemin le plus court pour tous les couples
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-10541

Python Fonction et procédure
Heuristiques C. Recherche de la meilleure branche . Branch And Bound
Apérisentation Sur les graphes évolutifs Mardi 22 novembre 16h30.
Graphes 1. Introduction 2. Définition 3. Représentation mémoire
Arbres et graphes.
l’APPRENTISSaGE PAR TÂCHES (Task based learning)
Programmation dynamique
Tutorat 7 - Introduction au Routage et OSPF
Optimisation par les algorithmes génétiques
Laboratoire des outils informatiques pour la conception et la production en mécanique (LICP) ÉCOLE POLYTECHNIQUE FÉDÉRALE DE LAUSANNE 1 Petri nets for.
Méthodes de tri.
Programmation créative – Les vecteurs
Arbres binaires et tables de hachage
Powerpoint Templates Page 1 Powerpoint Templates BE Graphe : Algorithme de Dijsktra Distribution d’un algorithme Jeudi 7 mai 2012 RULLIER Anthony.
I.A. Session 2009/2010 E.P.S.I. Bordeaux – C.S.I.I – 2 ème Année – Cours n°6.
Intelligence Artificielle
CSI 4506: Introduction à l’Intelligence Artificielle
Liste Une liste est une séquence d’éléments. Concept important: Chaque élément possède une position dans la liste. Notation: De quelles opérations a-t-on.
Protocoles de routage M6 module réseaux Mars 2003.
Ajouts et retraits dans un arbre de connexion Nicolas Thibault et Christian Laforest, Équipe OPAL Laboratoire IBISC (regroupement LaMI et LSC), Évry 8.
Le Jeu et l’intelligence artificielle
Les systèmes de jeux deviennent de plus en plus complexes, nécessitant que l’Intelligence Artificielle progresse elle aussi en parallèle. Dans ce contexte,
Problème de voyageur de commerce
CSI2510 Structures de données et algorithmes Plus court chemin
Clique Percolation Method (CPM)
Techniques d’Optimisation Chapitre 2: Problème de flôt Dr TARI Abdelkamel Mars 2014.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
1 Dijkstra's Shortest Path Algorithm Find shortest path from s to t. s 3 t
Transcription de la présentation:

Dév. d’application interactive III Recherche de chemin

Plan de leçon  Recherche de chemin (pathfinding)  Définition et principes  Algorithme A*

Recherche de chemin  Consiste en la recherche du chemin le plus court entre deux points (nœuds)  Un problème de l’intelligence artificielle  Utile entre autres dans les domaines suivants  Jeux vidéos  Planification  Routing  Recherche de solution  Robotique

Recherche de chemin  Algorithmes coûteux  Complexité augmente avec les obstacles  Obstacles peuvent être  Immobiles : Arbres, lacs, bureau  Mobiles : Voitures, personnes, ennemis  Infranchissable : Murs, trous  Franchissable : Boue, sable, lacs  Temps réel ou différé

Recherche de chemin  Algorithmes déterministes : On connaît les distances intermédiaires  Algorithme de Dijkstra  Algorithme A*  Near optimal hierarchical pathfinding Near optimal hierarchical pathfinding  Algorithmes probabilistes : On ne connaît pas les paramètres  Processus de décision markovien  Chaînes de Markov

Recherche de chemin  Algorithme de Dijsktra Algorithme de Dijsktra  Plus coûteux  Utilisé dans le domaine du réseautage pour trouver le chemin le plus optimal  Open shortest path first Open shortest path first  Minimum spanning tree Minimum spanning tree

Recherche de chemin  Algorithme A*  Plus rapide selon certaines conditions  + Obstacles = moins rapides  Utilisé dans le domaine du jeu  Ne retourne pas nécessairement le chemin optimal  Bon compromis entre le chemin optimal et la rapidité

Algorithme A*  L’algorithme A* (prononcé : A-star)est l’algorithme le plus fréquemment utilisé dans les jeuxalgorithme A*

Algorithme A* : Termes  G : Distance parcouru du nœud de départ au nœud actuel  H : Heuristique soit l’estimation de la distance en le nœud actuel et le nœud final  F : Distance à parcourir entre le départ et la fin si l’on passe par ce nœud  F = G + H

Algorithme A* : Termes  File d’attente prioritaire (open list) : Liste de nœuds qui sont à considérer lors de la recherche du chemin  Liste de nœuds vérifiés (closed list) : Liste de nœuds qui ont été vérifiés  Utilisée s’assurer que l’on ne considère pas un nœud plus d’une fois  Parent : Référence au nœud parent du nœud actuel soit le nœud qui a ajouté le nœud actuel dans la open list

Algorithme A*  Le principe est le suivant  On vide la file d’attente et la liste des nœuds vérifiés, on remet à zéro les valeurs F et G des nœuds de la carte  Mettre la valeur G du nœud de départ à 0  Mettre la valeur F du nœud de départ à la distance entre le départ et la fin soit le H  Ajouter le nœud de départ à la file d’attente

Algorithme A*  Tant que la file d’attente contient des nœuds  Trouver dans la file d’attente le nœud qui a la plus petite valeur F et l’assigner comme nœud actif  Si la file d’attente est vide ou encore aucun nœud ne peut être trouvé, i.e. que l’on ne peut trouver de chemin, mettre fin à l’algorithme

Algorithme A*  Si le nœud actif est le nœud final, on trouve et retourne le chemin final  Sinon pour chaque voisin du nœud actif  S’assurer que le voisin est marchable  Calculer une valeur G'  G du nœud actif + le coût de déplacement vers le voisin  Si le voisin n’est pas dans la file d’attente ou la liste vérifiée

Algorithme A*  Mettre la valeur G' dans celle du voisin  Mettre la valeur F du voisin à G + la distance du voisin au nœud final  Mettre comme parent du voisin le nœud actif  Ajouter le nœud actif dans la file d’attente  Fin si

Algorithme A*  Sinon si le voisin est dans la file d’attente ou encore dans la liste vérifiée  Si la valeur calculée G' est inférieure à voisin.G  Voisin.G = G‘  Voisin.F = G' + H  Voisin.Parent = noeudActif  Fin Si  Fin si

Algorithme A*  Retirer le nœud actif de la file d’attente  Mettre le nœud actif dans la listes vérifiées  Fin tant que nœud dans la file d’attente  Retourner une nouvelle liste de points

Exemple Source :

Exemple AB

Exercices  À l’aide du projet Tile Mapping du cours précédent, ajouter le code nécessaire pour trouver le chemin le plus court entre 2 tuiles

function A*(start,goal) closedset := the empty set // The set of nodes already evaluated. openset := {start} // The set of tentative nodes to be evaluated, initially containing the start node came_from := the empty map // The map of navigated nodes. g_score[start] := 0 // Cost from start along best known path. // Estimated total cost from start to goal through y. f_score[start] := g_score[start] + heuristic_cost_estimate(start, goal) while openset is not empty current := the node in openset having the lowest f_score[] value if current = goal return reconstruct_path(came_from, goal) remove current from openset add current to closedset for each neighbor in neighbor_nodes(current) if neighbor in closedset continue tentative_g_score := g_score[current] + dist_between(current,neighbor) if neighbor not in openset or tentative_g_score < g_score[neighbor] came_from[neighbor] := current g_score[neighbor] := tentative_g_score f_score[neighbor] := g_score[neighbor] + heuristic_cost_estimate(neighbor, goal) if neighbor not in openset add neighbor to openset return failure

function reconstruct_path(came_from,current) total_path := [current] while current in came_from: current := came_from[current] total_path.append(current) return total_path

Références  Vidéo  player_embedded&v=uvIIzj11ayM#! player_embedded&v=uvIIzj11ayM#!  Recherche de chemin Recherche de chemin  A* pathfinding for beginners A* pathfinding for beginners