Sunteți pe pagina 1din 26

Algorithme A*

Introduction à L’Intelligence Artificielle


C’est quoi l’intelligence artificielle

- l’étude des facultés mentales à l’aide des modèles de type


calculatoires” (Charniak et McDermott, 1985)
- discipline étudiant la possibilité de faire exécuter par
l’ordinateur des tâches pour lesquelles l’homme est
aujourd’hui meilleur que la machine (Rich et Knight, 1990)
- l’automatisation des activités associées au raisonnement
humain, telles que la décision, la résolution de problèmes,
l’apprentissage,...” (Bellman, 1978)

Donc, l’objectif de l’IA est de créer des systèmes intelligents


Introduction à L’Intelligence Artificielle
Quatre façons de voir l’intelligence artificielle :
1. créer des systèmes qui se comportent comme les
êtres humains
2. créer des systèmes qui pensent comme des êtres
humains
3. créer des systèmes qui pensent rationnellement
4. créer des systèmes qui possèdent des
comportements rationnels
Historique de l’IA
• 1943-1955 : Les premiers travaux qui peuvent être considérés comme les
débuts de l’IA (même si le terme n’existait pas encore).
- McCulloch et Pitts ont introduit en 1943 un modèle de neurones artificiels.
- Turing a publié son fameux article sur le test de Turing.

• Naissance d’IA (1956) une conférence sur l’IA qui a durée deux mois, et qui a
permit de poser les fondements de l’IA (nom qui fut choisi à l’issue de cette
conférence)
• 1952-1969 : Développement de travaux : jeux d'échec, démonstration de
théorèmes en géométrie. Apparition du premier programme le LOGIC
THEORIST. Prolog en 1971 par Alan Colmerauer.
• 1966-1973: la traduction automatique.
• Systèmes Experts (1969-1979)
• Le retour des réseaux de neurones (1986-présent)
• L’IA Moderne (1987-présent)
Les sous-domaines de l’IA
• Représentation des connaissances et
Raisonnement Automatique
• Résolution de problèmes généraux
• Traitement du langage naturel
• Vision artificielle (par exemple, de reconnaître
des visages ou des chiffres).
• Robotique
• Apprentissage automatique
Algorithmes de Recherche pour la
Résolution de Problèmes
Définition formelle d’un problème
Un problème est défini par les cinq éléments suivants :
1. un état initial
2. un ensemble d’actions
3. une fonction de successeur, qui définit l’état résultant de l’exécution d’une action dans
un état
4. un ensemble d’états buts
5. une fonction de coût, associant à chaque action un nombre non-négatif (le coût de
l’action)

Donc un problème peut être vu comme un graphe orienté où les nœuds sont des états
accessibles depuis l’état initial et où les arcs sont des actions.
Une solution sera un chemin de l’état initial à un état but.

