1 / 55

Recherche de chemins de coût minimal avec l’algorithme A* Mise en œuvre pratique

Recherche de chemins de coût minimal avec l’algorithme A* Mise en œuvre pratique. Olivier NOCENT. IUT de Reims-Châlons-Charleville rue des crayères, BP 1035 51687 Reims Cedex 2. Introduction.

lakia
Download Presentation

Recherche de chemins de coût minimal avec l’algorithme A* Mise en œuvre pratique

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Recherche de cheminsde coût minimalavec l’algorithme A*Mise en œuvre pratique Olivier NOCENT IUT de Reims-Châlons-Charlevillerue des crayères, BP 103551687 Reims Cedex 2

  2. Introduction Objectif : Déterminer, pour un agent* donné, un chemin de coût minimum depuis un sommet source vers un sommet destination au sein d’un graphe orienté. Un agent est un objet informatique autonome utilisé pour représenter une entité mobile dotée d’un comportement (humain, animal, véhicule, …)

  3. Applications • Jeux vidéo • Animation des personnages non joueurs (RPG, FPS) • Déplacement réaliste d’un personnage contrôlé par le joueur vers un objectif désigné par le joueur (RTS) • Simulation – vie artificielle • Etude du comportement d’une foule, du traffic automobile, … • Effets spéciaux (scènes de bataille, …)

  4. Représentation du graphe à partir d’informations topographiques

  5. Relations d’adjacence : grille carrée Pont Prairie Rivière

  6. Relations d’adjacence : grille hexagonale Prairie Pont Rivière

  7. Relations d’adjacence : points visibles Obstacles Couloirs

  8. Coût des arcs Signification du coût d’un arc : • Distance kilométrique • Recherche de chemins de longueur minimale • Temps (nécessaire au franchissement de l’arc) • Recherche de chemins en temps minimum • Consommation de carburant • Rechercher de chemins « économes »

  9. Coût des arcs : grille carrée 10 10 10 10

  10. 10 10 10 10 10 10 10 10 10 10 10 10 Coût des arcs : grille hexagonale Triangle équilatéral

  11. 10 10 10 10 40 40 10 40 40 80 10 80 10 80 80 40 40 40 40 10 10 10 10 10 Coût des arcs : pondération en fonction de la nature de l’environnement Prairie Montagne

  12. Coût des arcs : pondération en fonction de la nature de l’agent Coût du franchissement d’un pont C = 10 pour un humain. C = 50 pour une voiture. C = 500 pour un semi-remorque. C C

  13. Algorithme A*

  14. Principe général : évaluation du coût total d’un sommet Coût total (F) = Coût depuis la source (G) + Coût vers la destination (H) • G : Coût depuis la source • Algorithmes classiques (Ford, Bellman, Dijkstra) • Gi = min Gj + Cij / i prédecesseur de j Cij coût de l’arc (i,j) • H : Coût vers la destination • Difficile puisque le reste du chemin (vers la destination) est encore inconnu.

  15. Coût vers la destination Pourquoi évaluer un coût vers la destination ? Afin de resserrer l’ensemble des sommets à explorer en privilégiant les sommets « qui semblent » nous rapprocher de la destination. RemarqueDans le cas d’un algorithme de recherche plus classique (Dijsktra), on effectue une recherche exhaustive parmi TOUS les sommets. Conséquencel’algorithme A* est plus performant que n’importe quel autre algorithme puisqu’il diminue l’ensemble des sommets à explorer.

  16. Coût vers la destination Comment évaluer un coût vers la destination ? En utilisant des heuristiques (prédictions) afin d’évaluer un coût vers la destination INFERIEUR au coût réel (encore inconnu). A ce titre, A* est un algorithme optimiste. RemarqueSi l’heuristique était supérieur au coût réel, on risquerait de générer un chemin qui ne soit pas minimal.

  17. Distance euclidienne Théorème de Pythagore H 2 = (Coté oppose) 2 + (Coté adjacent) 2 H 2 = 40 2 + 20 2 = 2000 H = 20 x (5) 1/2 S 40 H 20 D

  18. Distance de Manhattan Nombre de cellules, en horizontal et en vertical entre la source et la destination. Plus conforme à la nature des déplacements autorisés (haut, bas, gauche, droite) S D

  19. Algorithme A* Initialisation Sommet source (S) Sommet destination (D) Liste des sommets à explorer (E) : sommet source S Liste des sommets visités (V) : vide Tant que (la liste E est non vide) et (D n’est pas dans E) Faire + Récupérer le sommet X de coût total F minimum. + Ajouter X à la liste V + Ajouter les successeurs de X (non déjà visités) à la liste E en évaluant leur coût total F et en identifiant leur prédécesseur. + Si (un successeur est déjà présent dans E) et (nouveau coût est inférieur à l’ancien) Alors Changer son coût total Changer son prédécesseur FinSi FinFaire

  20. Exemple 1 S Sommet source D Sommet destination D Obstacle S

  21. Exemple 1 Sommet déjà visité Sommet à explorer 10 + 30 D Coût depuisla source Coût versla destination 10 + 50 S G + H 10 + 50 Référence auprédécesseur

  22. Exemple 1 20 + 40 Sommet déjà visité Sommet à explorer 20 + 40 10 + 30 D Coût depuisla source Coût versla destination 10 + 50 S G + H 10 + 50 Référence auprédécesseur

  23. Exemple 1 20 + 40 Sommet déjà visité Sommet à explorer 20 + 40 10 + 30 D Coût depuisla source Coût versla destination 10 + 50 S G + H 10 + 50 20 + 60 Référence auprédécesseur

  24. Exemple 1 20 + 40 Sommet déjà visité Sommet à explorer 20 + 40 10 + 30 D Coût depuisla source Coût versla destination 10 + 50 S G + H 10 + 50 20 + 60 20 + 60 Référence auprédécesseur

  25. Exemple 1 20 + 40 30 + 50 Sommet déjà visité Sommet à explorer 20 + 40 10 + 30 D Coût depuisla source Coût versla destination 10 + 50 S G + H 10 + 50 20 + 60 20 + 60 Référence auprédécesseur

  26. Exemple 1 20 + 40 30 + 50 30 + 30 Sommet déjà visité Sommet à explorer 20 + 40 10 + 30 D Coût depuisla source Coût versla destination 10 + 50 S G + H 10 + 50 20 + 60 20 + 60 Référence auprédécesseur

  27. Exemple 1 40 + 20 20 + 40 30 + 50 30 + 30 Sommet déjà visité Sommet à explorer 20 + 40 10 + 30 D Coût depuisla source Coût versla destination 10 + 50 S G + H 10 + 50 20 + 60 20 + 60 Référence auprédécesseur

  28. Exemple 1 40 + 20 50 + 10 20 + 40 30 + 50 30 + 30 Sommet déjà visité Sommet à explorer 20 + 40 10 + 30 D 50 + 10 Coût depuisla source Coût versla destination 10 + 50 S G + H 10 + 50 20 + 60 20 + 60 Référence auprédécesseur

  29. Exemple 1 40 + 20 50 + 10 20 + 40 30 + 50 30 + 30 Sommet déjà visité Sommet à explorer 20 + 40 60 + 0 10 + 30 50 + 10 Coût depuisla source Coût versla destination 10 + 50 S G + H 60 + 20 10 + 50 20 + 60 20 + 60 Référence auprédécesseur

  30. Exemple 1 D S

  31. Exemple 2 S Sommet source D Sommet destination D Obstacle S

  32. Exemple 2 Sommet déjà visité Sommet à explorer D Coût depuisla source Coût versla destination 10 + 30 10 + 50 S G + H Référence auprédécesseur

  33. Exemple 2 Sommet déjà visité Sommet à explorer D Coût depuisla source Coût versla destination 10 + 30 10 + 50 S G + H Référence auprédécesseur

  34. Exemple 2 Sommet déjà visité Sommet à explorer 20 + 40 D Coût depuisla source Coût versla destination 10 + 30 10 + 50 S G + H 20 + 60 Référence auprédécesseur

  35. Exemple 2 30 + 50 Sommet déjà visité Sommet à explorer 20 + 40 D Coût depuisla source Coût versla destination 10 + 30 10 + 50 S G + H 20 + 60 Référence auprédécesseur

  36. Exemple 2 30 + 50 Sommet déjà visité Sommet à explorer 20 + 40 D Coût depuisla source Coût versla destination 10 + 30 10 + 50 S G + H 20 + 60 Référence auprédécesseur

  37. Exemple 2 30 + 50 Sommet déjà visité Sommet à explorer 20 + 40 D Coût depuisla source Coût versla destination 10 + 30 10 + 50 S G + H 20 + 60 30 + 70 Référence auprédécesseur

  38. Exemple 2 30 + 50 Sommet déjà visité Sommet à explorer 20 + 40 D Coût depuisla source Coût versla destination 10 + 30 10 + 50 S G + H 20 + 60 40 + 60 30 + 70 Référence auprédécesseur 40 + 80

  39. Exemple 2 30 + 50 Sommet déjà visité Sommet à explorer 20 + 40 D Coût depuisla source Coût versla destination 10 + 30 10 + 50 S G + H 20 + 60 50 + 50 40 + 60 30 + 70 Référence auprédécesseur 40 + 80 50 + 70

  40. Exemple 2 30 + 50 Sommet déjà visité Sommet à explorer 20 + 40 D Coût depuisla source Coût versla destination 10 + 30 10 + 50 S G + H 20 + 60 50 + 50 60 + 40 40 + 60 30 + 70 Référence auprédécesseur 40 + 80 50 + 70 60 + 60

  41. Exemple 2 30 + 50 Sommet déjà visité Sommet à explorer 20 + 40 D Coût depuisla source Coût versla destination 10 + 30 10 + 50 S G + H 20 + 60 50 + 50 60 + 40 70 + 30 40 + 60 30 + 70 Référence auprédécesseur 70 + 50 40 + 80 50 + 70 60 + 60

  42. Exemple 2 30 + 50 Sommet déjà visité Sommet à explorer 20 + 40 D Coût depuisla source Coût versla destination 10 + 30 10 + 50 S G + H 80 + 20 20 + 60 50 + 50 60 + 40 70 + 30 40 + 60 30 + 70 Référence auprédécesseur 80 + 40 70 + 50 40 + 80 50 + 70 60 + 60

  43. Exemple 2 30 + 50 Sommet déjà visité Sommet à explorer 20 + 40 D Coût depuisla source Coût versla destination 10 + 30 90 + 10 10 + 50 S G + H 80 + 20 20 + 60 50 + 50 60 + 40 70 + 30 40 + 60 30 + 70 Référence auprédécesseur 80 + 40 70 + 50 40 + 80 50 + 70 60 + 60

  44. Exemple 2 30 + 50 Sommet déjà visité Sommet à explorer 20 + 40 100 + 0 Coût depuisla source Coût versla destination 10 + 30 90 + 10 10 + 50 S G + H 80 + 20 20 + 60 50 + 50 60 + 40 70 + 30 40 + 60 30 + 70 Référence auprédécesseur 80 + 40 70 + 50 40 + 80 50 + 70 60 + 60

  45. Exemple 2 D S

  46. Structure des données : détail d’implémentation Initialisation Sommet source (S) Sommet destination (D) Liste des sommets à explorer (E) : sommet source S Liste des sommets visités (V) : vide Tant que (la liste E est non vide) et (D n’est pas dans E) Faire + Récupérer le sommet X de coût total F minimum. + Ajouter X à la liste V + Ajouter les successeurs de X (non déjà visités) à la liste E en évaluant leur coût total F et en identifiant leur prédécesseur. + Si (un successeur est déjà présent dans E) et (nouveau coût est inférieur à l’ancien) Alors Changer son coût total Changer son prédécesseur FinSi FinFaire

  47. Structure des données : détail d’implémentation Nécessité de mettre en œuvre un conteneur permettant de : • Récupérer un élément de coût total minimum. • Insérer un nouvel élément et trier le conteneur. • Mettre à jour le coût total d’un élément déjà présent dans le conteneur. • Déterminer si le conteneur est vide.

  48. Solution « élégante » : files Template <class T> class std::queue { public: … bool empty(); T pop() {return pop_front();} void push(T t) { push_back(t);} }; t push(t) pop()

  49. Solution « élégante » : files à priorité Le type T doit surcharger l’opérateur de comparaison < Template <class T> class std::priority_queue { public: … bool empty(); T pop() {return pop_front();} void push(T t) { /*insertion triée*/ } }; t push(t) pop()

  50. Insertion triée « efficace » Utilisation d’un arbre binaire d’éléments • Le fils gauche est strictement inférieur au nœud courant. • Le fils droit est supérieur ou égal au nœud courant. 5 3 12 1 4 7 20 15 25

More Related