Chapitre 3 - Les Algorithmes de Recherche

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 54

Chapitre 3 : Les algorithmes de

recherche
Année 2020-2021

Lien: https://sites.google.com/view/depinfo-ia/

L. LAZIB et S. SADI
Recherche Recherche
Introduction Conclusion
systématique locale

Formulation et Recherche Recherche


résolution de heuristique adversiale
problèmes

2
Introduction Les algorithmes de recherche sont l'un des
domaines les plus importants en IA.

Ils s'appuient sur la formulation des


problèmes d'IA comme des problèmes de
recherche.

Une formulation alternative en IA emploie la


planification (qui n'est pas évoquée dans ce
cours).

Un problème de recherche est typiquement


défini à l'aide d'un espace de recherche, d'un
état initial, d'actions et d'un but.

Ils sont utilisés dans divers domaines. Par


exemple, dans les jeux (d'échecs, go,
puzzles, etc.) ou encore pour apporter des
solutions (pas forcément optimales) à divers
problèmes NP-complets (le problème du
voyageur de commerce, ingénierie,
recherche opérationnelle, bio-informatique,
mathématiques, etc.).
3
Introduction: Définitions et terminologies
➢ Un algorithme de recherche est un algorithme qui résout un problème
de recherche.
➢ Un problème de recherche est un problème algorithmique pouvant être
résolu suite à une recherche.
➢ Une recherche est un ensemble d'étapes menées pour résoudre un
problème. Elle fait intervenir les éléments suivants :
○ Un état initial : l'état à partir duquel la recherche commence.
○ Un espace de recherche : un ensemble d'états possibles que le système
peut avoir.
○ Une fonction de but : une fonction qui permet de tester si l'état actuel
atteint par la recherche est un état objectif (ou le but recherché).
○ Une action (ou plusieurs) : une opération qui permet de passer d'un état à
un autre durant la recherche.

○ Une fonction successeur : qui indique les états successeurs possibles en


partant d'un état. 4
Introduction: Définitions et terminologies (suite)

➢ Solution : une séquence d'actions qui permet d'aller de l'état


initial vers l'état objectif (ou le but recherché).
➢ Fonction coût : une fonction qui attribue un coût à chaque
action ou séquence d'actions.
➢ Solution optimale : une solution qui a le coût le plus faible parmi
les solutions existantes.

5
Introduction: Exemple des jeux d'échecs

➢ L'état initial correspond à la position initiale de toutes les pièces sur


