Implémentation A * multiplateforme la plus rapide?
Avec de nombreuses implémentations disponibles, ce qui est le plus rapide en cours d'exécution (moins de CPU, de la plus petite binaire), multi-plateforme (Linux, Mac, Windows, iPhone)* mise en œuvre de C++ à l'aide d'une petite grille?
Implémentations
Google retourne:
- http://www.heyes-jones.com/astar.html (La plupart des liens sur ce site sont morts.)
- http://www.grinninglizard.com/MicroPather (Dit d'être plus lent que Heyes-Jones'.)
- http://www.ceng.metu.edu.tr/~cuneyt/codes.html (Générique de code C++.)
- http://swampthingtom.blogspot.com/2007/07/pathfinding-sample-using.html
- http://opensteer.sourceforge.net/ (Intéressant pour les jeux, pas Un*.)
- Un Débordement de pile sur l'Algorithme de Dijkstra
Tout les autres?
La Roue
La question, comme l'avait demandé, se rapporte à la réutilisation (prise dans un jeu), pas de réinvention (au moins pas jusqu'à ce que la performance est montré pour être un problème). Il pourrait s'avérer que un Dijkstra mise en œuvre (ou générique algorithme de pathfinding) est mieux adapté, ou que le plus rapide des implémentations ne sont pas assez rapides. J'apprécie les suggestions de la variante des algorithmes, mais la question n'est pas, "dois-je roule mes propres*?"
- Joel on Software - Pas Inventé Ici " Syndrome de
- Codage de l'Horreur: Ne pas Réinventer la Roue
- Surmonter le "Pas Inventé Ici "Syndrome"
source d'informationauteur Dave Jarvis
Vous devez vous connecter pour publier un commentaire.
Regarder autre chemin pour trouver des algorithmes (comme le Souffle-tout d'Abord, la Profondeur d'Abord, Minimax, Negmax etc.) et de peser les points positifs et négatifs de votre scénario.
Boost aussi a un Une-star de la mise en œuvre. Essayez de suivre ces instructions à construire le coup de pouce sur l'iPhone, mais il pourrait ne pas fonctionner pour vous: il n'est pas un "port" de boost et il pourrait d'erreur.
Ce qui suit est Algorithmes en un Mot (Java, C++, mais vous aimeriez peut-port):
Lorsque vous avez des limites que vous pouvez travailler avec vous, vous êtes généralement mieux écrire l'algorithme de vous-même. En particulier, votre petit état de l'espace se prête à des optimisations qui font passer la mémoire afin de réduire les temps de calcul, et le fait que vous êtes à l'aide d'une grille plutôt que de l'arbitraire d'un espace d'état vous permet de faire des choses comme optimiser votre successeur du nœud de génération, ou être en mesure de traiter toutes partielle des chemins qui se terminent sur le même carré de la grille comme équivalent (une normale, une* recherche ne sera pas et ne peut pas assumer).
(PS. OpenSteer, une collection de la direction des comportements, y a rien à faire avec Un*, qui est un algorithme de recherche, sauf que vous pouvez théoriquement utiliser l'un, l'autre ou les deux traversent un espace. On n'est pas un remplacement pour l'autre dans la plupart raisonnable circonstances.)
Je vous suggère de mettre en œuvre l'algorithme par vous-même. Suivez le pseudo-code: * Algorithme De Recherche et il doit être simple. Le "openset doit être mis en œuvre comme un min-tas, qui est aussi trivial; ou vous pouvez utiliser priority_queue de STL.
J'ai deux morceaux de conseils:
Il y a un générique de C++ A* la mise en œuvre au http://www.ceng.metu.edu.tr/~cuneyt/codes.html. Il semble que c'est tous les cross-platform C++ standard.