Mais comment font il ? part II : the pathfinding !

Le pathfinding c’est quoi t’est-ce donc t’il ?

Le “pathfinding”, ou “recherche de chemin”, en bon françois, décrit une série d’algorithmes permettant à un object O de se déplacer d’un point P à un point P’ dans un environnement E, c’est, en gros, l’algorithme A qui permet à un tank mammouth M de se déplacer de sa position courante PC vers les petits machins verts qui courent en rigolant PMVQCER dans la direction D de votre base B. (ndc1 : ouf)

Mais attention, il ne faut pas le confondre avec l’algo qui se charge de la prise de décision, ce qui est un tout autre problème ! le pathfinding n’est utilisé qu’à partir du moment où (ndc2: DTC proof ) l’on sait où l’on est et où l’on va, il se contrebat du pourquoi, du comment et de la réponse ultime (42, soit dit en passant) (ndc : mon dieu, ils sont partout)(nda : oui)

Le nombre d’algo potentiels pour résoudre ce genre de problèmes est énorme, de plus la complexité du problème lui même en fait un sujet d’études très couru des chercheurs en blouse blanche et en IA, (pour les forts en math : c’est de la théorie des graphs bourrue, et c’est un problème n§ complexe… super… ).

Histoire de ne pas partir dans le grand vide, je vais tout baser sur l’idée d’un jeu se passant sur un landscape, comme ça, ça sera plus simple, j’expliquerai aussi plus tard comment on pourrait adapter la chose sur un fps, ou même sur “Barbie Chaval” (ndc2:A cheval non ?)(nda:non) (y en a qu’aiment… en tout cas ça vend… ).

Comme base on utilisera la map suivante :

Le vert c’est la position de départ, en bleu la destination, et en noir les obstacles.

On va jeter un bref coup d’oeil a 3 solutions : la 1, la 2 et la 3. La 1 étant à la limite de l’idiotie, et la 3 a la limite du génie… il est bien évident qu’il existe bien d’autre solutions et variations sur le theme.(ndc2 : VARIANTES non ? )(ndr : oui aussi)

Solution 1, dite «Le bourrin ».

Solution réellement applique dans le mémorable “Trucks” édité par Microfolies en 199queque chose. (enfin en tout cas moi je me le rappel, et je pense que TBF doit s’en souvenir (parce que TBF se souvient de tout)).

Le principe est simple, voir simpliste, il s’agit de se dire que si le joueur ne regarde pas dans sa direction, tout ce qu’une unité a à faire, c’est se déplacer directement vers la destination, en prenant bien soin d’ignorer les obstacles, et si jamais le joueur la surprend, elle prend un air dégagé et attaque le joueur… celui ci n’ayant que le temps de se dire “mais comment il e…”. (ndc2 : Le fameux “mais qu’est-ce que…” dans Splinter Cell )
C’est tricher, mais ça marche plutôt pas mal :

Solution 2, dite “Je suis plus con que j’en ai l’air”.

La solution 2 repose sur du hasard, l’unité va toujours tenter de se déplacer vers sa destination, si elle ne peut pas, elle va alors choisir une autre direction possible, mais au hasard.
Des fois ça marche, des fois ça marche pas, c’est le problème avec le hasard… il peut (souvent) arriver que la direction tirée au hasard éloigne l’unité, ou lui fait prendre un détour.
Quand ça marche bien, ça peut donner ceci :

sinon, ça donne plus souvent cela :

Solution 3, dite “A la cosaque”
(aussi appelée, chez les chercheurs en IA et en blouses blanches “A*” ou “AStar” (comme dans A->A *->Star))

Là ça devient un poil plus musclé…

