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

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

Embed Size (px)

Citation preview

  • Page 1
  • Dv. dapplication interactive III Recherche de chemin
  • Page 2
  • Plan de leon Recherche de chemin (pathfinding) Dfinition et principes Algorithme A*
  • Page 3
  • Recherche de chemin Consiste en la recherche du chemin le plus court entre deux points (nuds) Un problme de lintelligence artificielle Utile entre autres dans les domaines suivants Jeux vidos Planification Routing Recherche de solution Robotique
  • Page 4
  • Recherche de chemin Algorithmes coteux Complexit augmente avec les obstacles Obstacles peuvent tre Immobiles : Arbres, lacs, bureau Mobiles : Voitures, personnes, ennemis Infranchissable : Murs, trous Franchissable : Boue, sable, lacs Temps rel ou diffr
  • Page 5
  • Recherche de chemin Algorithmes dterministes : On connat les distances intermdiaires Algorithme de Dijkstra Algorithme A* Near optimal hierarchical pathfinding Near optimal hierarchical pathfinding Algorithmes probabilistes : On ne connat pas les paramtres Processus de dcision markovien Chanes de Markov
  • Page 6
  • Recherche de chemin Algorithme de Dijsktra Algorithme de Dijsktra Plus coteux Utilis dans le domaine du rseautage pour trouver le chemin le plus optimal Open shortest path first Open shortest path first Minimum spanning tree Minimum spanning tree
  • Page 7
  • Recherche de chemin Algorithme A* Plus rapide selon certaines conditions + Obstacles = moins rapides Utilis dans le domaine du jeu Ne retourne pas ncessairement le chemin optimal Bon compromis entre le chemin optimal et la rapidit
  • Page 8
  • Algorithme A* Lalgorithme A* (prononc : A-star)est lalgorithme le plus frquemment utilis dans les jeuxalgorithme A*
  • Page 9
  • Algorithme A* : Termes G : Distance parcouru du nud de dpart au nud actuel H : Heuristique soit lestimation de la distance en le nud actuel et le nud final F : Distance parcourir entre le dpart et la fin si lon passe par ce nud F = G + H
  • Page 10
  • Algorithme A* : Termes File dattente prioritaire (open list) : Liste de nuds qui sont considrer lors de la recherche du chemin Liste de nuds vrifis (closed list) : Liste de nuds qui ont t vrifis Utilise sassurer que lon ne considre pas un nud plus dune fois Parent : Rfrence au nud parent du nud actuel soit le nud qui a ajout le nud actuel dans la open list
  • Page 11
  • Algorithme A* Le principe est le suivant On vide la file dattente et la liste des nuds vrifis, on remet zro les valeurs F et G des nuds de la carte Mettre la valeur G du nud de dpart 0 Mettre la valeur F du nud de dpart la distance entre le dpart et la fin soit le H Ajouter le nud de dpart la file dattente
  • Page 12
  • Algorithme A* Tant que la file dattente contient des nuds Trouver dans la file dattente le nud qui a la plus petite valeur F et lassigner comme nud actif Si la file dattente est vide ou encore aucun nud ne peut tre trouv, i.e. que lon ne peut trouver de chemin, mettre fin lalgorithme
  • Page 13
  • Algorithme A* Si le nud actif est le nud final, on trouve et retourne le chemin final Sinon pour chaque voisin du nud actif Sassurer que le voisin est marchable Calculer une valeur G' G du nud actif + le cot de dplacement vers le voisin Si le voisin nest pas dans la file dattente ou la liste vrifie
  • Page 14
  • Algorithme A* Mettre la valeur G' dans celle du voisin Mettre la valeur F du voisin G + la distance du voisin au nud final Mettre comme parent du voisin le nud actif Ajouter le nud actif dans la file dattente Fin si
  • Page 15
  • Algorithme A* Sinon si le voisin est dans la file dattente ou encore dans la liste vrifie Si la valeur calcule G' est infrieure voisin.G Voisin.G = G Voisin.F = G' + H Voisin.Parent = noeudActif Fin Si Fin si
  • Page 16
  • Algorithme A* Retirer le nud actif de la file dattente Mettre le nud actif dans la listes vrifies Fin tant que nud dans la file dattente Retourner une nouvelle liste de points
  • Page 17
  • Exemple Source : http://youtu.be/uvIIzj11ayM
  • Page 18
  • Exemple AB
  • Page 19
  • Page 20
  • Page 21
  • Page 22
  • Exercices laide du projet Tile Mapping du cours prcdent, ajouter le code ncessaire pour trouver le chemin le plus court entre 2 tuiles
  • Page 23
  • 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
  • Page 24
  • 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
  • Page 25
  • Rfrences Vido http://www.youtube.com/watch?feature= player_embedded&v=uvIIzj11ayM#! http://www.youtube.com/watch?feature= player_embedded&v=uvIIzj11ayM#! Recherche de chemin Recherche de chemin A* pathfinding for beginners A* pathfinding for beginners