• Aucun résultat trouvé

Résoudre un problème par une recherche

N/A
N/A
Protected

Academic year: 2022

Partager "Résoudre un problème par une recherche"

Copied!
43
0
0

Texte intégral

(1)

Introduction à l’Intelligence Artificielle et à la Théorie des Jeux

Ahmed Bouajjani

abou@irif.fr

Résoudre un problème par une recherche

Recherche non informée

(2)

Problème —> question de recherche

Exemple : Aller d’un point à un autre dans une ville

(3)

Problème —> question de recherche

Exemple : Aller d’un point à un autre dans une ville - quelle est la donnée du problème ?

- quel type d’agent ?

(4)

Problème —> question de recherche

Exemple : Aller d’un point à un autre dans une ville - quelle est la donnée du problème ?

-

Un point de départ

-

Ensemble de segments (rues, avenues) reliant des points dans la ville

-

Un point d’arriver

- quel type d’agent ?

(5)

Problème —> question de recherche

Exemple : Aller d’un point à un autre dans une ville - quelle est la donnée du problème ?

-

Un point de départ

-

Ensemble de segments (rues, avenues) reliant des points dans la ville

-

Un point d’arriver

- quel type d’agent ?

- Agent basé un modèle avec but

- Phase de résolution du problème + phase d’execution

(6)

Problème —> question de recherche

Exemple : Aller d’un point à un autre dans une ville - quelle est la donnée du problème ?

-

Un point de départ

-

Ensemble de segments (rues, avenues) reliant des points dans la ville

-

Un point d’arriver

- quelle est une solution ? - quel type d’agent ?

- Agent basé un modèle avec but

- Phase de résolution du problème + phase d’execution

(7)

Problème —> question de recherche

Exemple : Aller d’un point à un autre dans une ville - quelle est la donnée du problème ?

-

Un point de départ

-

Ensemble de segments (rues, avenues) reliant des points dans la ville

-

Un point d’arriver

- quelle est une solution ?

- Une sequence de segments

- quel type d’agent ?

- Agent basé un modèle avec but

- Phase de résolution du problème + phase d’execution

(8)

Problème —> question de recherche

Exemple : Aller d’un point à un autre dans une ville - quelle est la donnée du problème ?

-

Un point de départ

-

Ensemble de segments (rues, avenues) reliant des points dans la ville

-

Un point d’arriver

- quelle est une solution ?

- Une sequence de segments Environnement statique

- quel type d’agent ?

- Agent basé un modèle avec but

- Phase de résolution du problème + phase d’execution

(9)

Problème —> question de recherche

Exemple : Aller d’un point à un autre dans une ville - quelle est la donnée du problème ?

-

Un point de départ

-

Ensemble de segments (rues, avenues) reliant des points dans la ville

-

Un point d’arriver

- quelle est une solution ?

- Une sequence de segments - Une arbre de segments

Environnement statique

Environnement dynamique

Stratégie contre l’environnement

- quel type d’agent ?

- Agent basé un modèle avec but

- Phase de résolution du problème + phase d’execution

(10)

Problème —> question de recherche

Exemple : Aller d’un point à un autre dans une ville - quelle est la donnée du problème ?

-

Un point de départ

-

Ensemble de segments (rues, avenues) reliant des points dans la ville

-

Un point d’arriver

- quelle est une solution ?

- Une sequence de segments - Une arbre de segments

Environnement statique

Environnement dynamique

Stratégie contre l’environnement

- quel type d’agent ?

- Agent basé un modèle avec but

- Phase de résolution du problème + phase d’execution

(11)

Description Formelle d’un Problème

-

Etat initial par où l’agent devra commencer

-

Ensemble d’actions possibles (chacune applicable à un ensemble d’états)

-

Fonction de transition : état s, action a —> s’ obtenu en appliquant a à s

-

Fonction de coût : transition s -a-> s’ —> c(s, a, s’) — distance, temps, …

-

Test de l’état but où l’agent devra arriver

(12)

Description Formelle d’un Problème

-

Etat initial par où l’agent devra commencer

-

Ensemble d’actions possibles (chacune applicable à un ensemble d’états)

-

Fonction de transition : état s, action a —> s’ obtenu en appliquant a à s

-

Fonction de coût : transition s -a-> s’ —> c(s, a, s’) — distance, temps, …

