• Aucun résultat trouvé

4.3 L’algorithme A*

4.3.3 Plus sur A*

• La version présentée page150n’est pas la version originale d’A*. Dans sa version originale, l’instruction2ddevrait être :

(d) Pour tout voisinvdeu :

L’effet est que des voisins déjà dans P peuvent être re-visités, modifiant poten-tiellement leurs coûts et leurs scores. En les remettant dans Q on peut espérer trouver un chemin plus court au prix d’un temps d’exploration plus long. Cela complexifie l’analyse18, mais surtout cela n’est pas nécessaire si l’heuristique h est monotone. On a vu que dans ce cas que la version d’A*du cours calcule le che-min le plus court possible, donc sans mettre à jour les sommets avoir à remettre en cause les sommets de P. Ainsi, l’algorithme A*présenté dans le cours est une version simplifiée et optimisée pour le cas des heuristiques monotones. La version originale d’A*est donc intéressante que lorsque hn’est pas monotone. En fait on peut montrer que la version originale calcule un plus court chemin dès queh sous-estime la distance, une propriété plus faible que la monotonie.[Exercice. Trouvez un exemple où l’algorithme du cours échoue à trouver un plus court chemin alors quehsous-estime la distance.]

• On peut parfois accélérer le traitement, dans le cas des graphes symétriques, en lançant deux exécutions d’A* en parallèle : une de st et une de ts. Il y a alors deux arbres qui croissent : Ps de racine s pour la recherche st, et Pt de racinetpour la recherchets. Cela forme un ensembleP =PsPtformé de deux composantes connexes. En pratique, pour gérer les sommets deP, on rajoute une marque, plaçant un sommet dans trois états possibles : il est soit dansPs, soit dans Pt, soit ni dans Ps ni dans Pt (c’est-à-dire pas dansP). Un seul ensemble Q suffit pour gérer le voisinage deP. Le score d’un sommet est calculé vis-à-vis de l’arbre où l’on souhaite le raccrocher : c’est son coût dans cet arbre plus l’heuristique

18. Notamment cela rend délicat l’analyse de la taille du tas avec une gestion paresseuse de la mise à jour du score.

158 CHAPITRE 4. NAVIGATION pour aller vers la racine de l’autre arbre. En extrayant le sommet de score mini-mum, il se rattache ainsi arbitrairement à l’un ou l’autre des arbres, simulant une exécution parallèle. Le chemin est construit dès que les deux arbres se touchent.

Voir la figure 4.19. En terme de sommets visités, le gain n’est pas systématique.

[Exercice*. Est-ce que le chemin découvert par un tel double parcours est toujours

Figure 4.19 – Double parcours d’A*, de st et de ts, s étant situé en bas à droite. Avec l’heuristique vol d’oiseau, le double parcours (à gauche) visite 18 545 sommets contre 27 508 pour le simple parcours (à droite) pour trouver un plus court chemin. La seconde moitié du chemin (celle incluse dans la partie rougeâtre), bien que de même longueur, diffère.

un plus court chemin ? (en supposant un graphe symétrique et queh(x, t) eth(x, s) sont monotones).][Exercice. Supposons que le graphe (G, ω) est tel qu’il existe une fonction positivef telle que pour tous voisinsu, v,ω(u, v) =f(v) etω(v, u) =f(u).

Démontrez que distG(s, t) +f(s) = distG(t, s) +f(t) ?]

• On peut implémenter le parcours en profondeur (ouDFSpourDepth-First Search) à l’aide deA*. Pour cela, le coût des arêtes du graphe est fixé à 1. Puis, on remplace le termeh(v, t) dans l’instruction 2(d)ivpar un compteur (initialisée à 2m au dé-part) qui est décrémenté à chaque utilisation, si bien que c’est le premier sommet découvert qui est prioritaire. Cela revient aussi à dire que l’heuristiquehdécroît avec le temps d’exécution de l’algorithme. On obtient de meilleures performances en programmant directement un parcoursDFS.

• L’algorithmeA*peut également être utilisé pour calculer uneα-approximation du plus court chemin entres ett (cf. la définition3.1 au chapitre3). Si l’heuristique hest telle queh(x, t)/α est monotone pour une certaine constante α >1, alors A*

trouve un chemin entres et t (s’il existe) de coût au plus α·distG(s, t). Pour s’en convaincre, il suffit de réécrire, dans la preuve de la proposition 4.5, les inéqua-tions page155comparant score[u0] à score[u], en utilisant l’hypothèse queuest le

4.3. L’ALGORITHME A* 159 premier sommet tel que co ˆut[u]> α·dist(s, u) et qu’ainsi19co ˆut[u0]6α·dist(s, u0), la monotonie deh/αimpliquant queh(u0, t)6α·co ˆut(C[u0, u]) +h(u, t).