On dit qu’une solution est optimale si la somme des coûts des actions du chemin est
minimale parmi toutes les solutions du problème.
Algorithmes de Recherche pour la
Résolution de Problèmes
Exemples de problèmes
• Le taquin (N-Puzzle): Le taquin est une sorte de puzzle. Nous commençons
avec une grille 3x3 de neuf cases où sont placées huit tuiles étiquetées par
les nombres 1 `a 8. Une des cases restant vide. Une tuile située à côté de
la case vide peut être déplacée vers cette case.
L’objectif du jeu est d’arriver à obtenir une certaine configuration des tuiles
dans la grille. une solution avec le moins de déplacements)
Algorithmes de Recherche pour la
Résolution de Problèmes

2 8 3 1 2 3
1 6 4 8 4
7 5 7 6 5

Nord Nord Ouest Sud Est


2 8 3 2 8 3 2 3 2 3 1 2 3 1 2 3
1 6 4 1 4 1 8 4 1 8 4 8 4 8 4
7 5 7 6 5 7 6 5 7 6 5 7 6 5 7 6 5
Algorithmes de Recherche pour la
Résolution de Problèmes
Exemples de problèmes
• Huit reines: L’objectif de ce jeu est de placer huit reines sur un
échiquier (une grille 8x 8) tel qu’aucune reine attaque une
autre reine, c’est à dire qu’il n’y a pas deux reines sur la même
colonne, la même ligne, ou sur la même diagonale.
Algorithmes de Recherche
• Algorithmes de Recherche génériques
• Parcours en largeur (ou BFS, pour Breadth First Search ) :
pour un nœud donné, explorer les nœuds frères avant leurs
enfants
Algorithmes de Recherche
• Algorithmes de Recherche génériques
• Parcours en profondeur (ou DFS, pour Depth First Search):
pour un nœud donné, explorer le premier enfant avant
d’explorer un nœud frère
Algorithmes de Recherche
• Recherche Heuristique
- Les algorithmes génériques font une recherche exhaustive
de tous les chemins possibles, ce qui les rend inefficaces
voire inutilisables sur les problèmes de grande taille.
• les algorithmes de recherche heuristiques utilisent des
informations supplémentaires pour pouvoir mieux guider la
recherche.
• Une heuristique h(n) est une fonction d’estimation du coût
entre un nœud (état) n d’un graphe et le but (le nœud à
atteindre).Exp : distance à vol d’oiseau entre deux villes.
Algorithmes de Recherche
• Recherche Heuristique
Algorithme A*
- L’algorithme A* effectue un parcours en largeur guidé par une heuristique définie
préalablement
- Deux files sont utilisées pour stocker les états visités et à visiter
- la file Open contient les états à visiter
- la file Closed contient les états déjà visités
- Une fonction d’évaluation f(n) = g(n) +h(n) est associée à chaque état
- Pour chaque état n, f(n) est un nombre réel positif ou nul, estimant le coût du meilleur
chemin partant de la racine, passant par n, et arrivant au but
- cette mesure combine l’heuristique h(n) avec le coût actuel du passage par l’état g(n).
- La file Actif est triée par ordre de f croissantes
- Parmi tous les successeurs d’un état donné, sont ajoutés à la file Open, les états non
visités ou les états déjà visités mais dont le coût du passage actuel est moins élevé
qu’avant
Algorithmes de Recherche
Définition de f
• La fonction d’évaluation f(n) tente d’estimer le coût du
chemin optimal entre l’état initial et le but, et qui passe
par n Start

Non Exploré Exploré


• En pratique on ne connaît pas ce coût : c’est ce qu’on
cherche !
• À tout moment, on connaît seulement le coût optimal g(n) + h(n)
pour la partie explorée entre la racine et un état déjà
exploré
• Dans A*, on sépare le calcul de f(n) en deux parties :
– g(n) : coût du meilleur chemin ayant mené au état n
depuis la racine Goal
• c’est le coût du meilleur chemin trouvé
jusqu’à maintenant qui se rend à n
– h(n) : coût estimé du reste du chemin optimal
partant de n jusqu’au but. h(n) est la fonction
heuristique
• on suppose que h(n) est non négative et
h(n) = 0 si n est l’état but
Exemples de fonctions heuristiques
• Chemin dans une ville
– distance Euclidienne ou distance de Manhatten pour un
chemin sur une carte
– éventuellement pondéré par la qualité des routes, le prix
du billet, etc.
• Probabilité d’atteindre l’objectif en passant par le
nœud
• Qualité de la configuration d’un jeu par rapport à une
configuration gagnante
• N-Puzzle
– nombre de tuiles mal placées
– somme des distances des tuiles
Algorithme A*
Algorithme recherche-dans-graphe(noeudInitial)
1. déclarer deux nœuds : n, n’
2. déclarer deux listes : open, closed // toutes les deux sont vides au départ
3. insèrer noeudInitial dans open
4. tant que (1) // la condition de sortie (exit) est déterminée dans la boucle
5. si open est vide, sortir de la boucle avec échec
6. n = noeud au début de open;
7. enlever n de open et l’ajouter dans closed
8. si n est le but, sortir de la boucle avec succès en retournant le chemin;
9. pour chaque successeur n’ de n
10. initialiser la valeur g(n’) à : g(n) + le coût de la transition (n,n’)
11. mettre le parent de n’ à n
12. si closed ou open contient un nœud n’’ égal à n’ avec f(n’) ≤f(n’’)
enlever n’’ de closed ou open et insérer n’ dans open (ordre croissant selon f(n))
13. si n’ n’est ni dans open ni dans closed
insérer n’ dans open en triant les nœuds en ordre croissant selon f(n)
Exemple A* avec recherche
dans une ville

Routes entre les villes : h(n0)


9
n0 : ville de départ
n6 : destination n0 c(n0,n3)
h : distance à vol d’oiseau 2 3
4
c : distance réelle entre deux ville 2
5 n3 1 n2 2 n1
1 2 7

n4 3 n5 2

4
4
n6 0
h(n0)
9
Exemple A* n0 c(n0,n3)
2 3
recherche dans une ville 5 1
4
2
2
n3 n2 n1
1 2 7

n4 3 n5 2
Contenu de open à chaque Contenu de closed à chaque
itération (état, f, parent) : itération : 4
4
1. (n0, 9, void) 1. Vide
n6 0
2. (n1,5,n0), (n2,6,n0), (n3,7,n0) 2. (n0, 9, void)
3. (n2,6,n0), (n3,7,n0), (n5,12,n1) 3. (n0, 9, void), (n1,5,n0)
4. (n3,7,n0), (n4,9,n2), (n5,12,n1) 4. (n0, 9, void), (n1,5,n0), (n2,6,n0)
5. (n2,5,n3), (n4,6,n3), (n5,12,n1) 5. (n0, 9, void), (n1,5,n0), (n3,7,n0)
6. (n4,6,n3), (n5,12,n1) 6. (n0, 9, void), (n1,5,n0), (n3,7,n0), (n2,5,n3)
7. (n6,7,n4), (n5,12,n1) 7. (n0, 9, void), (n1,5,n0), (n3,7,n0), (n2,5,n3), (n4,6,n3)
8. Solution : n0,n3,n4,n6 8. (n0, 9, void), (n1,5,n0), (n3,7,n0), (n2,5,n3), (n4,6,n3), (n6,7,n4)
D’autres algorithmes de recherche
heuristique
• Dijkstra
– Cas particulier où f(n) = g(n) (c-à-d., h(n)=0).

• Best-First-Search
– variante plus générale où f peut prendre une forme quelconque
– A* est un cas spécial de Best-First-Search, où f(n) = g(n) + h(n)

• Greedy Best-First-Search
– c’est un Best-First-Search où f(n) = h(n)
– n’est pas garanti de trouver un chemin qui est optimal, mais
marche parfois bien en pratique
Propriétés de A*
• Si le graphe est fini, A* termine toujours
• Si un chemin vers le but existe, A* va en trouver un
• Si la fonction heuristique h retourne toujours un estimé inférieur ou égal
au coût réel à venir, on dit que h est admissible :
– dans ce cas, A* retourne toujours un chemin optimal
• Parfois, on entend par A* la version de l’algorithme avec la
condition additionnelle que h soit admissible
– A* est alors un Best-First-Search où
f(n) = g(n) + h(n) et h(n) est admissible
Propriétés de A* : recherche en
largeur
• En utilisant des coûts des arcs uniformément
égaux et strictement positifs (par exemple,
tous égaux à 1) et h(n) retournant toujours 0
quelque soit le nœud n, A* devient une
recherche en largeur

• Open devient une queue LILO (last in, last out),


en d’autre termes « dernier entré, dernier
sorti »
Propriétés de A*
• Soit f*(n) le coût exact (pas un estimé) du chemin optimal du
nœud initial au nœud but, passant par n

• Soit g*(n) le coût exact du chemin optimal du nœud initial au


nœud n

• Soit h*(n) le coût exact du chemin optimal du nœud n au nœud but

• On a donc que f*(n) = g*(n) + h*(n)

• Si l’heuristique est admissible, pour chaque nœud n exploré par A*,


on peut montrer que l’on a toujours f(n)  f*(n)
Propriétés de A*
• Si quelque soit un nœud n1 et son successeur n2, nous avons toujours

h(n1)  c(n1,n2) + h(n2)

où c(n1,n2) est le coût de l’arc (n1,n2).

On dit alors que h est cohérente (on dit aussi parfois monotone – mais
c’est en réalité f qui devient monotone). Dans ce cas :
– h est aussi admissible
– chaque fois que A* choisit un nœud au début de open, cela veut dire
que A* a déjà trouvé un chemin optimal vers ce nœud : le nœud ne
sera plus jamais revisité!
Propriétés de A*
• Si on a deux heuristiques admissibles h1 et h2, tel que h1(n) < h2(n), alors
h2(n) conduit plus vite au but : avec h2, A* explore moins ou autant de
nœuds avant d’arriver au but qu’avec h1

• Si h n’est pas admissible, soit b la borne supérieure sur la surestimation du


coût, c-à-d. on a toujours h(n)  h*(n) + b :
– A* retournera une solution dont le coût est au plus b de plus que le coût
optimal, c-à-d., A* ne se trompe pas plus que b sur l’optimalité
Propriétés de A*
• Complexité de temps : Exponentielle
– Selon la longueur de la solution.
• Complexité en espace : Exponentielle
– Selon la longueur de la solution (trop gourmand en mémoire).
– Elle garde tous les nœuds en mémoire.
• Optimal : Oui
Variantes de A*
• D* (inventé par Stenz et ses collègues) et Adaptive A*
(inventé par Koening et ses collègue)
– A* dynamique, où le coût des arrêtes peut changer durant l’exécution. Évite de
refaire certains calculs lorsqu’il est appelé plusieurs fois pour atteindre le même
but, suite à des changements de l’environnement.
• Iterative deepening A*
– on met une limite sur la profondeur
– on lance A* jusqu’à la limite de profondeur spécifiée.
– si pas de solution on augmente la profondeur et on recommence A*
– ainsi de suite jusqu’à trouver une solution.

• Recursive best-first search (RBFS) et simplified


memory-bounded A* (SMA*)
– variantes de A* qui utilisent moins de mémoire mais peuvent être plus lentes

S-ar putea să vă placă și