-

Test de l’état but où l’agent devra arriver

=> Ensemble des états + transitions = graphe dirigé (étiqueté)

=> Trouver une solution = recherche dans un graphe

(13)

JEUX DU TAKIN

1 3 2

4 6 5

7 8

1 2

4 5 6

7 8

3

Etat initial

suite d'actions

Etat final

-

Etats : description des positions des pièces, ex: (1,3,2,7,B,4,8,5,6); (1,2,3,4,5,6,B,7,8) …

-

Etat initial : peut être n’importe quel état, ex: (1,3,2,7,B,4,8,5,6)

-

Actions : Mouvements de B vers Haut, Bas, Gauche, Droite

-

Transitions : Pour chaque état et action, associe l’effet de l’application de l’action, ex:

-

Coût : chaque transition coûte 1, càd on mesure le nombre d’étapes pour atteindre le but

-

Test de fin : Etat est un but, càd ici = (1,2,3,4,5,6,B,7,8)

(1,3,2,7,B,4,8,5,6) — Droite —> (1,3,2, 7,4,B,8,5,6)

(14)

PROBLÈME DES HUITS DAMES

État initial : échiquier vide / 8 dames dans des positions quelconques Action : ajouter une dame sur une position vide / déplace une dame

Placer 8 Dames sur l’échiquier de manière

à ce qu’aucune ne puisse attaquer l’autre

(15)

Autres Problèmes plus Réalistes

-

Routage dans les réseaux

-

Navigation (trajectoire, itinéraire …), convoi, robot, missile, …

-

Planning (séquence d’actions pour effectuer une tâche)

-

Problèmes de conception de circuits

-

Analyse de programmes

-

(16)

LE PROBLÈME DU COMMIS VOYAGEUR

Faire le tour de toutes les villes en passant par chaque ville une seule fois.

Minimiser la longueur totale du trajet Problème complexe: NP-complet

(17)

Résoudre un problème

-

Recherche dans un graphe, schéma générique

-

Différentes instances

-

Recherche non informée

-

Recherche informée (guidée lors de l’exploration de l’espace d’états)

(18)

INFRASTRUCTURE POUR LE PROBLÈME DE RECHERCHE

n.état — état du noeud

n.parent — le parent du noeud

n.action — l'action qui appliquée au parent donne l'état du noeud

n.coût le coût du chemin de la racine jusqu'au noeud

fonction créer_noeud(Noeud parent, Action action)

retourne Noeud n = new noeud()

n.état = transition(parent.état, action) n.action = action

n.coût = parent.coût + coût(parent.état,action) n.parent = parent

(19)

INFRASTRUCTURE POUR LE PROBLÈME DE RECHERCHE

fonction créer_noeud_initial(État état)

retourne Noeud n = new noeud()

n.état = état

n.action = null n.coût = 0

n.parent = null

(20)

ALGORITHME GÉNÉRIQUE — TREE-SEARCH

- On déplie le graphe en un arbre, éventuellement infini

- On ne mémorise pas les sommets traités

A

B C

A

C B

A

C B

. . .

(21)

ALGORITHME GÉNÉRIQUE - TREE-SEARCH

fonction tree-search(problème) retourne solution ou échec n = new noeud(état_init); frontière = { n };

loop do

si frontière vide retourner échec

n = élément de la frontière; supprimer n de la frontière;

si n.état est un état but alors retourner solution pour chaque action a faire

nouvel_état = transition(n.état, a) m = new noeud(nouvel_état)

ajouter m dans la frontière fait

end loop

-

On déplie le graphe en un arbre, éventuellement infini

-

On ne mémorise pas les sommets traités

-

On maintient une Frontière : feuilles de l’arbres = noeuds non traités

(22)

ALGORITHME GÉNÉRIQUE — GRAPHE-SEARCH

fonction graph-search(problème) retourne solution ou échec n = créer_noeud_initial(état_init);

FRONTIERE = { n }; FERMES = {};

loop do

si frontière vide retourner échec n = élément de la FRONTIERE

supprimer n de la FRONTIERE

if n.état est un état but alors retourner solution ajouter n dans FERMES

pour chaque action a faire

nouvel_état = transition(n.état, a)

si nouvel_état dans un noeud de FRONTIERE

