L`algorithme A

publicité
USTL Licence Informatique
2007–2008
UE Projet Logiciel
L’algorithme A∗
L’algorithme A∗ permet la recherche d’une solution dans un graphe (espace) d’états à partir d’un état
initial et en calculant un meilleur chemin vers cette solution. Cette notion de “meilleur” est dépendante
d’une fonction de coût, le chemin calculé étant celui de coût le plus faible.
On a la garantie que l’algorithme termine et que, s’il existe une solution, il n’y a pas de meilleur chemin
que celui fourni par l’algorithme.
Pour son calcul l’algorithme explore à partir de l’état initial l’espace des états possibles pour le problème
considéré. Le graphe de cet espace est défini implicitement par un opérateur successeur permettant
pour chaque état de connaı̂tre la liste des états qu’il permet d’atteindre. Comme indiqué précédemment,
chacune des ces transitions est en plus valuée par un coût.
successeur :
Etat
e
→ Etat∗
7
→
états atteignables depuis e
cout : Etat, Etat → R
e1 , e2
7→ coût de la transition de e1 vers e2
L’algorithme. Le principe de fonctionnement de l’algorithme est similaire à celui de l’algorithme de
Dijkstra étudié au S4, avec en plus une estimation heuristique du coût du chemin restant à parcourir entre
un état et un état solution1 . Pour que les propriétés de l’algorithme soient vérifiées, il est nécessaire et
suffisant que cette estimation minore le coût réel (mais inconnu) de ce chemin. Dans le cas contraire,
les propriétés de terminaison et de correction de l’algorithme sont conservées, mais pas celle de meilleur
chemin (on parle alors d’alogorithme A).
heuristique : Etat → R+
e
7→ coût estimé du chemin de e vers un état solution
Donc lors de la recherche de solutions, on explore différents états et pour chaque état e on considère :
• la valeur du chemin déjà parcouru depuis l’état initial ei pour atteindre e, cette valeur est connue
précisément, elle résulte de la somme des coûts des transitions empruntées de ei à e. Appelée
“terme standard” cette valeur est souvent notée gg(e).
• la valeur heuristique, appelée “terme heuristique”, notée hh(e). On a hh(e) = heurstique(e).
On additionne ces 2 termes pour attribuer la valeur, notée f f (e), d’un état e :
f f (e) = gg(e) + hh(e)
Le principe de l’algorithme, présenté à la page suivante, et de parcourir, en partant de ei , le graphe
d’états, en sélectionnant à chaque étape l’un des états e de l’espace de recherche dont la valeur f f est
minimale et en ajoutant à l’espace de recherche les successeurs de e. Un traitement garantit (seconde
partie de l’algorithme) que, pour chaque état, l’on conserve le meilleur chemin permettant de l’atteindre
à partir de ei . L’algortihme termine dès que l’on a atteint l’un des états solutions.
Pour un même problème, il peut exister plusieurs fonctions heuristiques. Le choix de telle ou telle
fonction influence le nombre d’états examinés par l’algorithme et donc sa rapidité mais, évidemment,
pas son résultat. Si pour deux fonctions heuristiques hh1 et hh2 d’un même problème on a
∀e ∈ Etat, 0 ≤ hh1 (e) ≤ hh2 (e) (≤ coût réel)
alors une recherche utilisant hh2 visitera nécessairement moins d’états qu’une autre utilisant hh1 (pour
le même ei évidemment). On dit que hh2 est mieux informée. Ainsi l’heuristique constante hh = 0 est
toujours possible mais peu (pas) informée et donc inintéressant en pratique.
1
Pour un problème donné, il peut parfois y avoir plusieurs solutions
Les données. Pour un problème donnée, il faut connaı̂tre la définition d’un état (se représentation),
l’opérateur successeur et la fonction cout ainsi que les états solution (ou une description de ceux-ci),
fournis dans un ensemble Solutions.
Pour un calcul particulier on doit fournir l’état initial ei ainsi que la fonction heuristique hh utilisée
Algorithme A–A∗
Debut
a–voir← {ei }
deja–vus← {}
gg(init) ← 0
pere(init)← nil
trouve←faux
tantQue a–voir n’est pas vide et trouve est faux faire
meilleurs← ensemble des états de a–voir tel que f f est minimale
si meilleurs est un singleton
alors soit M l’unique élément de meilleurs
sinon Si il y a des éléments de Solutions dans meilleurs
alors soit M l’un d’eux
sinon soit M un élément quelconque de meilleurs
enlever M de a–voir et ajouter M à deja–vus
si M appartient à Solutions
alors trouve← vrai
sinon générer l’ensemble fils des successeurs de M
pour chaque N dans fils faire
si N n’est ni dans a–voir ni dans deja–vus alors
gg(N ) ← gg(M ) + cout(M, N )
f f (N ) ← gg(N ) + hh(N )
pere(N ) ← M
ajouter N à a–voir
finAlors
sinon /* N est dans a–voir ou deja–vus */
soit P =pere(N )
compare ← [gg(M ) + cout(M, N )] − [gg(P ) + cout(P, N )]
/* compare = différence en passant par M ou par P */
si compare< 0 alors
/* si passage par M moins couteux que par P */
gg(N ) ← gg(N ) + compare
f f (N ) ← f f (N ) + compare
pere(N ) ← M
si M est dans deja–vus alors
inserer M dans a–voir et le supprimer de deja–vus
finAlors
finSinon
finPour
finSinon
finTantQue
si trouve est faux alors "Pas de solution"
sinon calculer et afficher le chemin solution (récupérer les pere de M jusqu’à init)
Fin
NB : En programmation, ne pas confondre le nom d’un état et la valeur de ce état. Ainsi un test tel que
“N est dans a–voir” se comprend en fait “la valeur de N est la valeur d’un des états de a–voir”.
Téléchargement