Table des matières
Dijkstra amélioré : A*
La vidéo explique très bien le principe. Pour l'instant je ne fais pas d'explication supplémentaire.
Heuristique
Dans la vidéo, vous pouvez voir qu'on utilise une fonction pour « surélever » les nœuds. Cela permet de donner une sorte de pente qui oriente les chemins dans la direction du nœud que l'on cherche à atteindre.
Cette fonction doit être simple à calculer. Elle exprime la distance entre un certain nœud en cours d'analyse et le nœud que l'on cherche à atteindre.
Dans la vidéo où on cherche le chemin le plus court entre deux points sur une carte, la fonction correspond simplement à la distance en ligne droite.
On considère donc que l'on dispose d'une fonction heuristic(node) qui renvoie une estimation optimiste d'une mesure de distance entre node et le nœud cible.
Implémentation
ALGORITHME A*
ENTRÉES
g: le graphe
start: nœud de départ
end: nœud de fin
heuristic: la fonction heuristique
SORTIES
liste des nœuds, de start à end, réalisant le plus court chemin
DÉBUT
Créer un dictionnaire visited vide
Créer un dictionnaire to_visit contenant tous les sommets associées à +infini
Créer un dictionnaire origine contenant tous les sommets associés à None
Modifier dans to_visit, associer à start la valeur 0
TANT QUE to_visit n'est pas vide RÉPÉTER
sélectionner le nœud n de plus petites valeurs dans to_visit
SI n est end ALORS
# chemin trouvé !
# construire le chemin en utilisant origin
soit chemin une liste vide,
TANT QUE n n'est pas None RÉPÉTER
ajouter n à la suite de chemin
n = origin[n]
FIN
RENVOYER chemin à l'envers
FIN
extraire ce nœud de to_visit et le placer, avec la même valeur, dans visited
POUR CHAQUE voisin v non visité de n RÉPÉTER
calculer p = valeur associée à n + poids de l'arête (n, v) + heuristic(v)
SI p < valeur associée ALORS
dans to_visit, changer la valeur de v en la mettant à p
dans origin, changer la valeur de v en la mettant à n
FIN
FIN
FIN
# aucun chemin trouvé !
FIN
Faites l'implémentation.