l'échiquier.
➢ L'espace de recherche correspond à toutes les positions possibles, en
partant de la position initiale ou de toute autre position intermédiaire.
➢ La fonction de but est la fonction qui teste si la machine gagne (fait un
échec et mat).
➢ Les actions disponibles correspondent à tous les coups légaux possibles
pour chaque pièce. Chaque action transforme l'état courant (ou position
courante) en un autre état (respectivement en une autre position).
➢ Une solution est une suite de coups qui permettent de gagner la partie.
➢ Une fonction coût possible est le nombre de coups pour gagner la partie.
➢ Une solution optimale correspond à une suite de coups minimale pour
gagner la partie (par exemple : nous préférons gagner la partie en 2 coups
qu'en 10 coups).
6
Introduction: Propriétés

➢ Complétude : un algorithme de recherche est dit complet s'il


garantit de renvoyer une solution si elle existe pour n'importe quelle
entrée.
➢ Optimalité : un algorithme de recherche est dit optimal si les
solutions qu'il trouve sont toujours optimales.
➢ Complexité temporelle : la complexité temporelle est une mesure
du temps nécessaire à un algorithme pour accomplir sa tâche.
➢ Complexité spatiale : c'est l'espace mémoire maximal requis à
n'importe quel moment durant la recherche.

7
Formulation Les problèmes d'IA peuvent souvent
être décrits comme des problèmes
et résolution de recherche.
de problèmes Il existe alors des formalismes pour
représenter ces problèmes ainsi
que des méthodes générales qui
permettent de les résoudre.
Cette section présente certains
concepts importants relatifs à la
formulation de problèmes ainsi qu'à
leur résolution.

8
Form. et rés. de problèmes : Agents

➢ Une des définitions de l'IA (vue dans le 1èr chapitre) présente sa


problématique principale qui est celle de concevoir un (ou des)
agent(s) rationnel(s) qui vont permettre de résoudre des
problèmes.
➢ Un agent rationnel peut être n'importe quel personne, machine
ou logiciel qui prend des décisions et réalise des actions pour
obtenir le meilleur résultat étant données certains buts (ou
objectifs).
➢ Un agent rationnel existe dans un environnement. Par exemple,
si l'agent est créé pour jouer aux échecs, alors son
environnement est l'échiquier.

9
Form. et rés. de problèmes: Agents - types

➢ Agent réflexe simple : sélectionne une action en se basant uniquement


sur sa perception actuelle de l'environnement et ignore l'historique des
actions ou les conséquences futurs des actions à entreprendre
(exemple : un thermostat).

➢ Agent réflexe basé sur des modèles : garde une trace limitée de la
perception passée de son environnement (dans un modèle). Ainsi, le
choix de l'action à entreprendre se base sur la perception actuelle et
certaines informations sur les perceptions passées.

➢ Agent basé sur des objectifs : contient une liste d'objectifs (ou buts) à
atteindre. L'action à entreprendre est choisie pour se rapprocher du but
choisi. L'agent doit notamment pouvoir prédire les conséquences d'une
action pour faire ce choix. Contrairement à un agent réflexe, cet agent
va envisager plusieurs actions avant de faire un choix (en utilisant des
algorithmes de recherche et de planification).

10
Form. et rés. de problèmes : Agents - types (suite)

➢ Agent basé sur des préférences : fixer des objectifs ne suffit pas
toujours. En effet, il peut exister plusieurs solutions mais, pour une
raison ou une autre, une de ces solutions est préférable. Un agent
de ce type utilise une fonction pour évaluer le coût de chaque
action menant à l'objectif pour choisir la meilleure.
➢ Agent d'apprentissage : apprend depuis les expériences passées et
peut faire évoluer son processus de prise de décision (pour le choix
des actions futurs) en conséquence. Il utilise l'apprentissage
automatique.

11
Form. et rés. de problèmes : Formulation

➢ Comme décrit précédemment, un problème de recherche est défini


avec un espace de recherche, des actions, un état initial et une
fonction de but.
➢ Ainsi, le problème peut être décrit avec un graphe orienté. Où:
○ chaque nœud décrit un état possible
○ et les arcs décrivent les actions possibles à partir d'un état
particulier.
➢ Tout chemin entre l'état initial et le but est une solution au
problème.

12
Form. et rés. de problèmes : Formulation (exemple)

Nous souhaitons sortir d'un labyrinthe, avec une contrainte : les déplacements sont
uniquement possibles dans les directions indiquées (en orange).

Formulation du problème en graphe : (état initial = S, but = G)

S B E

C D G

13
Form. et rés. de problèmes : Formulation (exemple)

Il est possible de représenter un problème sous forme d'arbre. Dans ce cas, les états
peuvent être dupliqués.
La racine de l'arbre est l'état initial. Les enfants d'un nœud sont les états accessibles
à partir de celui-ci.
L'arbre correspondant à l'exemple précédent est le suivant :

C B

D C E

D G

14
Form. et rés. de problèmes : Problématique

➢ Une problématique principale lorsqu'on modélise les problèmes de


recherche comme décrit précédemment est relative à la taille de
l'espace de recherche.

➢ Par exemple, pour ce qui est des jeux d'échecs, le mathématicien


Victor Allis estime qu'il existe jusqu'à 5*1052 positions (et donc états)
possibles. Pour comparaison, le nombre d'atomes sur la planète terre
est de l'ordre de 1050.

➢ Il n'est donc pas toujours (voire, souvent) pas possible de représenter


l'espace de recherche en entier.

➢ Ainsi, les agents rationnels utilisent d'autres stratégies pour formuler


les problèmes d'IA que celles consistant à représenter l'espace de
recherche au complet. En particulier, en utilisant des graphes de
recherche et des arbres de recherche.

15
Form. et rés. de problèmes : Graphes et arbres de recherche

➢ Un graphe (respectivement arbre) de recherche est un graphe


(respectivement arbre) correspondant à l'espace de recherche avec les
différences suivantes :

○ Un espace de recherche est complet et contient tous les états


possibles et toutes les relations entres ces états. Il est statique.

○ Un graphe (respectivement arbre) de recherche est un graphe


(respectivement arbre) qui contient un certain nombre d'états et
certaines relations (arcs) entre ces états. Il s'agit le plus souvent
des états qui ont déjà été envisagés (ou évalués) par l'agent. Il est
dynamique.

16
Form. et rés. de problèmes: Graphes et arbres de recherche (suite)

➢ Ainsi, un graphe (ou arbre) de recherche consomme moins de mémoire


mais ne contient pas tous les états possibles immédiatement.

➢ Lorsqu'un état (ou nœud) est examiné, celui-ci est "développé".


○ C'est à dire, toutes les actions possibles pour ce nœud ainsi que ses
nœuds enfants (qui font suite à ces actions) sont générés et ajoutés au
graphe (ou arbre).

○ Exemple : dans les jeux d'échecs, nous ne calculons pas les suites
possibles pour une position immédiatement. Nous le faisons uniquement
lorsqu’on commence l’analyse de cette position.

○ Exemple 2 : pour le problème du voyageur du commerce, nous ne


calculons pas les distances (et chemins possibles) entre une ville et les
autres, jusqu'à ce que le voyageur se trouve sur cette ville.

17
Form. et rés. de problèmes: Graphes et arbres de recherche (suite)

➢ Ainsi, résoudre les problèmes de recherche dans un graphe de


recherche n'est plus aussi simple, car :
○ nous n'avons pas forcément connaissance de tous les états
immédiatement pour trouver un chemin entre l'état initial et le but ;
○ développer un nœud est souvent une opération coûteuse.
➢ La suite de ce chapitre aborde cette problématique, qui peut se faire de
deux façons principales :
○ Sans aucune connaissance à priori sur l'emplacement du but ou de
la distance entre l'état actuel et le but (recherche systématique ou
non-informée).
○ Avec certaines connaissances sur le but ou sur la distance entre
l'état actuel et le but (recherche heuristique ou informée).

