Problèmes et solutions en IA
Problèmes et solutions en IA
P = (S0 , A, T , G, C)
où :
• S0 : état initial
• A : liste des actions possibles
• T (s, a) : fonction de transition
• G(s) : test de but (vrai si l’état est solution)
• C : fonction coût du chemin (optionnel)
• Le rôle d’un algorithme de recherche :
A→B→C→D→E
1 2 3
4 5 6
7 8 □
• Actions : déplacer la case vide (□)
• Test de but : puzzle résolu
• Coût : 1 mouvement
1 3 6
5 □ 2
4 7 8
à l’état final ?
MAJDOUB Soufyane (UPF) Systèmes intelligents 16 décembre 2025 8 / 57
Problème de recherche en IA
P = (S0 , A, T , G, C)
• Éléments :
• S0 : état initial
• A : actions possibles
• T (s, a) : fonction de transition (nouvel état)
• G(s) : test de but (objectif atteint si vrai)
• C : coût du chemin (optionnel)
• Objectif : trouver
• une solution (chemin menant au but),
• ou une solution optimale (coût minimal).
A C
S
D G
B E
Définition : La recherche en profondeur (DFS : Depth First Search) est une méthode d’exploration de
graphe qui consiste à suivre un chemin le plus loin possible avant de revenir en arrière.
Elle fonctionne selon le principe suivant :
• On part du nœud initial.
• On explore toujours le voisin suivant non visité le plus profond.
• Lorsqu’on arrive à un nœud sans nouveaux voisins, on revient en arrière (backtracking).
• L’exploration continue jusqu’à trouver le but ou avoir tout visité.
Caractéristiques importantes :
• Elle utilise une pile (LIFO) : on traite toujours le dernier ajouté.
• DFS ne garantit pas un chemin de longueur minimale.
• Très utile pour explorer des structures profondes : arbres, labyrinthes, détection de cycles, analyse
de chemins.
A C
S
D G
B E F
Initialisation
Début de l’itération 1
Développement de S
voisin(S) [ A, B ]
DéjàVisité {S}
Parent[A] S
Parent[B] S
Pile (après) [ A, B ]
Début de l’itération 2
Pile [ A, B ]
DéjàVisité {S}
Parent A :S, B :S
Développement de B
voisin(B) [E]
DéjàVisité (après) { S, B, E }
Parent[E] B
Pile (avant) [ A, B ]
Pile (après) [ A, E ]
Début de l’itération 3
Pile [ A, E ]
DéjàVisité { S, B, E }
Parent A :S, B :S, E :B
Développement de E
voisin(E) [F]
DéjàVisité (après) { S, B, E, F }
Parent[F] E
Pile (avant) [ A, E ]
Pile (après) [ A, F ]
Début de l’itération 4
Pile [ A, F ]
DéjàVisité { S, B, E, F }
Parent A :S, B :S, E :B, F :E
Développement de F
F n’a aucun voisin non visité � c’est un cul-de-sac. On retire F de la pile et on remonte.
Début de l’itération 5
Pile [A]
DéjàVisité { S, B, E, F }
Parent A :S, B :S, E :B, F :E
Développement de A
voisin(A) [ C, D ]
DéjàVisité (après) { S, B, E, F, A, C, D }
Parent[C] A
Parent[D] A
Pile (après) [ C, D ]
Début de l’itération 6
Pile [ C, D ]
DéjàVisité { S, B, E, F, A, C, D }
A :S, B :S, E :B, F :E,
Parent
C :A, D :A
Développement de D
voisin(D) [G]
DéjàVisité (après) { S, B, E, F, A, C, D, G }
Parent[G] D
Pile (après) [ C, G ]
distance[u] + poids(u, v )
2 5
A B
D E
1
Initialisation de Dijkstra :
MAJDOUB Soufyane (UPF) Nœud Distance initiale
Systèmes intelligents Parent 16 décembre 2025 32 / 57
Exemple Dijkstra : itération 1 (développement de A)
Début de l’itération 1
Voisins de A : B et D.
Avant mise à jour Après relaxation des arêtes de A
Nœud Distance Parent Nœud Distance Parent
A 0 – A 0 –
B ∞ Null B 2 A
C ∞ Null C ∞ Null
D ∞ Null D 6 A
E ∞ Null E ∞ Null
Début de l’itération 2
Voisins de B : C et D.
Avant mise à jour Après relaxation des arêtes de B
Nœud Distance Parent Nœud Distance Parent
A 0 – A 0 –
B 2 A B 2 A
C ∞ Null C 5 B
D 6 A D 3 B
E ∞ Null E ∞ Null
Itération 3 : développement de D
Itération 4 : développement de E
La ListeTriée devient :
ListeTriée = [ C(5) ]
A→B→D→E (coût 2 + 1 + 1 = 4)
Objectif : Trouver le plus court chemin entre un point de départ S et un point d’arrivée E dans une grille
contenant des murs.
Caractéristiques du problème :
• L’environnement est une grille 4x4.
• Certaines cellules sont des murs (notés #) : on ne peut pas les traverser.
• Un mouvement possible : haut, bas, gauche, droite.
• Chaque mouvement a un coût identique : 1.
But de la démonstration
Appliquer l’algorithme A* pour calculer le chemin de coût minimal entre S et E dans ce labyrinthe.
A* est une recherche informée : il choisit en priorité les nœuds qui semblent les plus prometteurs.
Rôle de f (n)
Le nœud ayant la plus petite valeur de f est toujours choisi pour être développé en premier.
h(S(0, 0)) = |0 − 3| + |0 − 3| = 3 + 3 = 6
Cette heuristique :
• Est admissible → ne surestime jamais le coût réel
• Assure l’optimalité du chemin trouvé (avec A*)
(y,x) 0 1 2 3
0 S (6) 5 4 3
1 5 # 3 2
2 4 # 2 1
3 3 2 1 E (0)
Développement de S
• S est retiré de la Frontière et ajouté aux Visitées.
• Voisins accessibles (sans diagonales, sans murs) : (0, 1) et (1, 0).
f =g+h =1+5=6
Voisin g h f Parent
(0,1) 1 5 6 S
(1,0) 1 5 6 S
Après itération 1 :
Frontière = [ (0, 1) | f = 6, (1, 0) | f = 6 ], Visitées = {S}
Développement de (1,0)
• (1, 0) est retiré de la Frontière et ajouté aux Visitées.
• Voisin vers le bas : (2, 0) (car (1, 1) est un mur, (0, 0) visité).
Pour (2, 0) :
g(2, 0) = g(1, 0) + 1 = 1 + 1 = 2
h(2, 0) = |0 − 3| + |2 − 3| = 3 + 1 = 4
f (2, 0) = 2 + 4 = 6
Voisin g h f Parent Action
(2,0) 2 4 6 (1,0) Ajouté
Après itération 2 :
Frontière = [ (0, 2)|f = 6, (2, 0)|f = 6 ], Visitées = {S, (0, 1), (1, 0)}
Développement de (0,2)
• (0, 2) est retiré de la Frontière et ajouté aux Visitées.
• Voisins accessibles (sans murs, non visités) : (0, 3) et (1, 2).
g(0, 2) = 2
h(0, 3) = |3 − 3| + |0 − 3| = 3, h(1, 2) = |2 − 3| + |1 − 3| = 3
g(0, 3) = 3, f (0, 3) = 3 + 3 = 6; g(1, 2) = 3, f (1, 2) = 3 + 3 = 6
Voisin g h f Parent Action
(0,3) 3 3 6 (0,2) Ajouté
(1,2) 3 3 6 (0,2) Ajouté
Développement de (2,0)
• (2, 0) est retiré de la Frontière et ajouté aux Visitées.
• Voisin accessible (hors mur et non visité) : (3, 0).
Développement de (0,3)
• (0, 3) est retiré de la Frontière et ajouté aux Visitées.
• Voisins accessibles non visités : (1, 3)
• (0, 2) est ignoré car déjà visité.
Développement de (3,0)
• (3, 0) est retiré de la Frontière et ajouté aux Visitées.
• Voisin accessible non visité : (3, 1)
• (2, 0) est ignoré car déjà visité.
Développement de (3,1)
• (3, 1) est retiré de la Frontière et ajouté aux Visitées.
• Voisins accessibles :
• (3, 0) déjà visité,
• (2, 1) est un mur,
• (3, 2) nouveau nœud.
Conclusion
Le coût minimal (nombre de mouvements) est 6, égal à h(S).
1 2 3
4 5 6
7 8 □
• Actions : déplacer la case vide (□)
• Test de but : puzzle résolu
• Coût : 1 mouvement
1 3 6
5 □ 2
4 7 8
à l’état final ?
MAJDOUB Soufyane (UPF) Systèmes intelligents 16 décembre 2025 50 / 57
Rappel : Algorithme A*
Coût g, heuristique h et fonction f
Heuristique utilisée
Heuristique admissible : distance de Manhattan
8
X
h(n) = |xt − xt∗ | + |yt − yt∗ |
t=1
où (xt , yt ) = position actuelle, (xt∗ , yt∗ ) = position dans l’état but.
1 3 6
S0 = 5 □ 2
4 7 8
Calcul des distances de Manhattan (tuile par tuile) :
h(S0 ) = 0 + 2 + 1 + 1 + 1 + 1 + 1 + 1 = 8
g(S0 ) = 0 f (S0 ) = g + h = 8
Interprétation
L’état initial est déjà “à 8 mouvements” du but selon l’heuristique. A* va
chercher à réduire h tout en augmentant progressivement g.
1 3 6
S1 = 5 2 □
4 7 8
g = 1, h = 7, f =8
Étape 2 : □ monte (échange avec 6)
1 3 □
S2 = 5 2 6
4 7 8
g = 2, h = 6, f =8
Observation
À chaque étape : h baisse d’une unité et g augmente d’une unité. Ainsi, f
reste constant et minimal.
MAJDOUB Soufyane (UPF) Systèmes intelligents 16 décembre 2025 53 / 57
Déroulement d’A* : étapes intermédiaires
A* continue sur le chemin optimal
Étape 3 : □ va à gauche
1 □ 3
S3 = 5 2 6
4 7 8
g = 3, h = 5, f = 8
Étape 4 : □ descend
1 2 3
S4 = 5 □ 6
4 7 8
g = 4, h = 4, f = 8
Point clé
La première ligne est maintenant correcte : (1, 2, 3) A* se rapproche
progressivement du but tout en maintenant f minimal.
Étape 5 : □ va à gauche
1 2 3
S5 = □ 5 6
4 7 8
Étape 6 : □ descend
1 2 3
S6 = 4 5 6
□ 7 8
Étape 7 : □ à droite
1 2 3
S7 = 4 5 6
7 □ 8
Étape 8 : □ à droite (état final)
1 2 3
S8 = 4 5 6
7 8 □
g = 8, h = 0, f =8
MAJDOUB Soufyane (UPF) Systèmes intelligents 16 décembre 2025 55 / 57
Récapitulatif des valeurs (g, h, f)
Vérification de l’optimalité
État g h f
S0 0 8 8
S1 1 7 8
S2 2 6 8
S3 3 5 8
S4 4 4 8
S5 5 3 8
S6 6 2 8
S7 7 1 8
S8 8 0 8
Conclusion
L’algorithme A* atteint l’état but en 8 déplacements. Ce chemin est
garanti optimal car l’heuristique de Manhattan est admissible.