Algo Av Partie1
Algo Av Partie1
Algo Av Partie1
Plan du cours :
Introduction
Rappel : les graphes
Résolution de problèmes
Les algorithmes de recherche
Recherche aveugle
Recherche heuristique
Algorithme minimax
Algorithme alphabéta
Introduction
●
Modélisation des problèmes avec des graphes.
Introduction
●
Le problème des ponts de Koenigsberg dont voici l’énoncé :
“ Peut-on arranger son parcours de telle sorte que l’on passe sur chaque
pont, et que l’on ne puisse y passer qu’une seule fois ? ”
●
En 1736, le mathématicien suisse Leonhard Euler trouva la réponse.
Rappel : Les graphes
●
Définitions :
●
Un graphe non orienté est défini par un couple (S, A) tel que S est un ensemble de sommets et A ⊆ S × S S × S
est un ensemble d’arêtes
La relation binaire est symétrique : (si, sj) ∈ A implique (sj, si) ∈ A . A implique (sj, si) ∈ A implique (sj, si) ∈ A . A .
●
Chaîne = Séquence de sommets < s0, s1, s2, ..., sk > (notée s0 ∼ sk ) telle que ∀i ∈ [1, k], {si−1, si} ∈ A sk ) telle que ∀i ∈ [1, k], {si−1, si} ∈ Ai ∈ A implique (sj, si) ∈ A . [1, k], {si−1, si} ∈ A implique (sj, si) ∈ A . A
●
Longueur d’une chaîne = Nombre d’arêtes dans la chaîne
●
Chaîne élémentaire = Chaîne dont tous les sommets sont distincts
●
Cycle = Chaîne commençant et terminant par un même sommet
●
Boucle = Cycle de longueur 1
●
G = (S, A) est connexe si ∀i ∈ [1, k], {si−1, si} ∈ A(si, sj) ∈ A implique (sj, si) ∈ A . S2 , si ∼ sk ) telle que ∀i ∈ [1, k], {si−1, si} ∈ A sj
●
Composante connexe de G = sous-graphe de G connexe et maximal
Rappel : Les graphes
●
Définitions :
●
Un graphe orienté est défini par un couple (S, A) tel que S est un ensemble de sommets et A ⊆ S × S S × S est un
ensemble d’arcs.
La relation binaire non symétrique : (si, sj) ∈ A implique (sj, si) ∈ A . A n’implique pas (sj, si) ∈ A implique (sj, si) ∈ A . A
●
Chemin = Séquence de sommets < s0, s1, s2, ..., sk > (notée s0→sk ) telle que ∀i ∈ [1, k], {si−1, si} ∈ Ai ∈ A implique (sj, si) ∈ A . [1, k],(si−1, si) ∈ A implique (sj, si) ∈ A . A
●
Longueur d’un chemin = Nombre d’arcs dans le chemin
●
Chemin élémentaire = Chemin dont tous les sommets sont distincts
●
Circuit = Chemin commençant et terminant par un même sommet
●
Boucle = Circuit de longueur 1
●
G = (S, A) est fortement connexe si ∀i ∈ [1, k], {si−1, si} ∈ A(si, sj) ∈ A implique (sj, si) ∈ A . S2, si → sj
●
Composante fortement connexe = sous-graphe fortement connexe maximal
Rappel : Les graphes
●
Définitions :
Un arbre est Graphe non orienté G = (S, A) vérifiant les 6 propriétés suivantes :
Une arborescence est un graphe orienté sans circuit admettant une racine s0 ∈ A implique (sj, si) ∈ A . S telle que, pour tout
autre sommet si ∈ A implique (sj, si) ∈ A . S, il existe un chemin unique allant de s0 vers si.
Les graphes
●
Structures de données pour représenter un graphe :
1-Matrice d’adjacence :
●
Matrice d’adjacence d’un graphe G = (S, A):est une matrice M telle que
M[si][sj] = 1 si (si, sj) ∈ A, A,
M[si][sj] = 0 sinon
2-Liste d’adjacence :
●
Tableau Successeur tel que Successeur[si] = liste chaînée des successeurs de si
Parcours d’un graphe
●
Parcours d’un graphe :
Visite de tous les sommets accessibles depuis un sommet de départ donné S0.
Comment ?
●
Marquage des sommets par des couleurs :
– Blanc = Sommet pas encore visité
– Gris = Sommet en cours d’exploration
– Noir = Sommet que l’on a fini d’explorer
●
Au début, le sommet de départ est gris et tous les autres sont blancs
●
A chaque étape, un sommet gris est sélectionné (Boucle)
– Si tous ses voisins sont déjà gris ou noirs, alors il est colorié en noir
– Sinon, il colorie un (ou plusieurs) de ses voisins blancs en gris
– Jusqu’à ce que tous les sommets soient noirs ou blancs
Parcours d’un graphe
Parcours d’un graphe :
Fonction Parcours(g, s0)
Entrée : Un graphe g et un sommet s0 de g
Sortie : Arborescence ARB du parcours de g à partir de s0
●
Arborescence associée à un parcours :
si est le père de sj, si c’est sj a été découvert à partir de si
si est racine si, si = s0
●
Tableau ARB :
ARB[si] = null si, si est racine,
et ARB[sj] = si avec si est le père de sj sinon
Parcours d’un graphe
Parcours en largeur :
●
Structure : On utilise une file (FIFO) pour stocker des sommets gris.
ARB[si] ← null
– Couleur[si] ← blanc
Retourne ARB
Parcours d’un graphe
●
Parcours en largeur :
Complexité temporelle pour un graphe ayant n sommets et m arcs :
Espace d’états : Description (abstraction) du monde réel par la liste des villes reliant
le réseau routiers A, B , C , D, E, F
•
But : atteindre la ville E
•
Action : se déplacer d’une ville à une autre
•
Fonction successeur : se déplacer de A vers B → être dans B
•
Solution du problème : la liste d’actions menant de l’état initial(A) à l’état final(E).
Résolution de problèmes
Représentation par un graphe d’états :
• On représente l’ensemble des états du problème par un graphe étiqueté
•
Les sommets sont les états du problème
•
Il existe un arc (u,v) si une action transforme l’état u en état v,
•
L'espace d'états c‘est l'ensemble des états possibles obtenus par application
des actions
Algorithme de base :
Démarrer la recherche avec une liste contenant l’état initial du problème
Tant que la liste n’est pas vide faire :
Choisir (à l’aide d’une stratégie) un état e à traiter
Si e est un état final alors retourner recherche positive
Sinon, rajouter les successeurs de e à la liste (ou une partie d’entre eux)
Si la liste est vide, retourner recherche négative
Algorithmes de recherche
Stratégie de recherche :
●
Une stratégie de recherche est définie par l’ordre dans lequel les nœuds sont
développés,
●
Développement d’état : à chaque étape, l’état choisi sera
– complètement développé
– partiellement développé
Algorithmes de recherche
Stratégie de recherche :
●
Les stratégies de recherche non-informées utilisent seulement les informations
disponibles dans le problème.
●
Il existe plusieurs stratégies :
1-Recherche en largeur d’abord.
2-Recherche en coût uniforme.
3-Recherche en profondeur d’abord.
4-Recherche en profondeur limitée.
5-Recherche itérative en profondeur.
Algorithmes de recherche
1-Recherche en largeur d’abord (Breadth First Search / BFS):
Cette méthode de recherche explore les états d’un problème en étendant toujours
le nœud le moins profond.
Algorithmes de recherche
1-Recherche en largeur d’abord: Exemple
Algorithmes de recherche
1- Recherche en largeur d’abord: Exemple
Algorithmes de recherche
1-Recherche en largeur d’abord (Breadth First Search / BFS):
Fonction BFS(problème) retourne solution ou echec
nœud ← avec ETAT=problème.ETAT-INIT ,...
Si problème.BUT-TEST(noeud.ETAT) alors retourner SOLUTION(noeud)
Sinon
frontière ← Liste FIFO
ajouter(noeud, frontière)
visités ← vide
Boucle
Si vide(frontière) alors retourner échec
Sinon nœud← extraire-premier(frontière)
ajouter noeud.ETAT à visités
Pour chaque action dans problème.ACTIONS(noeud.ETAT) faire
fils ← NOEUD-FILS(nœud, action)
Si fils.ETAT n’est pas dans frontière ni dans visités alors
Si problème.BUT-TEST(fils.ETAT) alors
retourner SOLUTION(fils)
Sinon ajouter(fils,frontière)
Fin boucle.
Algorithmes de recherche
1-Recherche en largeur d’abord (Breadth First Search / BFS):
Boucle
Si vide(frontière) alors retourner échec
Sinon
nœud← Dépiler(frontière)
Pour chaque action dans problème.ACTIONS(noeud.ETAT) faire
fils ← NOEUD-FILS(nœud, action)
Si fils.ETAT n’est ni dans frontière alors
Si problème.BUT-TEST(fils.ETAT) alors
retourner SOLUTION(fils)
Sinon
Empiler(fils,frontière)
Fin boucle
Algorithmes de recherche
3-Recherche en profondeur d’abord (Depth First Search / DFS):
●
Algorithme de recherche en profondeur d’abord, mais avec une limite l sur la
profondeur.
●
Les nœuds de profondeur l n’ont pas de successeurs.
Exemple l=2
Algorithmes de recherche
4-Recherche en profondeur limitée(Depth Limit Search / DLS):
Fonction DLS(problème, limite) retourne solution ou echec
nœud ← avec ETAT=problème .ETAT-INIT , Profondeur←0,...
Si problème.BUT-TEST(noeud.ETAT) alors retourner SOLUTION(noeud)
Sinon
frontière ← Liste LIFO
Empiler((nœud avec profondeur), frontière)
Boucle
Si vide(frontière) alors retourner échec
Sinon
(nœud avec profondeur)← Dépiler(frontière)
Si profondeur <limite alors
Pour chaque action dans problème.ACTIONS(noeud.ETAT) faire
fils ← NOEUD-ENFANT(noeud, action)
Si fils.ETAT n’est ni dans frontière alors
Si problème.BUT-TEST(fils.ETAT) alors
retourner SOLUTION(fils)
Sinon
Empiler((fils avec profondeur+1),frontière)
Fin boucle
Algorithmes de recherche
4-Recherche en profondeur limitée (Depth Limit Search / DLS)::
Analyse de l’algorithme :
Complétude : Oui si l >= d,
Non, sinon
Avec d la profondeur de la solution et l la limite maximum
●
Profondeur limitée, mais en augmentant à chaque fois la profondeur: 0, 1, 2, 3, . . .
●
Combine les avantage de la recherche en largeur (complétude et optimalité) et du
parcours en profondeur (faible complexité en espace).
Algorithmes de recherche
5- Recherche en profondeur itérative (Iterative Deepening Search-IDS) :
Exemple :
Algorithmes de recherche
5- Recherche en profondeur itérative (Iterative Deepening Search-IDS) :