Académique Documents
Professionnel Documents
Culture Documents
Thème:
Réalisation d’algorithme A star (A*) dans les graphes
1
Table de matière
1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1 figure 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 figure 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . … 4
2 Définition A* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ….. 5
4 code python de l'algorithme A*. . . . . . . . . . . . . . . . . . . . . . . . . . .6
4.1 code de A* en python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.2 Résultat d’un graphe donné en python. . . . . . . . . . . . . . . 7
5 Les exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.1 exemple 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ….. 8
5.2 les tableaux de A* de l'exemple 1 . . . . . . . . . . . . . . . . . . . . .8
5.2 plus cours chemin de ex1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.3 exemple 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . 9
5.4 plus cours chemin de ex 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.5 exemple 3 . . . . . . . . . . . . . . . . . . . . . . …. . . . . . . . . . . . . . . .10
5.6 plus cours chemin de ex 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6 Complexité A* . . . . . . . . . . . . . . . . . . …… . . . . . . . . . . . . . .. . . . .11
7 Avantages et inconvénient de A* . . . . . . . . .. . . . . . . . . . . . . . .12
8 Conclusion . . . . . . . . . . . . . . . . . . . ………….. . . . . . . . . . . . . . . . . .12
Introduction
2
Les algorithmes de recherche occupent une place centrale dans le
domaine de l'informatique et de l'intelligence artificielle, étant à la base
de nombreuses applications requérant la découverte de solutions
optimales ou une navigation efficace à travers un espace de possibilités.
Leur importance s'étend à divers secteurs tels que la robotique, la
planification de trajets, les jeux, la reconnaissance de formes, et bien
d'autres .
3
Dans cet exemple on va voir une petite comparaison de la recherche du plus
court chemin dans une labyrinthe entre A* et Dijkstra :
Définition de A*
L'algorithme de recherche A* (qui se prononce A étoile, ou A star à l'anglaise)
est un algorithme de recherche de chemin dans un graphe entre un nœud initial
et un nœud final tous deux donnés. De par sa simplicité il est souvent présenté
comme exemple typique d'algorithme de planification, domaine de l'intelligence
artificielle.
4
2. Pour chaque nœud dans l'ensemble des nœuds explorés, on vérifie s’il
est un nœud final ou s’il est un nœud intermédiaire ayant une distance
plus courte du nœud final que de tout nœud précédent
3. Si l'ensemble des nœuds explorés n'est pas vide, le nœud avec la valeur
F la plus faible est sélectionné et ajouté à l'ensemble des nœuds
terminés
4. Si l'ensemble des nœuds explorés est vide, le nœud avec la valeur F la
plus grande est ajouté à l'ensemble des nœuds terminés
L'algorithme A* est connu pour sa complexité spatiale, car il stocke tous les
nœuds générés en mémoire. Cependant, il est largement utilisé dans diverses
applications en raison de son efficacité et de son approche systématique pour
trouver des solutions de chemin.
Historique
En 1968, le chercheur en intelligence artificielle Nils Nilsson essayait
d'améliorer la planification de Shakey le robot, un robot prototype qui se
déplace dans une pièce avec des obstacles. L'algorithme pour trouver un
chemin, que Nilsson appelait A1, était une version plus rapide que la méthode
la plus connue à l'époque, l'algorithme de Dijkstra, pour trouver des plus
courts chemins dans un graphe. Bertram Raphael a suggéré des
améliorations, donnant lieu à la version révisée A2. Puis, Peter E. Hart a
apporté des améliorations mineures à A2. Hart, Nilsson et Raphael ont alors
montré que A2 est optimal pour trouver des plus courts chemins sous
certaines conditions.
5
Code python de l’algorithme A* :
Ce code Python utilise la bibliothèque NetworkX pour créer, visualiser, et
résoudre un graphe pondéré non orienté. L'utilisateur est invité à entrer le
nombre de nœuds, les noms et coûts associés à chaque nœud, ainsi que les
relations entre les nœuds avec leurs poids. L'algorithme A* est ensuite
appliqué pour trouver le chemin optimal entre un nœud de départ et un
nœud d'arrivée. La visualisation du graphe est réalisée avec l'aide de la
bibliothèque Matplotlib, mettant en évidence le chemin trouvé en rouge.
L'utilisateur peut également quitter la saisie des relations en entrant 'exit'.
6
Figure 4 : Résultat d’un graphe donné en python
7
Les exemples
Figure 6 : exemple 1
FERMÉ : {A (11), B (8)} OUVERT : E (10), C (102), G (11) FERMÉ : {A (11), B (8), E (10)} OUVERT : C (102), G (11), D (10)
FERMÉ : {A (11), B (8), E (10), D (10)} OUVERT : C (102), G (11) FERMÉ : {A (11), B (8), E (10), D (10)} OUVERT : C (102), G (10)
8
Figure 6.1 : plus cours chemin de A vers G (ex 1)
Figure 7 : exemple 2
9
Figure 7.1 : plus court chemin de A vers J (ex2)
Figure 8 : exemple 3
10
Figure 8.1 : plus court chemin de A vers E (ex3)
La complexité de A *
L'algorithme A* est réputé pour sa complexité spatiale en raison de la
nécessité de stocker en mémoire tous les nœuds générés. Malgré cela, il
demeure largement adopté dans diverses applications en raison de son
efficacité et de son approche méthodique pour résoudre des problèmes de
chemin. La complexité de l'algorithme A* est intrinsèquement liée à la qualité
de l'heuristique employée et à la structure de données utilisée pour la
conservation des nœuds explorés. En règle générale, la complexité
temporelle de l'algorithme A* est de l'ordre de O(b^d), où b représente le
facteur de branchement et d la profondeur de la solution optimale. Toutefois,
l'utilisation d'une heuristique admissible permet de réduire cette complexité
à O(d log b), conférant ainsi à l'algorithme A* une efficacité remarquable dans
le domaine de la recherche de chemin.
11
Avantages et inconvénients de l’algorithme A*
L'algorithme A* (A étoile) présente plusieurs avantages et inconvénients :
Avantages :
Inconvénients :
Conclusion
En conclusion, l'algorithme A* se distingue comme une méthode de
recherche heuristique optimale, offrant des avantages significatifs dans la
résolution de problèmes complexes. Sa capacité à garantir la découverte du
chemin le plus court, en utilisant une heuristique admissible, en fait un choix
privilégié pour de nombreuses applications de recherche de chemin. Sa
complétude et son efficacité dans la priorisation des chemins les plus courts
en font un outil robuste pour résoudre divers problèmes. Cependant, il est
important de noter que la performance de l'algorithme dépend de la qualité
12
de l'heuristique utilisée et qu'il peut nécessiter une utilisation significative de
la mémoire. Malgré ses inconvénients, l'algorithme A* demeure une solution
puissante et polyvalente pour des problèmes de recherche et d'optimisation,
illustrant son importance dans le domaine de l'informatique et de
l'intelligence artificielle.
13
Les références
1. https://www.wikipedia.org/
2. https://www.simplilearn.com/tutorials/artificial-
intelligence-tutorial/a-star-algorithm
3. https://datascientest.com/lalgorithme-a-a-star-
algorithm
4. https://graphonline.ru/fr/
5. https://fr.scribd.com/presentation/602860324/algorit
hme-Aetoile
14