➢ Mais avant cela, la diapositive suivante présente l’algorithme de


recherche général dans un arbre de recherche.

18
Form. et rés. de problèmes: Algorithme général de recherche

Fonction chercherArbre(arbre): Solution | FAUX;


VAR candidat: noeud;
nouveauxNoeuds: liste de noeuds;
Debut
TANTQUE VRAI FAIRE
Si (pas de noeuds à développer) ALORS retourner FAUX; FinSi;
candidat := stratégie(arbre);
Si (contientBut(candidat)) ALORS
retourner chemin(arbre, candidat);
Sinon
nouveauxNoeuds := développer(candidat);
// ajouter les nouveaux noeuds comme des noeuds fils de candidat
ajouter(candidat, nouveauxNoeuds);
FinSi;
FinTantQue;
Fin.
19
Form. et rés. de problèmes: Graphes et arbres de recherche (suite)

➢ Dans l’algorithme précédent :


○ La fonction stratégie(arbre) sélectionne un nœud à développer
parmi toutes les feuilles de l’arbre (qui ne sont pas encore
développées) en utilisant une stratégie particulière (par exemple :
séquentiellement ou aléatoirement s’il s’agit d’une recherche
non-informée sinon avec une heuristique).
○ La fonction contientBut(candidat) retourne VRAI si le nœud
candidat en cours contient le but recherché.
○ La fonction chemin(arbre, candidat) retourne le chemin allant de
la racine de l’arbre vers le nœud candidat.
○ La fonction développer(candidat) développe le nœud candidat en
cours et retourne les nouveaux nœuds à ajouter dans l’arbre.

➢ L’algorithme général de recherche dans un graphe est similaire à


l’algorithme de recherche dans un arbre, avec quelques petites
subtilités d’implémentation. Il est laissé à la réflexion de l’étudiant !
20
Recherche Lors d’une recherche systématique,
aucune information n’indique à priori quel
systématique nœud mène le plus rapidement à la
solution.

Dès lors, c’est une recherche à l’aveugle


où il faut parcourir et développer les
nœuds de l’arbre ou du graphe de
recherche jusqu’à atteindre le but.

Nous nous intéressons ici plus à la


recherche dans un arbre. Pour une
recherche dans un graphe de recherche,
celui-ci doit d’abord être converti en arbre.

Nous citons les exemples suivants :


● le parcours en largeur, en anglais :
Breadth-First Search (BFS) ;
● le parcours en profondeur, en anglais
Depth-First Search (DFS).
21
Recherche systématique : Parcours en largeur

La stratégie employée consiste à développer en premier les nœuds qui


