web-dev-qa-db-fra.com

Comment implémenter un algorithme A * pathfinding, avec des coûts de déplacement pour chaque langage de programmation?

Pouvons-nous amener les gens à poster un code d'implémentation simple et optimisée de l'algorithme A * pathfinding, dans chaque langue?

C’est surtout pour le plaisir et pour jouer avec ce que stackoverflow est capable de faire ... même si je suis réellement intéressé par une version ActionScript 3 de cette application.

Mais l'idée est que cette "Question" continuera à être mise à jour éternellement dans le futur, même si différents langages de programmation sont créés!

Je ne connais aucun autre endroit en ligne où vous pouvez voir le pseudocode "traduit" dans de nombreuses langues (encore moins dans des langues différentes). On dirait que c'est une ressource utile, et bien que ce site n'ait pas nécessairement été conçu, il n'y a pas de mal à l'essayer et à voir si cela s'avère utile, pour lequel stackoverflow pourrait être utilisé!

29
IQpierce

Voici une implémentation de JavaScript , avec du code source et une démo en ligne que j’ai réalisée en tant que passe-temps/projet de recherche. 

C’est très simple, mais vous pouvez changer certains paramètres (taille de la grille, nombre de murs, informations de débogage activées/désactivées). Il vous montrera les valeurs f (x), g (x) et h(x) calculées pour chaque nœud inspecté.

L'implémentation de la page de démonstration utilise jQuery.

11
Brian Grinstead

Voici une implémentation C++. Il est à présent assez bien testé et utilisé dans les jeux vidéo commerciaux et divers projets d'intelligence artificielle.

http://code.google.com/p/a-star-al- algorithme-implementation/

Et il y a un tutoriel, que j'ai écrit en premier:

http://www.heyes-jones.com/astar.html

9
justinhj

Voici une implémentation de C # réalisée par l’une des personnes qui construisent le langage.

5
Joel Coehoorn

Codes sources et démos dans différents langages de programmation:

Liste des démos pour chaque langue:

C++: 1
Java: 3
Processing: 1
Actionscript 3 (Flash): 4
Flex (Flash): 1
Javascript: 6
C#: 1
Ruby: 1
Prolog: 1
Unity: 1
Lua: 1

Démo Pathfinding en différentes langues

Prendre plaisir :)

3
Sir

Code source Python et C++ avec tutoriel interactif . Le code est écrit pour travailler sur les graphiques en général et n'est pas spécifique aux grilles (comme vous le trouverez dans de nombreux exemples de A * sur le Web). Il utilise des tas binaires pour la file d'attente prioritaire (Python et C++ ont tous deux des tas binaires dans leurs bibliothèques standard). J'ai la largeur Recherche en premier, l'algorithme de Dijkstra et A * sur cette page. Le code est raisonnablement court (plus court que la plupart des exemples de code que je trouve).

1
amitp

Un exemple AS 3 ... http://www.dauntless.be/astar/

1
Chris

Ce n’est pas une implémentation, mais j’ai trouvé http://theory.stanford.edu/~amitp/GameProgramming/AStarComparison.html une explication particulièrement claire de l’algorithme. Possède un pseudo-code qui le rend très facile à implémenter, avec un examen approfondi de diverses structures de données pouvant être utilisées pour implémenter les ensembles ouverts et fermés, une discussion de différentes heuristiques applicables dans différentes situations, des modifications d’heuristiques pour obtenir des comportements spécifiques (par exemple, obtenir des approximations de lignes droites dans des systèmes ne prenant en charge que des angles de mouvement limités), des pièges courants (par exemple, utiliser une méthode heuristique avec une échelle différente des coûts de déplacement réels) et certaines optimisations (par exemple, travailler avec des régions à coût uniforme la grille).

1
Jules

A Clojure implementation, fortement basé sur un exemple donné dans PAIP .

1
Jeff Foster

Une implémentation VB6.

http://www.gandraxa.com/pathfinding_with_a_star.xml

Ceci est particulièrement utile car vous pouvez parcourir le processus et bien comprendre le fonctionnement de l'algorithme. Cela peut être très utile lors de la conversion de l'algorithme dans une autre langue.

0
G Mastros

J'ai implémenté A * in C comme moyen d'apprendre le C, je ne peux donc pas promettre que c'est beau, mais ça marche! Je l'ai utilisé pour résoudre le projet Euler # 83 et cela a fonctionné sur deux cas de test.

https://github.com/PeterMitrano/A-star-Pathfinding/blob/master/problem_83.c

0
Peter Mitrano

Un implémentation Java optimisé est disponible dans GraphHopper.

0
Karussell