🗺️ Recherche de Chemin A*
Observez A* trouver le plus court chemin sur une grille avec f(n)=g(n)+h(n). Peignez des murs, déplacez le départ et l'arrivée, changez d'heuristique, et comparez A*, Dijkstra et la recherche gloutonne.
À propos de la Recherche de Chemin A*
A* (prononcé « A-star ») est un algorithme de recherche de graphe du meilleur d'abord qui trouve le plus court chemin entre deux points en combinant le coût optimal garanti de Dijkstra (g) avec une estimation heuristique de la distance restante (h), donnant à chaque nœud un score de priorité f = g + h. Développé par Hart, Nilsson et Raphael en 1968, il sous-tend tout, de la navigation des personnages de jeux vidéo et la planification de mouvement des robots au calcul d'itinéraires de Google Maps. Quand l'heuristique est admissible — c'est-à-dire qu'elle ne surestime jamais le coût réel — A* est garanti de trouver le chemin optimal.
Cette simulation vous permet de choisir entre A*, Dijkstra (h = 0), et Greedy Best-First (g = 0) sur une grille où vous pouvez peindre des murs et un terrain pondéré (coût ×5), déplacer les nœuds de départ et d'arrivée, sélectionner une heuristique (Manhattan, Euclidienne, ou Chebyshev), activer les déplacements diagonaux, et observer les nœuds s'étendre pas à pas. Les statistiques en direct montrent les nœuds étendus, la longueur du chemin et le coût total.
Questions Fréquentes
Que signifie f = g + h ?
Dans A*, chaque nœud de l'ensemble ouvert est noté par f(n) = g(n) + h(n), où g(n) est le coût exact du chemin le moins cher trouvé jusqu'ici du départ au nœud n, et h(n) est l'estimation heuristique du coût de n jusqu'au but. L'algorithme étend toujours le nœud avec le f le plus bas, garantissant que si h est admissible, la première fois que le but est étendu, son chemin est optimal.
Qu'est-ce qu'une heuristique admissible ?
Une heuristique h est admissible si elle ne surestime jamais le coût réel pour atteindre le but — formellement h(n) ≤ h*(n) pour tout n. La distance de Manhattan (somme des pas horizontaux et verticaux) est admissible sur une grille à connectivité 4 ; la distance euclidienne est admissible pour toute grille. Une heuristique non admissible peut rendre A* plus rapide mais peut retourner un chemin sous-optimal.
En quoi A* diffère-t-il de l'algorithme de Dijkstra ?
L'algorithme de Dijkstra fixe h = 0, il étend donc les nœuds selon leur coût exact depuis le départ, rayonnant également dans toutes les directions. A* ajoute l'heuristique pour guider la recherche vers le but, étendant généralement beaucoup moins de nœuds. Sur une grille ouverte sans obstacles, A* avec la distance de Manhattan peut réduire les extensions de nœuds de 50 à 90 % par rapport à Dijkstra.
Pourquoi la recherche Greedy Best-First est-elle plus rapide mais non optimale ?
Greedy Best-First fixe g = 0 et n'utilise que h pour classer les nœuds, se précipitant toujours vers le nœud qui semble le plus proche du but. C'est très rapide dans des environnements ouverts, mais elle ignore le coût réel du chemin, donc elle peut être attirée à travers un terrain coûteux ou autour d'obstacles vers un itinéraire plus long. Dans le pire cas, elle trouve un chemin arbitrairement pire que l'optimal.
Quand utiliser la distance de Manhattan, euclidienne ou de Chebyshev ?
Utilisez la distance de Manhattan quand le mouvement est restreint à 4 directions (haut, bas, gauche, droite), car elle compte exactement le nombre minimum de pas. La distance euclidienne convient quand les déplacements diagonaux sont autorisés et que le coût diagonal vaut √2. La distance de Chebyshev (max de |Δx|, |Δy|) est le bon choix quand les 8 directions coûtent le même prix, comme c'est courant dans de nombreux jeux de stratégie.
Que sont les cellules pondérées et comment affectent-elles la recherche de chemin ?
Les cellules pondérées représentent un terrain plus difficile à traverser — boue, eau peu profonde ou route accidentée. Dans cette simulation, une cellule pondérée coûte 5 au lieu de 1 pour y entrer, donc A* contournera souvent plusieurs cellules pondérées plutôt que de les traverser. Dijkstra et A* gèrent tous deux correctement les poids ; Greedy Best-First ignore les coûts et peut traverser directement un terrain coûteux.
Quelle est la complexité temporelle de A* ?
Dans le pire cas, A* a une complexité temporelle et spatiale de O(b^d), où b est le facteur de branchement et d la profondeur de la solution optimale. Avec une heuristique cohérente (satisfaisant l'inégalité triangulaire), chaque nœud est étendu au plus une fois, donnant O(V log V) sur un graphe fini à V sommets — la même borne asymptotique que Dijkstra avec un tas binaire.
Comment la génération de labyrinthe affecte-t-elle la recherche ?
Le générateur de labyrinthe crée un labyrinthe parfait grâce à un algorithme aléatoire qui creuse des passages dans une grille, garantissant exactement un chemin entre deux cellules quelconques. Les labyrinthes sont particulièrement exigeants pour les algorithmes de recherche car les couloirs étroits éliminent l'avantage heuristique de A* — avec un seul chemin valide, tous les algorithmes doivent explorer à peu près les mêmes nœuds.
Que représentent les couleurs sur la grille ?
Le vert marque le nœud de départ, le rouge le but. Les cellules bleues forment la frontière actuelle (ensemble ouvert), le bleu foncé marque les nœuds visités (fermés), et le jaune met en évidence le nœud en cours d'extension. Les cellules pondérées apparaissent en brun. Une fois un chemin trouvé, il est tracé en vert citron du départ au but, et vous pouvez lire le coût exact dans le panneau de statistiques.
A* peut-il être utilisé en 3D ou sur des graphes non maillés ?
Oui — A* fonctionne sur tout graphe dont les coûts d'arêtes sont non négatifs et pour lequel vous pouvez fournir une heuristique admissible. Les applications réelles incluent la planification de mouvement de bras robotiques 3D (graphes d'espace de configuration), le routage réseau (latence comme coût), et l'analyse du langage naturel (treillis de type Viterbi). La grille ici n'est que la représentation la plus visuellement intuitive de l'algorithme général.
Quelle est l'importance du compteur « nœuds étendus » ?
Les nœuds étendus comptent combien de fois l'algorithme a retiré un nœud de la frontière et traité ses voisins — c'est la mesure principale de l'efficacité de A*. Un compte plus bas signifie que l'heuristique guide bien la recherche. Sur une grille 30×30 (900 cellules), une bonne heuristique peut souvent trouver le chemin optimal en étendant moins de 100 nœuds, alors que Dijkstra peut étendre chaque cellule accessible.
À propos de cette simulation
Ce simulateur visualise l'algorithme de recherche A* trouvant le plus court chemin à travers une grille pondérée. Chaque nœud de la frontière porte un score f(n) = g(n) + h(n), où g est la distance exacte parcourue depuis le départ et h est une estimation heuristique de la distance restante jusqu'au but ; l'algorithme étend toujours d'abord le nœud avec le f le plus bas. Basculer le menu déroulant d'algorithme sur Dijkstra annule h, tandis que Greedy Best-First supprime g entièrement, vous permettant d'observer le même labyrinthe résolu de trois façons différentes, nœud par nœud.
🔬 Ce que ça montre
La grille en couleurs suit la recherche en direct : les cellules bleues sont dans la frontière ouverte, les cellules bleu foncé ont été entièrement étendues (fermées), et le jaune marque le nœud en cours de traitement à cet instant. Une fois le but atteint, l'itinéraire gagnant est tracé en vert citron, et le panneau latéral indique combien de nœuds ont été étendus ainsi que le coût total du chemin.
🎮 Comment utiliser
Choisissez Algorithme et Heuristique dans les menus déroulants, puis utilisez les boutons d'outil Peindre pour ajouter des Murs, un terrain Pondéré (coût ×5), ou déplacez les marqueurs de départ/but sur le plateau. Autoriser les déplacements diagonaux bascule entre mouvement à 4 et 8 directions, Afficher les valeurs g/h/f superpose les scores bruts sur chaque cellule, et Exécution auto, Pas, Générer labyrinthe, Effacer murs et Réinitialiser contrôlent la lecture et la disposition du plateau.
💡 Le saviez-vous ?
A* a été publié en 1968 par Peter Hart, Nils Nilsson et Bertram Raphael, et malgré ses plus d'un demi-siècle d'existence, il reste le choix par défaut de recherche de chemin dans la plupart des jeux vidéo, des piles robotiques et des planificateurs d'itinéraires car il n'explore jamais plus de nœuds que nécessaire une fois muni d'une heuristique admissible.
Questions fréquentes
Que se passe-t-il quand je passe de la distance de Manhattan à euclidienne ou de Chebyshev ?
Chaque heuristique change la façon dont h(n) estime la distance au but, ce qui remodèle la frontière de recherche. La distance de Manhattan (pas horizontaux plus verticaux) est exacte pour un mouvement à 4 directions ; la distance euclidienne (hypoténuse en ligne droite) convient au mouvement diagonal ; la distance de Chebyshev (le plus grand des écarts horizontal et vertical) convient aux plateaux où les pas diagonaux coûtent le même prix que les orthogonaux. Choisir une heuristique qui sous-estime la distance réelle garde A* optimal mais peut étendre plus de nœuds ; la surestimer accélère la recherche mais peut produire un chemin plus long.
Pourquoi peindre une case Pondérée change-t-elle l'itinéraire au lieu de simplement le ralentir ?
Une case Pondérée coûte 5 pour y entrer plutôt que 1, elle augmente donc g(n) pour tout chemin qui la traverse. Comme A* et Dijkstra minimisent toujours le coût total, ils emprunteront volontiers un itinéraire plus long autour d'un groupe de cellules pondérées si cet itinéraire est globalement moins cher — Greedy Best-First, qui ignore complètement g, est le seul mode capable de traverser directement un terrain coûteux.
Que suit réellement le coloriage de la frontière en coulisses ?
Les cellules bleues sont dans l'ensemble ouvert — découvertes mais pas encore étendues — et sont stockées dans un tas binaire minimal indexé sur f, les égalités étant départagées par la valeur h la plus basse. Les cellules bleu foncé sont fermées, ce qui signifie que leurs voisins ont déjà été examinés et que leur gScore est final. Le jaune marque l'unique nœud retiré du tas à l'étape actuelle.
Pourquoi Générer labyrinthe rend-elle Greedy Best-First tellement moins performant ?
Le générateur de labyrinthe creuse un labyrinthe parfait avec exactement un itinéraire entre deux cellules quelconques via un algorithme de retour sur trace aléatoire, il n'y a donc aucun raccourci qu'une heuristique puisse exploiter. Greedy Best-First continue de se précipiter vers la cellule ouverte qui semble la plus proche du but en ligne droite, fonçant fréquemment dans des couloirs sans issue, tandis que A* et Dijkstra reculent méthodiquement et essaient la seule autre option.
Le coût des déplacements diagonaux est-il géré correctement ?
Oui — quand Autoriser les déplacements diagonaux est coché, les pas diagonaux coûtent √2 au lieu de 1, correspondant à leur véritable longueur euclidienne, et le simulateur bloque les déplacements diagonaux qui couperaient à travers le coin de deux murs adjacents. L'heuristique passe aussi à une formule de distance octile dans ce mode afin de rester admissible pour un mouvement à 8 directions.
Observez A* trouver le plus court chemin sur une grille en utilisant f = g + h. Peignez des murs, déplacez départ/but, changez d'heuristique, et comparez A* contre Dijkstra contre Greedy pour voir comment l'heuristique change les nœuds étendus.
3D · Three.js / WebGL renderer · 60 FPS target · runs fully client-side, no install