# A* ## Introduction - A* est un algorithme de recherche de chemin optimal. - Il combine coût réel et heuristique pour guider l'exploration. ## Composants Clés - g(n): Coût du chemin depuis le départ jusqu'au noeud n. - h(n): Estimation du coût restant pour atteindre la destination. - f(n): Somme g(n) + h(n) donnant le coût total estimé. ## Fonctionnement 1. Initialiser la liste ouverte avec le point de départ. 2. Sélectionner le noeud n avec le plus petit f(n) dans la liste ouverte. 3. Si n est la destination, arrêter et reconstruire le chemin. 4. Sinon, déplacer n vers la liste fermée. 5. Pour chaque voisin v de n : - Si v est déjà exploré, ignorer. - Calculer tentative_g = g(n) + coût(n, v). - Si v n'est pas dans la liste ouverte ou si tentative_g est inférieur à g(v) : - Mettre à jour g(v), h(v) et f(v). - Définir n comme parent de v. - Ajouter v dans la liste ouverte si nécessaire. 6. Répéter jusqu'à atteindre la destination ou épuiser les possibilités. ## Pseudo-code ``` Initialiser open_list avec le point de départ Tant que open_list n'est pas vide : n = noeud avec le plus petit f(n) dans open_list Si n est la destination : Retourner le chemin construit Déplacer n de open_list à closed_list Pour chaque voisin v de n : Si v est dans closed_list, ignorer tentative_g = g(n) + coût(n, v) Si v n'est pas dans open_list ou tentative_g < g(v) : g(v) = tentative_g h(v) = estimée(v, destination) f(v) = g(v) + h(v) Parent(v) = n Si v n'est pas dans open_list, l'ajouter ```