Resolution Problem e
Resolution Problem e
Resolution Problem e
problèmes
Mondher Bouden
Maître assistant
Semestre 5
2017
Algorithmes de
recherche pour la résolution de problèmes
• Le but de ce chapitre est de présenter les
différents types des algorithmes de recherche
pour la résolution des problèmes.
2
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égative (le coût de l’action).
3
Définition formelle d’un problème
• Nous pouvons voir un problème comme un graphe
orienté où les nœuds sont des états accessibles depuis
l’état initial et où les arcs sont des actions.
5
Exemple1: Le taquin
• Voici une formalisation de ce problème :
• Des états sont des configurations des huit tuiles dans les neuf cases
de la grille.
• Etat initial: N’importe quel état pourrait être choisi comme l’état
initial.
6
Exemple1: Le taquin
• Fonction de successeur: Cette fonction spécifie les états résultants
des différentes actions. Par exemple, la fonction va nous dire que
l’exécution de l’action droite dans le premier état de la figure
suivante produira le deuxième état de cette figure:
7
Exemple1: Le taquin
• Test de but: L’état but est unique et fixé au début du jeu (n’importe
quel état peut être choisi comme état but, même si en pratique il
s’agit de remettre les nombres dans l’ordre).
• Coût des actions: Chaque déplacement d’une tuile a un coût de 1
(pour trouver une solution avec le moins de déplacements).
9
Exemple2: Huit reines
• Voici une formalisation du problème:
11
Exemples de problèmes
• Nous remarquons que ces deux problèmes sont de nature assez
différentes.
• Avec le taquin, nous savons depuis le début quel état nous voulons,
et la difficulté est de trouver une séquence d’actions pour
l’atteindre.
• Ces jeux sont plus compliqués, car l’agent ne peut pas choisir les
actions des autres joueurs.
– Au lieu de chercher un chemin qui relie l’état initial à un état but
(qui contiendrait des actions des adversaires, dont nous n’avons
pas le contrôle), nous allons chercher une stratégie, c.a.d. un
choix d’action pour chaque état où pourrait se trouver l’agent.
17
Les jeux à plusieurs joueurs
• Voici une formalisation d’un jeu à plusieurs joueurs :
• Etats: Des configurations du jeu plus le nom de joueur dont c’est
le tour.
• Etat initial: La configuration initiale plus le nom du joueur qui
commence.
• Actions: Les coups légaux pour le joueur dont c’est le tour.
• Fonction de successeur: La nouvelle configuration du jeu, et le
nom de joueur dont c’est le tour.
• Test de but: Les configurations gagnantes pour le joueur.
• Coût des actions: Cela dépendra du jeu en question. Par exemple,
pour le jeu d’échecs, nous pouvons les mettre à 1 pour chercher
18
les coups qui amènent le plus vite à une configuration gagnante.
Structure générale d’un algorithme de recherche
• La plupart des algorithmes de recherche suivent à peu près le
même schéma : nous commençons toujours dans l’état initial et
puis nous exécutons les étapes suivantes en boucle jusqu’à
terminaison :
– S’il n’y a plus d’états à traiter, renvoyez échec.
– Sinon, choisir un des états à traiter (*).
• Si l’état est un état but, renvoyez la solution correspondante.
• Sinon, supprimer cet état de l’ensemble des états à traiter, et
le remplacer par ses états successeurs.
19
Évaluation des algorithmes de recherche
• Voici quatre critères qui sont souvent utilisés pour comparer les
différents algorithmes de recherche :
22
Parcours en largeur
()
()
✓ () F
Nœud de E
départ A
B D
() ()
() G
C
()
File
A
Parcours en largeur
()
()
✓ ()
Nœud de F E
départ A
B D
() ()
() G
C
()
File
Défilé: A
Parcours en largeur
✓ (A) ()
✓ ()
Nœud de F E
départ A
B D
()
G ✓ (A)
✓ (A)
C
()
File
G ; B ; F
Défilé: A
Parcours en largeur
✓ (A) ()
✓ ()
Nœud de F E
départ A
B D
()
G ✓ (A)
✓ (A)
C
()
File
B ; F
Défilé: G
Parcours en largeur
✓ (A) ()
✓ ()
Nœud de F E
départ A
B D
()
G ✓ (A)
✓ (A)
C
()
File
Défilé: B
Parcours en largeur
✓ (A) ()
✓ ()
Nœud de F E
départ A
B D
✓ (A) ✓ (B)
G
✓ (A)
C
File ✓ (B)
F ; C ; D
Défilé: B
Parcours en largeur
✓ (A) ()
✓ ()
Nœud de F E
départ A
B D
✓ (A) ✓ (B)
G
✓ (A)
C
File ✓ (B)
C ; D
Défilé: F
Parcours en largeur
✓ (A) ()
✓ ()
Nœud de F E
départ A
B D
✓ (A) ✓ (B)
G
✓ (A)
C
File ✓ (B)
Défilé: C
Parcours en largeur
✓ (A) ()
✓ ()
Nœud de F E
départ A
B D
✓ (A) ✓ (B)
G
✓ (A)
C
File ✓ (B)
Défilé: D
Parcours en largeur
✓ (A) ()
✓ ()
Nœud de F E
départ A
B D
✓ (A) ✓ (B)
G
✓ (A)
C
File ✓ (B)
D
Parcours en largeur
✓ (A) ()
✓ ()
Nœud de F E
départ A
B D
✓ (A) ✓ (B)
G
✓ (A)
C
File ✓ (B)
D
Parcours en largeur
✓ (A) ()
✓ ()
Nœud de F E
départ A
B D
✓ (A) ✓ (B)
G
✓ (A)
C
File ✓ (B)
B D
Parcours en largeur
✓ (A) ()
✓ ()
Nœud de F E
départ A
B D
✓ (A) ✓ (B)
G
✓ (A)
C
File ✓ (B)
B D
Parcours en largeur
✓ (A) ()
✓ ()
Nœud de F E
départ A
B D
✓ (A) ✓ (B)
G
✓ (A)
C
File ✓ (B)
A B D
Parcours en largeur
Questions
– Est-ce que tout graphe peut être parcouru par cet
algorithme ?
1 1
2 2
4 5 5
4
3 3
– d'explorer un graphe,
– d'en déterminer les composantes connexes,
– de découvrir s'il contient des cycles.
Cet algorithme de parcours dans un graphe a été mis au point par Trémaux
au siècle dernier pour résoudre le problème de la sortie d'un labyrinthe.
Trémaux qui n'avait pas la possibilité d’utiliser la récursivité à l'époque
utilisait un ''fil d'Ariane'' lui permettant de se souvenir par où il était
arrivé à cet endroit dans le labyrinthe.
✓ F
Nœud de E
départ A
B D
G
C
Pile
A
Parcours en profondeur
✓ F
Nœud de E
départ A
B D
G
C
Pile
Dépilé: A
Parcours en profondeur
✓
✓ F
Nœud de E
départ A
B D
✓
✓ G
C
Pile
G ; B ; F
Dépilé: A
Parcours en profondeur
✓
✓ F
Nœud de E
départ A
B D
✓
✓ G
C
Pile
G ; B
Dépilé: F
Parcours en profondeur
✓
✓ F
Nœud de E
départ A
B D
✓
✓ G
C
Pile
Dépilé: B
Parcours en profondeur
✓
✓ F
Nœud de E
départ A
B D
✓ ✓
✓ G
C
✓
Pile
G ; C ; D
Dépilé: B
Parcours en profondeur
✓
✓ F
Nœud de E
départ A
B
D
✓ ✓
✓ G
C
✓
Pile
G ; C
Dépilé: D
Parcours en profondeur
✓
✓ F
Nœud de E
départ A
B D
✓ ✓
✓ G
C
✓
Pile
Dépilé: C
Parcours en profondeur
✓
✓ F
Nœud de E
départ A
B D
✓ ✓
✓ G
C
✓
Pile
Dépilé: G
Parcours en profondeur
✓
✓ F
Nœud de E
départ A
B D
✓ ✓
✓ G
C
✓
Pile
FIN
Parcours en profondeur
Questions
Le graphe correspondant est obtenu en plaçant un sommet en chaque point du labyrinthe où il y a plus d'un chemin
possible et, ensuite, en connectant les sommets conformément à l'architecture du labyrinthe.
Comparaison des deux parcours
Exemple: Backtracking
return 0;
}
Programmation du trajet d’un robot mobile (suite)
0 1 2 3 4 5 6 7 8 9
retours en arrière? B S
• Utiliser des appels C
récursifs et l’ordre d’appel
suivant: D
– Nord E
– Sud
– Est F
E
– Ouest
G
J
Retour en arrière - exercice
laby[x][y] = 'S'; B
return true; S
} else if (laby[x][y] == ' ') { C
laby[x][y] = 'o';
if (Parcours(x-1, y)) D
return(true);
else if (Parcours(x+1, y))
E
return(true); F
else if (Parcours(x, y+1)) E
return(true); G
else if (Parcours(x, y-1))
return(true); H
else
laby[x][y] = '-';
I
} J
return false;
}
Retour en arrière - réponse
0 1 2 3 4 5 6 7 8 9
B
X
o X
o S o X
o
C
X
o o o X
o
D
o o o
E
o o o o
F
o E o
G
o X
o o o o
H
o o o o
I
o o o o o
J
Les algorithmes de recherche heuristique
63
Algorithme de Dijkstra
État initial :
ys = 0 (s étant la source)
yi = + avec i s
À chaque étape : essayer de minimiser les yi
État final : yi = lpcc(s,i) (lpcc: le plus court chemin)
Algorithme de Dijkstra
5 2 9 5 2 6
a b a b
Relâcher(a,b, c(a,b)) Relâcher(a,b, c(a,b))
5 7 5 6
a 2 b a 2 b
Algorithme de Dijkstra
b d
4 5
6
0 a 1 8 2 f
2 3
10
c e
V, S, T a b c d e f
V: ensemble des sommets
S: les sommets solutionnés Y 0
T: une file d’attente (suivant le coût)
Y: tableau des coûts P - - - - - -
P: tableau des sommets précédents
Algorithme de Dijkstra
b d
4 5
6
0 a 1 8 2 f
2 3
10
c e
V, S, T a b c d e f
Y 0
P - - - - - -
Algorithme de Dijkstra
4 (a)
b d
4 5
6
0 a 1 8 2 f
2 3
10
c e
2 (a)
V, S, T a c b d e f
Y 0 2 4
P - a a - - -
Algorithme de Dijkstra
3 (c) 10 (c)
b d
4 5
6
0 a 1 8 2 f
2 3
10
c e
2 (a) 12 (c)
V, S, T a c b d e f
Y 0 2 3 10 12
P - a c c c -
Algorithme de Dijkstra
3 (c) 8 (b)
b d
4 5
6
0 a 1 8 2 f
2 3
10
c e
2 (a) 12 (c)
V, S, T a c b d e f
Y 0 2 3 8 12
P - a c b c -
Algorithme de Dijkstra
3 (c) 8 (b)
b d
4 5
6
0 a 1 8 2 f 14 (d)
2 3
10
c e
2 (a) 10 (d)
V, S, T a c b d e f
Y 0 2 3 8 10 14
P - a c b d d
Algorithme de Dijkstra
3 (c) 8 (b)
b d
4 5
6
0 a 1 8 2 f 13 (e)
2 3
10
c e
2 (a) 10 (d)
V, S, T a c b d e f
Y 0 2 3 8 10 13
P - a c b d e
Algorithme de Dijkstra
3 (c) 8 (b)
b d
4 5
6
0 a 1 8 2 f 13 (e)
2 3
10
c e
2 (a) 10 (d)
V, S, T a c b d e f
Y 0 2 3 8 10 13
P - a c b d e
Algorithme A*
Remarque
Dans le cas d’un algorithme de recherche plus classique (Dijsktra), on effectue
une recherche exhaustive parmi TOUS les sommets candidats.
Conséquence
l’algorithme A* est plus performant que n’importe quel autre algorithme
puisqu’il diminue l’ensemble des sommets à explorer.
Algorithme A*
Remarque
Si l’heuristique était supérieur au coût réel, on risquerait de générer un chemin
qui ne soit pas minimal.
Heuristiques: Algorithme A*
Théorème de Pythagore
S
40
H 2 = (Coté oppose) 2 +
H (Coté adjacent) 2
20
H 2 = 40 2 + 20 2
D
= 2000
H = 20 x (5) 1/2
Distance euclidienne
Heuristiques: Algorithme A*
S
Nombre de cellules, en horizontal et en
vertical entre la source et la destination.
Distance de Manhattan
Recherche de chemins de coût minimal
avec l’algorithme A*
Jeux vidéo
• Animation des personnages non joueurs
• Déplacement réaliste d’un personnage contrôlé par le joueur vers un objectif
désigné par le joueur