Donc ici α > 1 est le facteur d’approximation sur la distance. L’espoir est que, grâce à une heuristique plus élevée,A*privilégie plus encore les sommets proches de la cible et visite ainsi moins de sommets. C’est très efficace s’il y a peu d’obs-tacles entresett. Voir la figure4.20.

14

Figure 4.20 – Performances d’A* pour l’heuristique h(x, t) = α·δ(x, t) avec différentes valeurs entières d’α, où δ(x, t) est la distance vol d’oiseau pour les grilles avec un 8-voisinage. Seule une partie de la grille est représentée.

Deux chemins sont trouvés : celui de coût 11 (rouge) ou de coût 14 (cert).

On constate que dans le meilleur des cas (α = 2) l’algorithme est capable de trouver le plus court chemin en visitant seulement 80 sommets, 6 fois moins qu’avecDijkstra(α= 0). Il est aussi capable de trouver un chemin plus long de seulement 3/11≈28% en ne visitant que 54 sommets, 9 fois moins qu’avec Dijkstra! Avec une double exécution (s →t et ts) et avec α = 4, on peut trouver le plus court chemin (de coût 11) en visitant 67 sommets.

L’augmentation d’αmène aux mêmes statistiques que l’exécution simplestà partir d’α = 5.

• L’algorithmeA*n’est pas seulement utilisé pour le déplacement debotset les jeux vidéos. Il sert d’heuristique pour l’exploration d’un espace de solutions. Le graphe représente ici des possibilités ou des choix, et il s’agit de trouver une cible dans cet espace (cf. [DRS07]). Un exemple est de savoir si un système peut atteindre un état cible donné à partir d’un état de départ donné, et de trouver un tel chemin. Donc ici le graphe n’est pas forcément entièrement donné dès le départ. Il est construit au fur et à mesure de l’exploration, les voisins d’un sommet u n’étant construits que siuest exploré. Bien sûr, la difficulté est dans la conception de l’heuristiqueh.

19. Il vaut se servir du fait que le prédécesseurv0 de usur C vérifiev0 P et donc que co ˆut[v0]6 α·dist(s, v0). Ensuite, à cause de la mise à jour des coûts, on en déduit que co ˆut[u0]6co ˆut[v0] +ω(v0, u)6 α·dist(s, v0) + dist(v0, u0)6α·dist(s, u0) carv0u0appartient à un plus court chemin et queα= 1.

160 CHAPITRE 4. NAVIGATION

4.4 Morale

• Les navigation meshes sont des graphes issus de maillage de terrains 2D ou 3D pour simplifier les déplacements possibles des personnages artificiels (et autres bots) animés par des IA qui sont infine pilotée par des algorithmes exécutés par une machine. La requête principale est celle de recherche du meilleur chemin ou d’un chemin court entre deux points dunavigation mesh.

• Les notions de « chemin court » ou de « meilleur chemin » sont relatives à la valua-tiondes arêtes du graphe, ou plus généralement des arcs si le graphe est orienté.

On parle plutôt de « longueur » dans le cas de graphe géométrique (lié à une dis-tance entre les extrémités de l’arête), de « poids » si la valeur est positive ou nulle, ou de « coût » pour une valeur générale (positive ou négative donc). Pour les algo-rithmesDijkstraouA*, le terme approprié est celui de poids.

• On peut faire mieux que Dijkstra en pratique en tenant compte de la cible, car les choix qu’il prend sont indépendants de la destination. Au contraire,A*profite d’informations sur la destination encodée par une heuristique qui peut être plus ou moins précise. C’est évidemment général : toute information supplémentaire peut être exploitée par l’algorithme pour être plus performant.

• Il faut distinguer le problème que résout un algorithme, et l’implémentation de l’algorithme. Il y a plusieurs implémentations possibles de Dijkstra, pas toutes équivalentes en termes de complexité. L’implémentation de Dijkstra présentée dans le cours, à l’aide d’un tas binaire, a une complexité deO(mlogn), et la com-plexité la plus faible possible atteintΘ(m+nlogn). Cette borne est suffisante grâce aux tas de Fibonacci, et elle est nécessaire à cause du parcours des sommets par ordre croissant de distance depuis la source. Cependant, ce n’est pas la meilleure complexité pour le problème ! Il existe un algorithme enO(m+n) qui calcule les distances d’une source vers tous les autres, et c’est la meilleure possible.

• La ressource critique pour les algorithmes de recherche de chemin, comme beau-coup d’autres en fait, est la mémoire utilisée, ce qui correspond au nombre de sommets visités. Pour chaque heuristique fixée,A* est l’algorithme de recherche de chemin qui visite le moins de sommets possibles.