se trouvent à la même profondeur par rapport à la racine dans un arbre
de recherche.

2 3 4

5 6 7 8

9 10 11 12

* Les nœuds soulignés ne peuvent pas être développés


22
Recherche systématique : Parcours en largeur (suite)

Fonction BFS(arbre): Solution | FAUX;


VAR restants: liste de noeuds; candidat: noeud;
Debut
restants := []; restants.ajouter(arbre.racine);
TANTQUE NON estVide(restants) FAIRE
// enlever et retourner le premier noeud restant
candidat := restants.enleverPremier();
nouveauxNoeuds := développer(candidat);
Si (contientBut(candidat)) ALORS
retourner chemin(arbre, candidat);
Sinon
restants.ajouterÀLaFin(nouveauxNoeuds);
FinSi;
FinTantQue;
retourner FAUX;
Fin.
23
Recherche systématique : Parcours en profondeur

La stratégie employée consiste à développer en premier le nœud en


cours, puis ses enfants avant de développer ses nœuds voisins.

2 7 8

3 6 9 12

4 5 10 11

* Les nœuds soulignés ne peuvent pas être développés


24
Recherche systématique : Parcours en profondeur (suite)

Fonction DFS(arbre): Solution | FAUX;


VAR restants: liste de noeuds; candidat: noeud;
Debut
restants := []; restants.ajouter(arbre.racine);
TANTQUE NON estVide(restants) FAIRE
// enlever et retourner le premier noeud restant
candidat := restants.enleverPremier();
nouveauxNoeuds := développer(candidat);
Si (contientBut(candidat)) ALORS
retourner chemin(arbre, candidat);
Sinon
restants.ajouterAuDébut(nouveauxNoeuds);
FinSi;
FinTantQue;
retourner FAUX;
Fin.
25
Recherche systématique : Comparaison entre BFS et DFS

➢ Complétude :
○ BFS est complet (s’il existe une solution, elle sera trouvée)
○ par contre DFS ne l’est pas. En effet, s’il existe un cycle dans l’espace de
recherche alors certains nœuds peuvent être développés encore et encore
et l’algorithme ne s'arrêtera pas.

➢ Optimalité :
○ DFS n’est pas optimal car il retourne toujours la première solution qui est
la plus à gauche (sans tenir compte d’autres facteurs, comme la longueur
du chemin ou le coût de chaque nœud).
○ BFS est optimal si le seul facteur de coût est la longueur du chemin. Il ne
l’est souvent pas si d’autres facteurs d’optimalité sont pris en compte.

➢ Complexité temporelle : les deux algorithmes ont une complexité au


pire des cas de O(bm), ou b est le nombre de nœuds par profondeur et
m la profondeur de l’arbre.

26
Recherche systématique : Comparaison entre BFS et DFS (suite)

➢ Complexité spatiale :
○ BFS maintient tous les nœuds de la profondeur actuelle en mémoire. Ainsi,
au pire des cas, BFS maintient bm nœuds, ou b est le nombre de nœuds
par profondeur et m la profondeur de l’arbre.
○ DFS maintient au plus b * m nœuds en mémoire, b étant le nombre de
nœuds par profondeur et m la profondeur de l’arbre.

DFS BFS

Crédit images : CS 188, EECS, university of California, Berkeley


27
Recherche systématique : Autres algorithmes

Il existe d’autres algorithmes pour la recherche systématique. Quelques


exemples :
➢ Recherche en profondeur limitée, en anglais depth-limited search :
○ Utilise DFS jusqu’à une profondeur bien fixée. Risque de ne pas
trouver de solution si le but est plus profond que la limite fixée.
➢ Recherche en profondeur itérative, en anglais iterative deepening
depth-first search (IDS ou IDFS) :
○ Similaire à DFS, sauf que, à chaque fois, une profondeur maximale
est fixée. De plus, si le but n’est pas trouvé, alors la profondeur
maximale est incrémentée.
○ Se comporte comme DFS (tout aussi optimal niveau mémoire),
mais est, comme BFS, aussi complet et optimal (si le seul critère
d’optimalité est la longueur de la solution).

28
Recherche systématique : Autres algorithmes (suite)

➢ Recherche avec coût uniforme, en anglais uniform cost search (UCS) :