Le principe de base est de se dire que pour chaque case, on peut calculer un score, et que plus ce score est bas, plus la case a la de chance d’être sur le meilleur chemin.
Toute la difficulté vient de la façon de calculer ce fameux score (par ex. : un bien fameux score 6-3 3-6 6-0 6-0 ).
Pour calculer ce score, on va utiliser deux choses : un coût et un heuristique.
Dans des versions simples le coût n’est que le nombre de cases parcourues depuis la case de départ. Pour corser les choses, on peut ajouter d’autres trucs dans ce coût, comme le type de terrain (genre béton = +0, herbe = +1, boue = +10, v’voyez l’esprit quoi).
L’heuristique, c’est une règle bidon (c’est à dire qui marche mais sans véritable raison) qu’on fixe et qui permet de juger de l’importance d’une position par rapport au chemin à rechercher. La plupart des algos d’A* utilisent soit la distance entre la case courante et la destination :
Racine carré de ((PC.x-PO.x)^2 + (PC.y-PO.y)^2),
soit, plus rapide à calculer, le manhattan, qui est une approximation grosso modo valable (bidon je vous avais dit…  qui se calcule :
(PC.x-PO.x) + (PC.y-PO.y)
Une fois qu’on a définit ces deux valeurs, on parcours la carte en partant du point de départ, on calcule le score de toutes les destinations possibles, puis on recommence sur toutes les destinations, en commencant par celles qui ont le plus petit score…

Vous avez compris ?

Non ?

Moi non plus….

Donc j’ai fait des petits dessins.

étape 1

Coût :

Heuristique :

Score total :

Déplacement possible à partir de la position de départ :

Conclusion de l’opération : nos deux nouvelles cases potentielles ont toutes les deux un score de 6… donc on va tester ces deux là…

en route pour l’étape 2 :

étape 2

Coût :

Heuristique :

Score total :

Déplacement possible à partir de la position de départ :

Là encore, toutes les nouvelles cases ont le même score 6 toujours, donc on persiste.

Et zou : étapes 3

étape 3

Coût :

Heuristique :

Score total :

Déplacement possible à partir de la position de départ :

Et là, affolant, un truc se passe : une case a un score de 5 alors que les deux autres plafonnent à 6… c’est sans doute dans cette direction qu’il faut aller…

Let’s rock’n step 4

étape 4

Coût :

Heuristique :

Score total :

Déplacement possible à partir de la position de départ :

et là encore le miracle se produit ! une case ressort de la masse avec un score inférieur aux autres !
Allons voir a l’étapes 5, si, enfin cette recherche pourrait arriver à quelque chose (parce que là les chtits dessins : J’EN PEUX PLUS).

étape 5

Coût :

Heuristique :

Score total :

Déplacement possible à partir de la position de départ :

Glory glory allelyuah ! on a trouvé la destination ! et ça c’est bien.

Maintenant tout ce qu’il reste à faire : c’est de remonter le chemin depuis la case de destination, jusqu’à la case de départ, chose facilité par le fait qu’on a toujours fait super gaffe à partir d’une position vers plusieurs, mais jamais le contraire (super clair, hein ?), en bref : quand on est sur une case on ne peut revenir en arrière que vers une et une seule case.

Et hop la solution est là :

voilà, l’A* a une fois de plus prouvé sa force !

Enfin presque, le problème principal de l’A* (et de la plupart des algos de pathfinding, d’ailleurs) c’est que le coût CPU n’est pas constant, certains chemins vont être super rapide à calculer, d’autres plus lents, et il faut aussi prendre en compte que les obstacles bougent dans la Vrai Vie (vous avez déjà vu un tank attendre au feu rouge, vous ?) (ndc1 : oui, à GTA VC)(nda : genre je l’attendais pas, celle la) obligeant parfois à recalculer le chemin en cours depuis le début !

Et après, il y a plein de détails d’implémentation et d’optimisation, que vous pouvez faire varier pour adapter l’algo à votre jeu.

Super, et comment j’adapte tes putains de cases à un beau FPS (ou à Barbie Chaval (ndc2 : QUOI ???)(nda : Pffff…))…

Bah c’est très bête : finalement, quand on la regarde de près, la map de case, on pourrait dire que c’est un réseau de cellules interconnectées comme ça :

et qu’est-ce qui nous oblige à les organiser comme ça, les cellules du réseau ?
bah rien…
et c’est obligé d’être que des angles fixes comme ça ?
bah non plus…
donc on pourrait déformer le graphe, pour suivre les contours de Q3-DM3 ?
bah ouais, et le plus grave dans tout ça ? hey bah c’est que ça marche ! (ndc1 : encore heureux putain)(nda : ça fait plaisir : y en au moins 1 que ça interesse… )

Quand un Level-Designer prépare un niveau, en plus des portes, armes, pickup et autres boutons divers et variés, il va aussi (souvent aidé par des outils qui vont ““découvrir”” le décors automatiquement) poser son réseau de path finding, comme ça les bots auront l’air moins cons !!

Et voilà !!!

(bon j’avoue j’ai pas fait l’éclairage, mais ça m’a pris plus longtemps que prévu, cette petite chose….)

Le bon lien qui va bien pour l’ia : www.gameia.com

Le bon lien qui va bien pour le devellopement de jeux en general : www.gamasutra.com

Et merci à tous les gens qui ont écrits des articles sur le pathfinding que j’ai pu piller comme un sale !

Et merci à tous les 3 gens qui ont corrigé : messieurs Lije, End[ER], et Moktar (nda : on peut dire “contrebat” comme dans “je m’en bat…”).

Et merci a End[ER] pour l’hebergement (sans accents).

Et le lien de Barbie Chaval, car, aparement, les gens ne connaissent pas : Barbie Chaval

Et enfin, tout de même, merci a moi même, parce que bon la, quand même, j’assure…

[EDIT]
c’t’imbecile d’editeur il prend tout les . ) et les transform en .) …
[EDIT]
micro correction pour faire plaisir a End[ER]