ou dans un noeud de FERMES alors continue m = new noeud(nouvel_état)

ajouter m dans FRONTIERE fait

end loop

- FRONTIERE = noeuds à traiter

- FERMES = noeuds traités (tous les successeurs ont été découverts)

(23)

IMPLÉMENTER LA FRONTIÈRE COMME UNE FILE

créer_file() — retourne une file vide

est_vide(file) — retourne true si la file vide

premier(file) — retourne le premier élément (celui avec le coût minimal)

supprimer_premier(file) — supprime le premier élément de la file

insérer(file, élément) — ajouter un élément dans la file

(24)

QUELLE FILE ?

FIFO — first in first out, file d’attente habituelle

LIFO — last in first out, pile

File avec priorité

(25)

CRITÈRES DE PERFORMANCES

algorithme complet ? Oui, s'il trouve une solution quand elle existe.

l'algorithme optimal ? est-ce que la solution trouvée est optimale?

complexité en temps et espace

(26)

RECHERCHE EN LARGEUR

coût(état,action) est 1

la file : FIFO, arrêter dès que la solution est trouvée (tester si noeud =

destination avant de le mettre dans la frontière, pas à la sortie de la frontière)

Est-ce que l'algorithme est complet ?

Optimal?

Complexité ?

(27)

RECHERCHE EN LARGEUR

coût(état,action) est 1

la file : FIFO, arrêter dès que la solution est trouvée (tester si noeud =

destination avant de le mettre dans la frontière, pas à la sortie de la frontière)

Est-ce que l'algorithme est complet ? OUI

Optimal? OUI

Complexité ?

(28)

RECHERCHE EN LARGEUR

coût(état,action) est 1

la file : FIFO, arrêter dès que la solution est trouvée (tester si noeud =

destination avant de le mettre dans la frontière, pas à la sortie de la frontière)

Est-ce que l'algorithme est complet ? OUI

Optimal? OUI

Complexité ?

si chaque sommet possède b fils et la solution se trouve à distance d de la racine alors le nombre de noeuds générés

b+b^2+b^3+…+b^{d-1} = O(b^d)

d

(29)

RECHERCHE EN LARGEUR

b = 10 (facteur de branchement)

un million de noeuds par seconde, mémoire par noeud 1000 octets

profondeur noeuds temps mémoire

8 10^8 2 minutes 103 GB

10 10^10 3 heures 10 TB

12 10^12 13 jours 1 petabyte

14 10^14 3.5 année 99 petabytes

16 10^16 350 ans 10 exabytes

(30)

RECHERCHE À COÛT UNIFORME (UNIFORM COST SEARCH)

File = file avec priorité

Priorité : g(n) = coût cumulé (courant) de la racine à n

Généralise la recherche en largeur (cas particulier coût = 1)

(31)

RECHERCHE À COÛT UNIFORME (UNIFORM COST SEARCH)

File = file avec priorité

Priorité : g(n) = coût cumulé (courant) de la racine à n

Généralise la recherche en largeur (cas particulier coût = 1)

Condition : coût(état,action) doit être toujours positif

Trouve toujours le plus court chemin, donc complet et optimal.

Il est important qu'on teste la terminaison quand un noeud sort de la frontière (si on le teste à l'entrée de la frontière l'algorithme n'est

pas optimal).

(32)

RECHERCHE EN PROFONDEUR

utilise file LIFO (une pile)

complet ?

optimal ?

coût en espace ?

coût en temps ?

(33)

RECHERCHE EN PROFONDEUR

utilise file LIFO (une pile)

complet ? tree search : NON, graph search : OUI

optimal ?

coût en espace ?

coût en temps ?

(34)

RECHERCHE EN PROFONDEUR

utilise file LIFO (une pile)

complet ? tree search : NON, graph search : OUI

optimal ? tree search : NON, graph search : NON

coût en espace ?

coût en temps ?

(35)

RECHERCHE EN PROFONDEUR

utilise file LIFO (une pile)

complet ? tree search : NON, graph search : OUI

optimal ? tree search : NON, graph search : NON

coût en espace ? (m = profondeur max d’un sommet)

coût en temps ?

- Tree search : b + b + … + b (m fois) = m.b

(36)

RECHERCHE EN PROFONDEUR