○ Sélectionne toujours le nœud avec le coût le plus faible pour son
développement.
○ Exemple : s’il l’arbre de recherche correspond aux positions d’une
partie de jeux d’échecs, alors le nœud correspondant à la position
la moins compliquée (qui a le moins de coups possibles) est
développé en premier.

29
Recherche La recherche heuristique (ou informée)
est un type de recherche où l'on dispose
heuristique d'indications quant au chemin menant
vers la solution.

C'est à dire, à un moment donné durant


la recherche, si nous avons le choix
entre plusieurs nœuds à développer,
alors il existe une stratégie heuristique
qui donne une indication quant au
nœud qui mène potentiellement le plus
rapidement à la solution.

L'algorithme général de recherche est


déjà donné pour ce type de recherche
(voir la diapositive 19). Seule la
stratégie de recherche (ou l'heuristique)
reste à définir.

30
Recherche heuristique : Compromis

➢ Une recherche heuristique permet de trouver souvent une solution


à un problème plus rapidement qu'une recherche systématique
(meilleure complexité temporelle et spatiale). Cependant, il faut
faire des compromis.

➢ Optimalité : une recherche heuristique ne garantit pas que la


solution trouvée soit optimale. Cela n'est pas forcément
problématique si l'on cherche uniquement à trouver une solution.
On se réfère alors au concept suivant pour juger de la qualité de la
solution :
○ L'exactitude et la précision : Définissent à quel point la solution
fournie s'approche de la solution optimale.

31
Recherche heuristique : Compromis (suite)

➢ Complétude : une recherche heuristique ne garantit pas toujours


qu'une solution soit trouvée à un problème.
➢ Complexités temporelle et spatiale : bien que souvent meilleures en
comparaison avec une recherche systématique, il reste souvent
difficile de choisir entre plusieurs heuristiques pour un même
problème. En effet, celles-ci peuvent afficher des complexités
différentes. De plus, le gain en performances peut être très (ou
trop) faible dans certains cas, et une recherche systématique est
préférable.

32
Recherche heuristique : recherche gloutonne

➢ La recherche gloutonne est une stratégie qui réalise le choix le plus


optimal à chaque étape (localement), en espérant ainsi atteindre une
solution optimale globale.
○ En d'autres termes, c'est une stratégie qui sélectionne toujours le nœud
avec la plus faible valeur heuristique pour le développement.
○ Sa fonction d’évaluation f(n)= h(n) , h étant la valeur de l’heuristique pour
le noeud n.

➢ Exemple : Le problème du voyageur de commerce


○ Étant donné une liste de villes, et des distances entre toutes les paires de
villes, déterminer un plus court circuit qui visite chaque ville une et une
seule fois (puis retourne à la ville initiale). Il s'agit d'un problème
NP-Complet.
○ Heuristique : proposée par Jon Bentley*
■ Chaque ville est représentée par un nœud.
■ À chaque étape du voyage, visiter la ville non visitée la plus proche.
* Informaticien Américain célèbre pour ses travaux sur les algorithmes heuristiques. 33
Recherche heuristique : recherche gloutonne (suite)

Ville 1 Ville 2 Distance


C A B 10
D
A A C 2
B A D 13
A E 5
E
B C 3
Recherche gloutonne : (état initial A) B D 2
1. A B E 5
2. A -> C (distance A -> C = 2) C D 11
3. A -> C -> B (distance C -> B = 3) C E 23
4. A -> C -> B -> D (distance B -> D = 2) D E 24
5. A -> C -> B -> D -> E (distance D -> E = 24)
Solution trouvée : A -> C -> B -> D -> E -> A (longueur = 36)
Il existe 23 autres solutions (non trouvées). Parmi elles :
● A -> C -> D -> B -> E -> A (longueur = 25) (optimale)
● A -> E -> B -> D -> C -> A (longueur = 25) (autre solution optimale)
● A -> E -> D -> B -> C -> A (longueur = 36)
La solution trouvée est la 3ème meilleure solution (ex æquo avec la solution précédente).
34
Recherche heuristique : Autres stratégies heuristiques

➢ La recherche A* : elle étend la recherche gloutonne pour sélectionner


un nœud à développer selon qu'il possède un coût total minimal.
○ Par coût total, on entend le coût depuis le nœud initial (connu) g(n)
additionné au coût estimé par l'heuristique jusqu'au nœud final (but) h(n)
(et non pas uniquement jusqu'au prochain nœud).
○ Sa fonction d’évaluation f(n)= g(n) + h(n)

➢ La recherche D* : similaire à A* mais est implémentée de telle sorte à


ce que si le coût de développement d'un nœud change entre deux
recherches successives, alors l’agent met à jour cette information. De
cette manière, la prochaine recherche similaire sera plus performante.
○ Sa version optimisée (et plus utilisée) est appelée D* Lite.
○ Elle est souvent utilisée (dans sa version D* Lite) pour la navigation de
robots mobiles et de véhicules autonomes (par exemple, dans les robots
Spirit et Opportunity envoyés sur Mars).

35
Recherche La recherche locale est une recherche
heuristique qui cherche d'autres
locale solutions (possiblement optimales)
en se basant sur une solution initiale
(pas forcément optimale).
Pour ce faire, ces solutions sont
recherchées dans le voisinage de la
solution initiale.
Ainsi, la recherche locale passe de
solution en solution dans l'espace des
solutions possibles (l'espace de
recherche) en appliquant des
changements locaux, jusqu'à ce
qu'une solution jugée optimale soit
trouvée ou qu'une limite de temps soit
écoulée.

36
Recherche Locale : Hill-Climbing

➢ Il s'agit d'une méthode de recherche locale, itérative et gloutonne.


➢ Elle prend en paramètre :
○ Une solution initiale ;
○ Une fonction qui génère une solution locale voisine ;
○ Une fonction d’objectif qui permet d'évaluer une solution (pour
déterminer s'il y a une amélioration).
➢ Exemple : Le problème du voyageur de commerce
○ Commencer avec une solution quelconque.
○ Choisir deux villes dans la solution, et intervertir l’ordre de
passage entre ces villes.
○ Calculer le coût de la solution. Si le coût est plus faible, alors ça
devient la nouvelle solution et recommencer. Sinon, choisir une
autre paire de villes (non déjà choisie) et recommencer.
37
Recherche Locale : Hill-Climbing (suite)

Illustration : Le problème du voyageur de commerce Ville 1 Ville 2 Distance


A B 10
1) A -> B -> D -> C -> E -> A (coût = 51) A C 2
2) A -> D -> B -> C -> E -> A (coût = 46) A D 13
A E 5
3) A -> D -> C -> B -> E -> A (coût = 37)
B C 3
4) A -> D -> C -> E -> B -> A (coût = 62) B D 2
○ Mauvais choix. B E 5
○ On revient à : A -> D -> C -> B -> E -> A. C D 11
○ Prochaine paire : (D, C). C E 23
5) A -> C -> D -> B -> E -> A (coût = 25) D E 24
○ Solution optimale !
○ Aucune autre substitution n'améliore la solution.

