0% ont trouvé ce document utile (0 vote)
44 vues42 pages

Résolution de Problèmes en IA

Transféré par

medinialex9
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
44 vues42 pages

Résolution de Problèmes en IA

Transféré par

medinialex9
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduction à l’Intelligence

Artificielle
(L2 Portail Sciences et Technologies)

Andrea G. B. Tettamanzi
Laboratoire I3S – Équipe SPARKS
[Link]@[Link]
Séance 2
Résolution de problèmes

Andrea G. B. Tettamanzi, 2022


Plan pour cette séance

Résolution par recherche

Espace de recherche

Algorithmes de recherche sur les graphes

Stratégies de recherche aveugles

Stratégies de recherche heuristiques

Algorithme A*

Andrea G. B. Tettamanzi, 2022 3


Problème

État initial

Actions disponibles à chaque état

Modèle de transition : état × action → état
– Espace des états (un graphe)

Test objectif (l’état est-il une solution ?)

Coût d’un pas (et d’une solution)

Andrea G. B. Tettamanzi, 2022 4


Jeu de taquin
1 2 3
4 5 6
7 8

1 2 3
4 5 6
7 8

1 2 3
4 5
7 8 6

Andrea G. B. Tettamanzi, 2022 5


Arbre

Structure de données récursive

Un arbre est formé par
– Un nœud (dit « racine »), contenant

Des données ou une référence à des données

Des références (ou pointeurs) à des (sous-)arbres
– Zéro ou plus sous-arbres

Un nœud n'ayant pas des sous-arbres est dit « feuille »

Les autres nœuds sont dits « nœuds internes »

Andrea G. B. Tettamanzi, 2022 6


Arbre

Andrea G. B. Tettamanzi, 2022 7


Arbre

La racine r de l'arbre est l'unique nœud ne possédant pas de parent

Tout nœud x qui n’est pas la racine a
– un unique parent, noté [Link] ou parent(x) (appelé « père »
parfois)
– 0 ou plusieurs fils ; [Link] ou fils(x) désigne l’ensemble des fils de x

Si x et y sont des nœuds tels que x soit sur le chemin de r à y,
– x est un ancêtre de y
– y est un descendant de x

Les feuilles n'ont pas de fils

Andrea G. B. Tettamanzi, 2022 8


Arbre

1 est la racine
9,10,6,3,11,12,8 sont les feuilles
11 est un descendant de 4, mais pas de 2
2 est un ancêtre de 10

Andrea G. B. Tettamanzi, 2022 9


Arbre

Quand il n’y a pas d’ambiguïté, on regarde les arêtes d’un
arbre comme étant orientées de la racine vers les feuilles


La profondeur d’un nœud (depth) est définie récursivement
par
– prof(v) = 0, si v est la racine
– prof(v) = prof(parent(v)) + 1


La hauteur d’un nœud (height) est la plus grande profondeur
d’une feuille du sous-arbre dont il est la racine

Andrea G. B. Tettamanzi, 2022 10


Arbre

1 est la racine
2,3,4 sont à la profondeur 1
5,6,7,8 à la profondeur 2
La hauteur de 2 est 2, celle de 9 est 0, celle de 3 est 0, celle de 1 est 3

Andrea G. B. Tettamanzi, 2022 11


Graphe orienté


Un Graphe Orienté G = (X, U) est déterminé par la donnée :
– d’un ensemble de sommets ou nœuds X
– d’un ensemble ordonné U de couples de sommets appelés
arcs.

Si u = (i, j) est un arc de G, alors
– i est l’extrémité initiale de u
– j est l’extrémité terminale de u.


Les arcs ont un sens (« orientés »).
– L’arc u = (i, j) va de i vers j.


Ils peuvent être munis d’un coût, d’une capacité etc. (arcs
étiquetés)

Andrea G. B. Tettamanzi, 2022 12


Graphe

Andrea G. B. Tettamanzi, 2022 13


Graphe non orienté


Un Graphe Non Orienté G = (X, U) est
déterminé par la donnée :
– d’un ensemble de sommets ou nœuds X
– d’un ensemble de paires de sommets
appelées « arêtes ».

Les arêtes ne sont pas orientées

Andrea G. B. Tettamanzi, 2022 14


Graphe non orienté

Andrea G. B. Tettamanzi, 2022 15


Chemins et circuits
● Chemin de longueur q : séquence de q arcs {u1, u2,
…, uq} telle que
– u1 = (i0, i1)
– u2 = (i1, i2)
– uq = (iq – 1, iq)


