Algorithmes de Recherche
Algorithmes de Recherche
Algorithmes de Recherche
Plan
• Stratégies de recherche
– Recherche non‐informée
– Recherche informée
2
Résolution de problèmes Exemple
3
Résolution de problèmes Exemple
4
Résolution de problèmes Formulation du problème
5
Résolution de problèmes Abstraction
• Une abstraction est valide si l’on peut développer toutes les solutions abstraites vers une solution
• Sans abstraction, un agent ne peut rien faire, le monde est juste trop complexe. L’humain est
pareil aussi.
6
Résolution de problèmes Exemple de problème : 8‐puzzle
• États : ?
– Positions des huit tuiles dans les cases.
• Actions : ?
– Déplacement du trou: droite, gauche, haut, bas.
• Test de but : ?
– Un état qui correspond à l’état final.
• Coût du chemin : ?
– Chaque action coûte 1.
7
Résolution de problèmes Recherche de solutions dans un graphe
• Le web : chaque page est un sommet du graphe, chaque lien hypertexte est une arête entre deux
sommets.
• Un réseau ferroviaire : chaque gare est un sommet, les voies entre deux gares sont les arêtes. Idem
avec un réseau routier.
• Un réseau social : les sommets sont les personnes, deux personnes sont adjacentes dans ce graphe
lorsqu'elles sont amies".
Si la notion d'amitié n'est pas réciproque, le graphe est oriente.
8
Résolution de problèmes Recherche de solutions dans un graphe
9
Résolution de problèmes Stratégies de recherche
nœud est meilleur qu’un autre. Elles peuvent seulement dire si l’état est un but ou non.
• Recherches informées (heuristiques) : Elles peuvent estimer si un nœud est plus prometteur
qu’un autre.
10
Résolution de problèmes Évaluation des stratégies
• Complétude : Est‐ce que l’algorithme garantit de trouver une solution s’il y en a une ?
11
Résolution de problèmes Complexité
12
Résolution de problèmes Stratégies de recherche non‐informées
13
Résolution de problèmes Largeur d’abord
• Développement de tous les nœuds au niveau i avant de développer les nœuds au niveau
i+1
14
Résolution de problèmes Largeur d’abord
Vous devez parcourir toutes les pages d'un site web. Les pages sont les sommets d'un graphe et un lien
entre deux pages est une arête entre ces deux sommets.
1. Dans le parcours en largeur, on utilise une file. On enfile le sommet de départ (on visite la page
index du site).
2. On visite les voisins de la tête de le (pages ciblées par la page de tête de file). On les enfile (en les
numérotant au fur et à mesure de leur découverte) s'ils ne sont pas déjà présents dans la file, ni
déjà passés dans la file.
4. On recommence au point 2 (tant que c'est possible, c'est a dire tant que la file n'est pas vide).
En d'autres termes, on traite toujours en priorité les liens des pages le plus tôt découvertes.
15
Résolution de problèmes Largeur d’abord
Parcourir en largeur le graphe ci-dessous a partir du sommet s :
16
Résolution de problèmes Largeur d’abord
17
Résolution de problèmes Largeur d’abord
19
Résolution de problèmes Largeur d’abord
20
Résolution de problèmes Largeur d’abord
21
Résolution de problèmes Largeur d’abord
22
Résolution de problèmes Largeur d’abord
23
Résolution de problèmes Largeur d’abord
24
Résolution de problèmes Largeur d’abord
25
Résolution de problèmes Largeur d’abord
26
Résolution de problèmes Largeur d’abord
27
Résolution de problèmes Largeur d’abord
28
Résolution de problèmes Largeur d’abord
29
Résolution de problèmes Largeur d’abord
30
Résolution de problèmes Largeur d’abord
31
Résolution de problèmes
function
Algorithme largeur d’abord
BREADTH-FIRST-SEARCH(problem) returns le nœud solution ou échec
nœud NODE(problem.INITIAL)
if problem.is-GOAL(noeud.STATE.) then return nœud
frontier a File, avec nœud comme element
reached {problem.INITIAL}
while not Is-EMPTY(frontier) do
nœud POP(frontier)
for each child in EXPAND(problem, nœud) do
s child.STATE
if problem.IS-GOAL(s) then return child
if s is not in reached then
add s to reached
add child to frontier
return failure
32
Résolution de problèmes Propriétés de largeur d’abord
• Optimal : Non en général, oui si le cout des actions est le même pour toutes les actions
33
Résolution de problèmes Profondeur d’abord
35
Résolution de problèmes Exemple
Vous devez parcourir toutes les pages d'un site web. Les pages sont les sommets d'un graphe et un
lien entre deux pages est une arête entre ces deux sommets.
1. Dans le parcours en profondeur, on utilise une pile. On empile le sommet de départ (on visite
la page index du site).
2. Si le sommet de la pile présente des voisins qui ne sont pas dans la pile, ni déjà passés dans
la pile :
• alors on sélectionne l'un de ces voisins et on l'empile (en le marquant de son numéro de
découverte),
• sinon on dépile (c'est a dire on supprime l’élément du sommet de la pile).
3. On recommence au point 2 (tant que la pile n'est pas vide). En d'autres termes, on traite
toujours en priorité les liens des pages les plus tard découvertes.
36
Résolution de problèmes Exemple
37
Résolution de problèmes Exemple
38
Résolution de problèmes Exemple
39
Résolution de problèmes Exemple
40
Résolution de problèmes Exemple
41
Résolution de problèmes Exemple
42
Résolution de problèmes Exemple
43
Résolution de problèmes Exemple
44
Résolution de problèmes Exemple
45
Résolution de problèmes Exemple
46
Résolution de problèmes Exemple
47
Résolution de problèmes Exemple
48
Résolution de problèmes Exemple
49
Résolution de problèmes Exemple
50
Résolution de problèmes Exemple
51
Résolution de problèmes Exemple
52
Résolution de problèmes Exemple
53
Résolution de problèmes Exemple
54
Résolution de problèmes Exemple
55
Résolution de problèmes Exemple
56
Résolution de problèmes Exemple
57
Résolution de problèmes Exemple
58
Résolution de problèmes Exemple
59
Résolution de problèmes Exemple
60
Résolution de problèmes Exemple
61
Résolution de problèmes Exemple
62
Résolution de problèmes Exemple
63
Résolution de problèmes Exemple
64
Résolution de problèmes Propriétés de profondeur d’abord
• Complétude : non, si la profondeur est infinie, s’il y a des cycles. Oui, si on évite les états
• Complexité en temps : O() Très mauvais si m est plus grand que d. m est la profondeur max.
• Optimal : Non
65
Résolution de problèmes Algorithme profondeur d’abord
DFS(G,v) ( v est le nœud ou commence la recherche )
Pile S {}; ( commence avec pile vide )
for each nœud u
set visited[u] False;
push Sv;
while (S is not vide) do
u pop S;
if (not visited[u]) then
visited[u] True;
for each unvisited neighbour w of u
push Sw;
end if
end while
66
Résolution de problèmes Stratégies de recherche informée
• Les stratégies de recherche non‐informée ne sont pas très efficaces dans la plupart des cas.
Elles sont aveugles car elles ne savent pas si elles s’approchent du but.
• Les stratégies de recherche informée utilisent une fonction d’estimation (heuristique) pour
67
Résolution de problèmes Stratégies de recherche informée
68
Résolution de problèmes Meilleur d’abord
• L’idée est d’utiliser une fonction d’évaluation qui estime l’intérêt des nœuds et de développer le nœud
le plus intéressant.
• Une composante importante de ce type d’algorithme est une fonction heuristique h(n) qui estime le
69
Résolution de problèmes Meilleur d’abord glouton
70
Résolution de problèmes Exemple
71
Résolution de problèmes Heuristique du vol d’oiseau
• Soit h(n) = distance à vol d’oiseau pour la carte de Roumanie.
72
Résolution de problèmes Exemple meilleur d’abord glouton
73
Résolution de problèmes Propriétés meilleur d’abord glouton
• Complétude : Non, elle peut être prise dans des cycles. Oui, si l’espace de recherche est fini avec
• Complexité de temps : O(bm), mais une bonne fonction heuristique peut améliorer grandement la
situation.
74
Résolution de problèmes
F
Algorithme meilleur d’abord glouton
function BEST-FIRST-SEARCH(problem, f) returns a solution node or failure
node NODE(STATE=problem.INITIAL)
frontier a priority queue ordered by f, with node as an element
reached a lookup table, with one entry with key problem.INITIAL and value node
while not Is-EMPTY (frontier) do
node POP(frontier)
if problem.IS-GOAL(node.STATE) then return node
for each child in EXPAND(problem, node) do
s child STATE
if s is not in reached or child. PATH-COST < reached[s].PATH-COST then
reached[s] child
add child to frontier
return failure
75
Résolution de problèmes Algorithme A*
– f(n): coût total estimé du chemin passant par n pour se rendre au but.
• A* utilise une heuristique admissible, c’est‐à dire h(n) ≤ h*(n), où h*(n) est le véritable coût
• Demande aussi que h(n) ≥ 0 et que h(G) = 0 pour tous les buts G.
76
Résolution de problèmes Heuristique du vol d’oiseau
• Soit h(n) = distance à vol d’oiseau pour la carte de Roumanie. Cette heuristique est admissible
77
Résolution de problèmes Heuristique du vol d’oiseau (2)
• Soit h(n) = distance à vol d’oiseau pour la carte de Roumanie.
78
Résolution de problèmes Exemple A*
79
Résolution de problèmes Propriétés de A*
• Complétude : oui
des états‐‐ ),
• Complexité en espace : elle garde tous les nœuds en mémoire: exponentielle selon la longueur
de la solution .
• Optimale : Oui
80
Résolution de problèmes Exercice
• Largeur d’abord
• Profondeur d’abord
• Meilleur d’abord glouton
• A*
Dans quel ordre les nœuds sont développés pour chacun des algorithmes?
81