Bonjour !
J'ai codé un algorithme A* qui fonctionne très bien, mais que j'aimerais optimiser car il devra à terme tourner sur une Raspberry Pi. Le temps d'initialisation (chargement de graphe par exemple) peut être long tant que les recherches de chemin derrière sont rapides. L'objectif serait d'obtenir une recherche de chemin sur une surface de 200*300 avec des pas de 20, en plus d'un lissage post A* afin d'éviter les déplacements saccadés. Est-ce réaliste de viser un temps de calcul de l'ordre de la demi-seconde ?
J'avais au départ une création à la volée des noeuds à chaque recherche de chemin, que j'ai modifié pour qu'ils soient tous créés dans le constructeur. J'ai rangé les noeuds dans un std::vector, et je les retrouve à l'aide de leur id.
Je me demandais si ce ne serait pas plus intéressant de créer un tableau à deux dimensions dans lequel je placerais les noeuds à la case correspondant à leur coordonnée sur la surface, quitte à diviser les coordonnées par 20 (le pas) afin d'éviter les cases de tableau vides ?
Afin d'assurer l'absence de fuite de mémoires, j'utilise des shared_ptr pour manipuler les noeuds, est-ce que cela allégerait notablement les calculs d'utiliser de simples pointeurs ?
Merci d'avance pour vos réponses !
Partager