Chemin : tous les arcs orientés dans le même sens

Circuit : chemin dont les extrémités coïncident

Andrea G. B. Tettamanzi, 2022 16


Chaînes et cycles

Chaîne de longueur q : séquence de q arêtes
{u1, u2, …, uq} telle que
– u1 = (i0, i1)
– u2 = (i1, i2)
– uq = (iq – 1, iq)


Cycle : chaîne dont les extrémités coïncident

Andrea G. B. Tettamanzi, 2022 17


Jeu de taquin 4 1 2
7 3
8 5 6
4 2
7 1 3
8 5 6

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

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

7 7
Pour chaque chiffre au centre,
3 6 7 4 1
2 5 8 8 5 2
1 4 7 6 3
cycles distincts de 64 nœuds
7 7

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

Andrea G. B. Tettamanzi, 2022 18


1 2 3
4 5
7 8 6
Jeu de taquin
1 5 2
4 3
1 2 3 1 2 3 7 8 6 « ponts » entre
1 2
4 5 6
7 8
4 5
7 8 6 4 5 3 quatre cycles
7 8 6

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

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

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

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

Andrea G. B. Tettamanzi, 2022 19


Jeu de taquin

1
2368754

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

8
7541236

Andrea G. B. Tettamanzi, 2022 20


Arbres comme graphes

Un arbre est un graphe non orienté connexe et
sans cycle


Un graphe non orienté G ayant n sommets est
un arbre si et seulement si il vérifie l’une des
deux propriétés
– G est connexe et possède n – 1 arêtes
– G n’a pas de cycle et a n – 1 arêtes

Andrea G. B. Tettamanzi, 2022 21


Algorithme Général
Fonction RECHERCHE(problème), renvoie « échec » ou une solution
Front ← { état_initial }
Exploré ← { }
Répéter :
Si Front est vide, renvoyer « échec »
Choisir (et retirer) un nœud du front
Si le nœud contient un état final, renvoyer la solution correspondante
Ajouter le nœud à l’ensemble Exploré
Développer le nœud
Pour chacun de ses successeurs :
Si successeur ni dans Front ni dans Exploré :
Ajouter successeur au Front

Andrea G. B. Tettamanzi, 2022 22


Stratégies de recherche
« aveugles »

Aucune information sur la structure du problème

On sait seulement tester si un état est final et générer un
nouveau état en appliquant une action

Les stratégies ne diffèrent que par l’ordre par lequel les
nœuds sont développés
– Exploration en largeur d’abord
– Exploration à coût uniforme
– Exploration en profondeur d’abord
– Exploration en profondeur limitée
– Exploration par approfondissement itératif

Andrea G. B. Tettamanzi, 2022 23


Exploration en largeur d’abord
Fonction LARGEUR(problème), renvoie « échec » ou une solution
Front ← file(état_initial)
Exploré ← { }
Répéter :
Si Front est vide, renvoyer « échec »
Défiler le premier nœud du front
Si le nœud contient un état final, renvoyer la solution correspondante
Ajouter le nœud à l’ensemble Exploré
Développer le nœud
Pour chacun de ses successeurs :
Si successeur ni dans Front ni dans Exploré :
Enfiler successeur dans Front

Andrea G. B. Tettamanzi, 2022 24


Exploration en largeur d’abord

a b c d e

f g h i j

k l m n o

p q r s t

u v w x y

Front = [ m ]
Exploré = { }

Andrea G. B. Tettamanzi, 2022 25


Exploration en largeur d’abord

a b c d e

f g h i j

k l m n o

p q r s t

u v w x y

Front = [ h, n, r, l ]
Exploré = { m }

Andrea G. B. Tettamanzi, 2022 26


Exploration en largeur d’abord

a b c d e

f g h i j

k l m n o

p q r s t

u v w x y

Front = [ n, r, l, g, c, i ]
Exploré = { h, m }

Andrea G. B. Tettamanzi, 2022 27


Exploration en largeur d’abord

a b c d e

f g h i j

k l m n o

p q r s t

u v w x y

Front = [ r, l, g, c, i , o, s]
Exploré = { h, m, n }

Andrea G. B. Tettamanzi, 2022 28


Exploration en profondeur d’abord
Fonction PROFONDEUR(problème), renvoie « échec » ou une solution
Front ← pile(état_initial)
Exploré ← { }
Répéter :
Si Front est vide, renvoyer « échec »
Dépiler le nœud au sommet de la pile Front
Si le nœud contient un état final, renvoyer la solution correspondante
Ajouter le nœud à l’ensemble Exploré
Développer le nœud
Pour chacun de ses successeurs :
Si successeur ni dans Front ni dans Exploré :
Empiler successeur sur la pile Front