• On peut se servir deA*pour approximer la distance avec une garantie sur le fac-teur d’approximation avec un choix judicieux de l’heuristiqueh.

• L’algorithmeA*ne sert pas qu’à gérer le déplacement debots. Il peut servir aussi à trouver des solutions dans un espace des « possibles », espace décrit implicite-ment par une fonction d’adjacence plutôt qu’expliciteimplicite-ment par un graphe avec son ensemble de sommets et d’arêtes. Il est souvent utilisé comme brique de base en Intelligence Artificielle pour la résolution de problèmes d’optimisation, tout comme la méthode de descente en gradient (cf. figure3.17).

Comme exemple de problème on peut citer le problème du Rubik’s Cube (même si dans ce cas précisA*n’est pas forcément le plus adapté). Il s’agit à partir d’une

BIBLIOGRAPHIE 161 configuration arbitraire de trouver un chemin « court » permettant d’atteindre la configuration gagnante où chacune des faces est monochromatique. Ici les som-mets sont les configurations et le voisinage défini par les configurations accessibles par une rotation des faces du cube (il y en a 12). Il n’est pas envisageable d’explo-rer, et encore moins de construire, le graphe desn= 8!×37×12!×210≈43×1018 configurations (voir Wikipédia pour le détail du calcul). Même en explorant un milliard (109) de configurations par secondes il faudrait au moins 43 milliards de secondes pour parcourir seulement les sommets (pour les arêtes c’est 12 fois plus...), soit plus de 43×30 = 1 290 années de calculs.

Pour la petite histoire, ce n’est qu’enqu’il a été possible de calculer, grâce à des super-calculateurs et des programmes très optimisés, le diamètre du graphe duRubik’s Cube, soit la plus grande distance possible entre une source et une des-tination. Il est de 26. Le diamètre est de 20 dans la variante du graphe où les demi-tours sont possibles (et pas seulement des quarts de tour comme pour 26).

Voir la figure4.21.

Figure4.21 – L’unique configuration connue pour être à distance 26 de l’ori-gine. Elle peut être obtenue grâce aux 26 mouvements suivants :U U F U U R- L F F U F- B- R L U U R U D- R L- D R- L- D D. Ces lettres codent les faces de-vant être tournées d’un quart dans le sens des aiguilles d’une montre (dans le sens contraire si suivies d’un « - »). En fixant le centre vert, les faces op-posées sont respectivement Front & Back, Left & Right et Up & Down. Voir http://cube20.org/qtmpour plus de détails.

Bibliographie

[BDPED19] A. Boussard, J. Delescluse, A. Pérez-Escudero, and A. Dussutour, Me-mory inception and preservation in slime moulds : the quest for a common mechanism, Philisophical Transactions of The Royal Society B, 374 (2019).

doi:10.1098/rstb.2018.0368.

162 BIBLIOGRAPHIE [Dij59] E. W. Dijkstra,A note on two problems in connexion with graphs, Numerische

Mathematik, 1 (1959), pp. 269–271. doi:10.1007/BF01386390.

[DP85] R. Dechter and J. Pearl, Generalized best-first search strategies and the optimality of A*, Journal of the ACM, 32 (1985), pp. 505–536. doi : 10.1145/3828.3830.

[DRS07] H. Dinh, A. Russell, and Y. Su,On the value of good advice : the complexity of A* search with accurate heuristics, in 22nd National Conference on Arti-ficial Intelligence (AAAI), vol. 2, AAAI Press, July 2007, pp. 1140–1145.

https://www.aaai.org/Papers/AAAI/2007/AAAI07-181.pdf.

[NYT00] T. Nakagaki, H. Yamada, and Á. Tóth,Maze-solving by an amoeboid orga-nism, Nature, 407 (2000), p. 470. doi:10.1038/35035159.

[SBLT12] G. Stølting Bordal, G. Lagogiannis, and R. E. Tarjan, Strict Fibonacci heaps, in 44th Annual ACM Symposium on Theory of Computing (STOC), ACM Press, May 2012, pp. 1177–1184. doi:10.1145/2213977.2214082.

[Tho99] M. Thorup, Undirected single-source shortest paths with positive integer weights in linear time, Journal of the ACM, 46 (1999), pp. 362–394. doi : 10.1145/316542.316548.

[Tho07] M. Thorup, Equivalence between priority queues and sorting, Journal of the ACM, 54 (2007), pp. Article No. 28, pp. 1–27. doi : 10.1145/1314690.1314692.

CHAPITRE

5 Diviser pour régner

Sommaire