utilise file LIFO (une pile)

complet ? tree search : NON, graph search : OUI

optimal ? tree search : NON, graph search : NON

coût en espace ? (m = profondeur max d’un sommet)

coût en temps ?

- Tree search : b + b + … + b (m fois) = m.b

- Graph search : b + b^2 + … = O(b^m)

(37)

RECHERCHE EN PROFONDEUR

utilise file LIFO (une pile)

complet ? tree search : NON, graph search : OUI

optimal ? tree search : NON, graph search : NON

coût en espace ? (m = profondeur max d’un sommet)

coût en temps ?

- Tree search : b + b + … + b (m fois) = m.b

- Graph search : b + b^2 + … = O(b^m)

- Cas favorable : d

d

(38)

RECHERCHE EN PROFONDEUR

utilise file LIFO (une pile)

complet ? tree search : NON, graph search : OUI

optimal ? tree search : NON, graph search : NON

coût en espace ? (m = profondeur max d’un sommet)

coût en temps ?

- Tree search : b + b + … + b (m fois) = m.b

- Graph search : b + b^2 + … = O(b^m)

- Cas favorable : d

- Cas défavorable : b + b^2 + … = O(b^m)

(39)

Problème —> question de recherche

DEPTH-LIMITED SEARCH

Recherche en profondeur avec une borne sur la profondeur fixée K

-

Termine toujours, même avec Tree search

-

=> Même avantage que Tree Search : complexité en mémoire polynomiale

-

Mais on perd la complétude en général par rapport à Graph search

=> Obtenir le meilleur des deux mondes ?

(40)

ITERATIVE DEEPENING DEPTH-FIRST SEARCH

deepening_depth_first_search() for k=1 to infinity

do

solution = limited_depth_first_search(k) si solution != échec alors

retourner solution done

Iteration de la recherche bornée avec des bornes croissantes

-

Complet ?

-

Optimal ?

-

Espace ?

-

Temps ?

(41)

ITERATIVE DEEPENING DEPTH-FIRST SEARCH

Iteration de la recherche bornée avec des bornes croissantes

-

Complet ? OUI

-

Optimal ?

-

Espace ?

-

Temps ?

deepening_depth_first_search() for k=1 to infinity

do

solution = limited_depth_first_search(k) si solution != échec alors

retourner solution done

(42)

ITERATIVE DEEPENING DEPTH-FIRST SEARCH

Iteration de la recherche bornée avec des bornes croissantes

-

Complet ? OUI

-

Optimal ? OUI pour coût 1, NON en général

-

Espace ?

-

Temps ?

deepening_depth_first_search() for k=1 to infinity

do

solution = limited_depth_first_search(k) si solution != échec alors

retourner solution done

(43)

ITERATIVE DEEPENING DEPTH-FIRST SEARCH

Iteration de la recherche bornée avec des bornes croissantes

-

Complet ? OUI

-

Optimal ? OUI pour coût 1, NON en général

-

Espace ? O(m.b)

-

Temps ? O(b^m)

deepening_depth_first_search() for k=1 to infinity

do

solution = limited_depth_first_search(k) si solution != échec alors

retourner solution done

Références

Documents relatifs

Si Nathalie donnait 2 timbres à Pierre, alors celui-ci en aurait deux fois plus qu’elle.. Si on triple sa longueur et que l’on double sa largeur, son périmètre augmente de

Si Nathalie donnait 2 timbres à Pierre, alors celui-ci en aurait deux fois plus qu’elle.. Si on triple sa longueur et que l’on double sa largeur, son périmètre augmente de

Pour chaque question, tu ne peux utiliser qu'une fois exactement les quatre nombres, l'addition, la soustraction et la multiplication.. Toutefois, tu peux placer

Pour chaque question, tu ne peux utiliser qu'une fois exactement les quatre nombres, l'addition, la soustraction et la multiplication.. Toutefois, tu peux placer

Pour montrer que cette conjecture est toujours vraie, on désigne le premier des quatre entiers par la lettre n.. Exprime alors les

Pour montrer que cette conjecture est toujours vraie, on désigne le premier des quatre entiers par la lettre n.. Exprime alors les

Écris une expression littérale traduisant ce programmea. Factorise et réduis

Écris une expression littérale traduisant ce programmea. Factorise et réduis