Skip to content
This repository has been archived by the owner on Oct 25, 2023. It is now read-only.

navigation_pathfinder

Gaëtan Blond edited this page Feb 16, 2018 · 25 revisions

Description

C'est un programme qui détermine le plus court chemin entre deux postions, en évitant les obstacles. Il doit être efficace pour ne pas attendre trop longtemps sa réponse.

Authors and versions

  • **v0.0.1 (A17) @Mindstan
    • Package created with a cleaner code than P15/P17

How it works (french)

Le "Pathfinder"

L'algorithme

Le pathfinder ou chercheur de chemin utilise un algorithme (simplifié) de plus court chemin à origine unique, connu aussi sous les noms de parcours en largeur, BFS (Breadth First Search), ainsi que A* et Djikstra si on considère que la pondération (le coût de déplacement) est constante et positive.

Dans notre cas, le graphe est un tableau de 2 dimensions où une case contient l'information si elle peut être traversée. Les transitions ou arcs sont les cases voisines dans une direction (par exemple N,S,E,W) et comme nous n'avons pas de pondération on considère que celle-ci vaut 1.

Move directions

Dans un autre tableau de même taille on indique si une case a déjà été visitée et sa distance par rapport au point de départ; celui-ci est donc initialisé avec aucune case visitée.

Distances from start point

L'algorithme en lui-même est composé de 2 partie : on cherche un chemin vers notre cible en notant pour chaque case la distance déjà parcourue, puis si la position cible est atteinte, on par de la cible et on revient au point de départ en choisissant comme arcs ceux qui mennent à une position ayant une plus faible distance. On obtient alors le plus court chemin entre la position de départ et la position cible.

1) Le marquage des cases

Dans une approche simplifiée on considère qu'on a 2 listes de positions, une des positions précédemments vues et une de celles qui viennes d'être visitées. Une étape consiste, pour chaque positions précédentes, à marquer commes vues à l'aide de sa distance toutes ses voisines valides et non-vues, et à les ajouter dans la liste des positions suivantes. Si on tombe sur notre position cible alors on quitte et on passe à la deuxième partie.

Step find target point

A chaque fin d'étape, on vide copie la liste des nouvelles positions dans celle des précédentes (préalablement vidée) et on vide celle des suivantes. On augmente de 1 la distance déjà parcourrue. Si on se retrouve avec une liste des positions précédentes vide alors on a exploré tout le graphe et on n'a pas trouvé la position cible. Dans ce cas on quitte.

No valid path

2) La récupération du chemin

Clone this wiki locally