38
Recherche Locale : Hill-Climbing (suite)

➢ Exemple 2 : Trouver le maximum d’une fonction quelconque f(x)


(nous considérons ici uniquement le cas discret).
○ Commencer avec un x=a quelconque.
○ Incrémenter x, si f(x) s’incrémente aussi alors :
■ Incrémenter x, tant que f(x) s’incrémente aussi.
■ Retourner la dernière valeur de f(x). Fin.
○ Sinon, décrémenter x, si f(x) s’incrémente alors :
■ décrémenter x, tant que f(x) s’incrémente aussi.
■ Retourner la dernière valeur de f(x). Fin.
○ Sinon, retourner f(x) (la valeur initiale a, conduit déjà au
maximum).

39
Recherche Locale : Hill-Climbing (suite)

Illustration de l’exemple 2

f(x) décroît
f(x) croît
f(x) croît

f(x) décroît

f(x)
Maximum global
trouvé avec b

Maximum local
trouvé avec a

a b 40
Recherche Locale : Hill-Climbing (suite)

➢ Remarques :
○ Cette méthode ne trouve pas forcément une solution optimale.
○ Ainsi, dans l’exemple précédent, un maximum local est trouvé,
mais pas forcément le maximum global.
■ Trouver un maximum global est uniquement garanti si la
fonction f(x) est convexe.
○ La solution trouvée dépend souvent de la solution initiale
choisie lors de l’initialisation.

41
Recherche Locale : Autres stratégies (pour aller plus loin)

➢ Le recuit simulé : Il s’agit d’une méta-heuristique* inspirée d'un processus