Andrea G. B. Tettamanzi, 2022 29


1)Exploration en profondeur d’abord

a b c d e

f g h i j

k l m n o

p q r s t

u v w x y

Front = [ m ]
Exploré = { }

Andrea G. B. Tettamanzi, 2022 30


1)Exploration en profondeur d’abord

a b c d e

f g h i j

k l m n o

p q r s t

u v w x y

Front = [ h, n, r, l ]
Exploré = { m }

Andrea G. B. Tettamanzi, 2022 31


1)Exploration en profondeur d’abord

a b c d e

f g h i j

k l m n o

p q r s t

u v w x y

Front = [ g, c, i, n, r, l ]
Exploré = { h, m }

Andrea G. B. Tettamanzi, 2022 32


1)Exploration en profondeur d’abord

a b c d e

f g h i j

k l m n o

p q r s t

u v w x y

Front = [ f, b, c, i, n, r, l ]
Exploré = { g, h, m }

Andrea G. B. Tettamanzi, 2022 33


1)Exploration en profondeur d’abord

a b c d e

f g h i j

k l m n o

p q r s t

u v w x y

Front = [ a, b, c, i, n, r, l ]
Exploré = { f, g, h, m }

Andrea G. B. Tettamanzi, 2022 34


1)Exploration en profondeur d’abord

a b c d e

f g h i j

k l m n o

p q r s t

u v w x y

Front = [ b, c, i, n, r, l ]
Exploré = { a, f, g, h, m }

Andrea G. B. Tettamanzi, 2022 35


Exploration à coût uniforme
Fonction COUT_UNIFORME(problème), renvoie « échec » ou une solution
Front ← { état_initial }
Exploré ← { }
Répéter :
Si Front est vide, renvoyer « échec »
Choisir (et retirer) de Front le nœud n tel que coût(n) est le moindre
Si n contient un état final, renvoyer la solution correspondante
Ajouter le nœud à l’ensemble Exploré
Développer le nœud
Pour chacun de ses successeurs :
Si successeur ni dans Front ni dans Exploré :
Ajouter successeur au Front
Si successeur est déjà dans Front mais avec un coût supérieur
Mettre à jour coût (et chemin) du successeur

Andrea G. B. Tettamanzi, 2022 36


Recherche heuristique

Idée : choisir le nœud à développer suivant une
fonction d’évaluation, f(n)

Coût du chemin jusqu’à n : g(n)

Estimation du coût du chemin le moins cher
pour aller de n à l’objectif : h(n)

f(n) = g(n) + h(n)

Andrea G. B. Tettamanzi, 2022 37


Algorithme A*
Fonction A*(problème), renvoie « échec » ou une solution
Front ← { état_initial }
Exploré ← { }
Répéter :
Si Front est vide, renvoyer « échec »
Choisir (et retirer) de Front le nœud n tel que f(n) est le moindre
Si n contient un état final, renvoyer la solution correspondante
Ajouter le nœud à l’ensemble Exploré
Développer le nœud
Pour chacun de ses successeurs :
Si successeur ni dans Front ni dans Exploré :
Ajouter successeur au Front
Si successeur est déjà dans Front mais avec un coût supérieur
Remplacer successeur, avec son coût actuel

Andrea G. B. Tettamanzi, 2022 38


Optimalité de A*

Une heuristique admissible ne surestime jamais
le coût pour atteindre l’objectif

Une heuristique est cohérente (ou monotone)
si, pour tout node n et successeur n’ obtenu par
l’action a,
h(n) ≤ c(n, a, n’) + h(n’)

Toute heuristique cohérente est aussi admissible

Si h est cohérente, A* est optimal

Andrea G. B. Tettamanzi, 2022 39


A* et Jeu de taquin

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

Deux heuristiques :

1) Distance de Hamming : nombre de tuiles hors place

2) Distance de Manhattan : somme des distances de l’objectif pour chaque tuile

Tuile : 1 2 3 4 5 6 7 8 Total
Distance : 3 1 2 3 1 3 1 2 16

Andrea G. B. Tettamanzi, 2022 40


1 2 3

A* et Jeu de taquin 4 5 6
7 8
2 8 4
7 3 5
6 1

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

2 4
7 8 5
6 3 1

Andrea G. B. Tettamanzi, 2022 41


Andrea G. B. Tettamanzi, 2022 42

Vous aimerez peut-être aussi