Ce message a été édité par c0unt0 le 04/07/2003
Ce message a été édité par c0unt0 le 04/07/2003

Bon je proteste en tant que “ndc1” : Y A DES FAUTES !! que j’avais corrigées Et de la censure au niveau de 42

Bon vous me lisez, donc vous avez bien compris l’explication de c0unt0 ? Allez hop INTERROGATION ECRITE niââr niââr niââr

Ce message a été édité par End[ER] le 04/07/2003

Pour info, le manhattan s’appelle comme cela car on compte en fait les distances par bloc (d’immeubles donc, comme à N-Y /wink.gif’ >)
Ce message a été édité par xentyr le 04/07/2003

Clair, net, précis et sans bavures.

Merci les gars, très bon boulot.

Ouah excellent Marrant ça me rappelle l’esprit d’un journal que je lis souvent!

Merci beaucoup c0unt0, c’est de l’excellent boulot !!!

Hop, je le relis !

Moktar =>  <= C0unt0

D’ailleurs si vous revoulez de la théorie des graphes, voici un autre thread qui devrait vous combler

Rhaaa Gloppy a enlevé ses images. Ça n’en est que plus fun ! Comment ça, non ? OK
Ce message a été édité par xentyr le 04/07/2003

!!!

Merci C0unt0 c’était super interressant !!!

Haha, excellent! j’avais bien apprecié l’article de joy ( quand même bien expliqué ), et là c’est encore plus clair.

En plus je me suis vraiment bien marré ( haha le tank au feu rouge
Ce message a été édité par Zekiller le 04/07/2003

Je savais pas qu’on pouvait mettre des comments…
La prochaine fois, F34R les NDlije

En tout cas, on voit tout de suite le boulot fourni et les efforts pour mettre tout ça à la portée du commun des mortels. La preuve, j’ai tout compris… Sauf les equations, mais pour moi c’est normal.

Bon allez, je range la brosse et le cirage…

merci bcp C0unt0.
J’ai vu la recherche exaustive de chemin que j’ai
vu cette année (ce qui est super lent) et c’est cool de voir la méthode
qu’on utilise courrament ^^.

Bon je relis une fois et je vais essayer de reflechir a comment ca s’implémente.

Edit : j’avai mis Cr0n0 a la place de C0unt0 ^^; merci Xentyr

Ce message a été édité par Staz le 04/07/2003

[quote]merci bcp Cr0n0.[/quote]C’est qui Cr0n0 ? Sûrement un homme de l’ombre de c0unt0

Sinon, effectivement, l’algorithme de Dijkstra (par exemple) est bien plus lent.

Ce message a été édité par xentyr le 04/07/2003

Sinon, la petite question perso qui me démange.
C0unt0, ton pseudo, ça a à voir avec Gibbsons et/ou avec le groupe de demomaker anglais Electronic images, membre d’Inner circle ?
Ceux qui viennent de l’Atari devraient se souvenir.

[quote]Sinon, effectivement, l’algorithme de Dijkstra (par exemple) est bien plus lent.[/quote]Par exhaustif je pensait juste a un bete backtracking ^^;

Edit : http://gaia.ecs.csus.edu/~wang/backtrack/m…etraversal.html
Ce message a été édité par Staz le 04/07/2003

Merci d’avoir pris le temps d’écrire cet article, c’est vraiment trop bien expliqué :wink: Un autre !

Trop bien ! moi qui voulais quelque base sur le pathfinding et sur l’IA, j’ai déjà de quoi faire.

PS: mais! mais! c’est trop bien Barbie chaval !! 

Excellent !

Je n’ai malheuresement juste eu le temps que de survoler cette article, mais ni une, ni deux, le voila dans mes bookmark, bien au chaud

Vraimment du beau boulot

super ! vraiment

le plus fort, c’est que j’ai mieux compris A* la que quand mon prof d’algo nous l’avais enseigné

si tu cherches un job de prof, a mon avis, ya moyen

Passionant !

Très clair et bien expliqué, c’est vraiment un bon papier que tu nous a pondu là Counto

J’en redemande