utilisé en métallurgie. C’est une méthode assez similaire au Hill-Climbing
sauf qu’elle trouve plus souvent une solution optimale (même si la fonction
n’est pas convexe).
➢ Algorithme de recherche en faisceau : est un algorithme de recherche
heuristique, locale et gloutonne qui explore un graphe en développant le
nœud le plus prometteur en ne considérant qu'un ensemble limité de fils de
chaque nœud.
➢ Algorithme génétique : Il s’agit d’une méta-heuristique* inspirée par le
processus de sélection naturelle (la sélection, le croisement, la mutation).
Il appartient à la classe (plus générale) des algorithmes évolutionnaires.

* Une méta-heuristique est une heuristique très générique. C'est-à-dire une


heuristique très générale qui peut être utilisée pour la résolution de problèmes qui
n'ont aucun lien entre eux.
42
Recherche La recherche adversiale est une
recherche heuristique où il y a un
adversiale adversaire (ou ennemi) qui change
l'état du problème à chaque étape
dans une direction qui n’arrange pas
l’agent rationnel.
C’est une recherche qui est souvent
utilisée dans la théorie des jeux
(jeux d’échecs, jeu de go, jeux
vidéos divers, trading financier et
finance en général, stratégies de
guerres, etc.).

43
Recherche adversiale : Principe

➢ Lors d’une recherche adversiale, l’agent peut choisir une action (le
prochain état) à développer. Mais l’action qui s’ensuit est choisie
par l’adversaire. L’action choisie par l’adversaire est :
○ Imprédictible (quoique, on peut supposer qu’il va choisir
l’action qui l’arrange le plus).
○ Est hostile (ou défavorable) à l’agent rationnel.
➢ Par exemple, aux jeux d’échecs, si l’agent prend les blancs, alors
l’agent va essayer de choisir le meilleur coup en tenant compte du
fait que les noirs vont aussi jouer leur meilleur coup.

44
Recherche adversiale : Types

➢ Lors de la recherche adversiale, plus particulièrement pour la


théorie des jeux, on trouve différents types de problèmes (ou de
jeux).
○ Les jeux déterministes (pas de hasard) ou stochastiques (avec
une partie probabiliste : jet de dés, tirage de cartes, etc.) ;
○ Les jeux à somme nulle (ou pas).
■ Un jeu à somme nulle étant un jeu où le gain de l’agent est
directement équivalent à la perte de l’adversaire et vice
versa. Si on évalue le score de l’agent à une valeur de +10
alors le score de l’adversaire sera de -10.
➢ Dans ce qui suit, nous nous intéressons uniquement aux jeux
déterministes à somme nulle.

45
Recherche adversiale : Algorithme minimax

➢ L'algorithme minimax tente de prédire le comportement de


l'adversaire.
○ Il prédit que l'adversaire entreprendra la meilleure action de son
point de vue et donc la pire action de notre point de vue (du
point de vue de l’agent rationnel).
○ Nous sommes MAX : nous essayons de maximiser notre score,
en passant au meilleur état.
○ L'adversaire est MIN : il essaie de minimiser notre score, passer
au pire état pour nous.
➢ Il faut évidemment disposer d’une fonction d’évaluation
(heuristique) qui permet d’évaluer l’état où l’on se trouve. C’est à
dire une fonction qui calcule notre score dans un état particulier.

46
Recherche adversiale : Algorithme minimax (suite)

➢ Fonction d’évaluation : c’est une fonction qui évalue un état sans recherche .
Pour mieux comprendre, prenons le cas des jeux d’échecs.
➢ Chaque pièce prend une valeur : le pion (+1), le fou et le cavalier (+3), la tour
(+5) et la reine (+9).
➢ Une fonction d’évaluation possible (la plus simple) consiste à additionner la
valeur de toutes les pièces de l’agent et soustraire les valeurs des pièces de
l'adversaire.
➢ Exemple : il nous reste (à l’agent) un cavalier et un pion, et il reste à l’adversaire
une reine. Le score calculé sera : S = 3 + 1 - 9 = -5. Le score est négatif donc
l’adversaire est gagnant. Nous cherchons à augmenter ce score pour gagner.
➢ Bien évidemment, si l’un des deux joueurs est en échec et mat, alors le score
sera de plus ou moins l’infini.
➢ Attention ! il s’agit là de la fonction la plus simple. En pratique, plus de
paramètres sont pris en compte (la sécurité du roi, les espaces, la structure des
pions, etc.). Voir ici https://www.chessprogramming.org/Evaluation pour plus de détails.

47
Recherche adversiale : Algorithme minimax (suite)

Le problème de recherche adversiale, se résume dans ce contexte comme suit:


➢ Pour chaque nœud dans l’arbre de recherche, nous avons plusieurs actions
possibles qui mènent chacune à un nouveau nœud. Il faut évaluer le score
de chaque nœud avec une fonction (minimax), et choisir le meilleur nœud
(qui garantit le score le plus haut).
➢ C’est un processus récursif. Par exemple, pour ce qui est des jeux d’
échecs, pour savoir le meilleur coup à jouer, il faut savoir quel sera le
meilleur coup que peut jouer l’adversaire. Pour connaître le meilleur coup
de l’adversaire, il faut connaître le meilleur coup qu’on peut jouer, et ainsi
de suite.
➢ Dès lors, on risque de ne pas s'arrêter lors de la recherche, et il faut fixer
une profondeur maximale pour la recherche.

48
Recherche adversiale : Algorithme minimax (suite)

Exemple : profondeur max = 4


Agent (MAX) 8

Adversaire
8 7
(MIN)

Agent (MAX) 7 22
12 8 15

Adversaire 12 5 8 15 3 7 2 22 17
(MIN)

Pour être sûr d'améliorer son score, l’agent doit choisir l’action le menant au nœud
avec le score 8.
49
Recherche adversiale : Algorithme minimax (suite)

Fonction minimax(noeud, profondeur, maximiserLeJoueur): réel;


var score: réel;
Début
SI profondeur == 0 OU estTerminal(noeud) ALORS
retourner évaluer(noeud);
SINON SI maximiserLeJoueur ALORS
score := −∞;
POUR CHAQUE enfant DE noeud FAIRE
score := max(score, minimax(enfant, profondeur − 1, FAUX));
FinPour;
retourner score;
SINON // minimiser le score du joueur
score := +∞;
POUR CHAQUE enfant DE noeud FAIRE
score := min(score, minimax(enfant, profondeur − 1, VRAI));
FinPour;
retourner score;
FinSi;
Fin.
50
Recherche adversiale : Algorithme minimax (suite)

Explications :
➢ La fonction estTerminal() indique si le nœud n’a pas d’enfants possibles
(exemple, aux jeux d’échecs, c’est un nœud qui correspond à un échec et mat
ou une partie nulle).
➢ La fonction évaluer() retourne le score du nœud (comme précédemment
indiqué).
Fonctionnement :
➢ Initialement, la fonction minimax() est appelée pour chaque nœud possible. Le
nœud qui maximise le score est choisi.
➢ Pour faire “remonter” le score correspondant à un nœud :
○ Lorsque c’est à l’agent de choisir une action, le score du nœud considéré
est maximisé (l’agent choisit l’action qui augmente son score).
○ Lorsque c’est à l'adversaire de choisir une action, le score du noeud
considéré est minimisé (l’adversaire choisit l’action qui diminue le score de
l’agent).

51
Recherche adversiale: Autres stratégies (pour aller plus loin)

➢ Élagage alpha-beta : permet d'optimiser grandement


l'algorithme minimax sans en modifier le résultat. Le principe
est simple :
○ il ne faut pas évaluer une action lorsqu'au moins une autre
action a été trouvée qui prouve que cette action est pire
qu'une action précédemment examinée.
➢ Expectiminimax : C’est un algorithme inspiré de minimax qui
peut être utilisé dans des jeux stochastiques (non
déterministes) tels que le backgammon.
➢ Pour aller encore plus loin : voici une excellente ressource avec
les algorithmes les plus récents et les plus utilisés pour la
recherche adversiale, particulièrement pour ce qui est des jeux
d'échecs: www.chessprogramming.org
52
Conclusion Ce chapitre a présenté les algorithmes
de recherche.

Après ce chapitre, vous devriez pouvoir


répondre à ces questions :

● Qu’est ce qu’un espace, graphe et


arbre de recherche ?
● Comment faire une recherche sans
aucune indication sur le but ?
● Comment faire une recherche avec
certaines indications pour atteindre
le but ?
● Comment améliorer une solution à
un problème (recherche locale) ?
● Comment faire une recherche
quand l’agent est confronté à un
adversaire ?

53
Fin

Vous aimerez peut-être aussi