Explorer un espace d’états

Slides:



Advertisements
Présentations similaires
Les matrices.
Advertisements

Tris.
Chapitre annexe. Récursivité
Portée des variables VBA & Excel
Fonctions & procédures
Sensibilisation à l’Algorithmique et structure de données
GEF 435 Principes des systèmes d’exploitation
Problème de 8 dames: Sachant que dans un jeu des échecs, une dame peut pendre toute pièce se trouvant sur la colonne ou sur la ligne ou sur les diagonales.
Lycée Louis Vincent SEANCE 6 Python Les listes Lundi 25 novembre 2013.
Traitement Co-Séquentiel: Appariment et Fusion de Plusieurs Listes
Problèmes aux limites Généralités
Utilisation des tableaux
Principes de programmation (suite)
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Récursivité.
Plus courts chemins On présente dans ce chapitre un problème typique de cheminement dans les graphes : la recherche d'un plus court chemin entre deux sommets.
Algorithme de Dijkstra
Créer un index.
Algorithmique et Programmation
ALGORITHMIQUE Plan du cours Généralités -définition -importance
Methode de Tri efficace
Optimisation linéaire
Programmation fonctionnelle Le langage LISP
Systèmes d’équations linéaires
Chapitre 3bis Applications linéaires et Matrices
LES ALGORITHMES F.DUPONT/M.HECTOR OCTOBRE 2003.
Algorithme de Bellman-Ford
Ensembles Définition d’un ensemble. Opérations sur les ensembles. Accès, suppression et ajout d’éléments d’un ensemble. Fonctions permettant de manipuler.
Structures de données IFT-2000
Les Fonctions. Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code.
Présentation Structures de Données et TDA
IFT Complexité et NP-complétude
CSI 4506: Introduction à l’intelligence artificielle
Programmation dynamique
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Modélisation des opérations Spécifier les transformations détat que lon attend des services de la machine Létat dune machine entièrement déterminée par.
Références à une cellule dans EXCEL
Programmation linéaire en nombres entiers : les méthodes de troncature
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
Heuristiques C. Recherche de la meilleure branche . Branch And Bound
Exploration systématique de graphes
Le Cycle de conception Processus à suivre pour toute production Documenter le processus dans le carnet de réalisation.
Création et présentation d’un tableau avec Word 2007
On cherche le plus court chemin de E à S sur le graphe suivant :
Programmation linéaire en nombres entiers
Méthodes de tri.
Algorithmes Branch & Bound
Licence Informatique Algorithmique des graphes
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Le langage Racket (Lisp)
Exploration systématique de graphes
Algorithmique : Introduction
Cours LCS N°4 Présenté par Mr: LALLALI
Recherches locales et méta-heuristiques
CPI/BTS 2 Algorithmique & Programmation La récursivité Algo – Prog CPI/BTS2 – M. Dravet – 14/09/2003 Dernière modification: 14/09/2003.
Optimisation par les algorithmes génétiques
Algorithme de DIJKSTRA
Post-optimisation, analyse de sensibilité et paramétrage
Le Jeu et l’intelligence artificielle
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
La pile de crêpes.
Algorithmique Tableaux de données
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département d’informatique et de génie logiciel Édition Septembre 2009.
Algorithmique Boucles et Itérations
Pierre Joli Cours de Mathématique Pierre Joli
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
IFT359 – Programmation fonctionnelle Thème 07 Fermeture, affectation ou monades 1.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Transcription de la présentation:

Explorer un espace d’états Etapes à suivre: Bien définir les caractéristiques utiles de l’espace à explorer. Définir l’état initial et l’état final (le but de l’exploration). Définir un algorithme d’exploration (les opérateurs qui changent les états). Si plusieurs algos, définir l’algo optimal selon un critère donné. Coder les états de l’espace réel Transformer l’algorithme en un programme (Lisp, C etc)

Sortir d’un labyrinthe Le problème: Un robot placé n’importe où dans un labyrinthe inconnu doit trouver par moyens propres la sortie. Il doit marquer la voie correcte qui mène à la sortie ainsi que les essais infructueux qu’il a effectués sur le parcours. S’il existe plusieurs chemins qui mènent à la sortie il doit choisir le chemin optimal selon un critère imposé. Le programme LISP doit tenir compte de toutes ces exigences

Le labyrinthe réel Entrée Sortie

Algorithmes d’exploration Il y a quatre directions à explorer: Droite, Bas, Gauche, Haut. On peut les combiner de différentes façons (combien ?) On choisit une combinaison et on l’applique à chaque pas pour trouver la case libre suivante. Si cul-de-sac, le robot doit retourner jusqu’à la dernière croisée pour essayer une autre direction. Si la sortie est trouvée le robot retourne au point de départ en marquant le « bon » chemin. Des explorations différentes mènent à des chemins différents. Il faut compter les pas pour mettre en évidence « le plus court chemin » après exploration de toutes les combinaisons.

Coder les états du labyrinthe (transformer le labyrinthe en un tableau de symboles) Chemin libre…………………………….tirets (-) Murs……………………………………...dollars ($) La sortie………………………………....l’atome « FIN » Les voies explorées…….....................étoile (*) Chemin correct entrée et FIN…………ronds (O)

Le labyrinthe codé (une liste de listes) j1 j2 colonnes (- - - $ $ - - - - -) i1 ($ $ - - - - $ - $ -) i2 (- - - - $ $ - - $ -) (- $ $ - - $ $ $ $ $) avant l’exploration (- - - $ $ $ - - - -) (- $ - - - - - $ $ fin) lignes (o o o $ $ * * * * *) ($ $ o o * * $ * $ *) après l’exploration (o o o o $ $ * * $ *) (o $ $ * * $ $ $ $ $) (o o o $ $ $ o o o o) (- $ o o o o o $ $ fin)

Préparation du programme LISP On affecte à l’atome labyrinthe la valeur du tableau précédent: (setq labyrinthe ‘( (…………………………..) (…………………………..) (…………………………..) ) ) On crée une fonction laby qui a comme arguments le labyrinthe donné, les coordonnées d’une case (ligne i, colonne j) et qui implémente l’algo donné. Appel de la fonction: (laby labyrinthe 0 0) (si l’on part de la ligne 0 et la colonne 0) (laby labyrinthe 3 4) (si l’on part de la ligne 4 et la colonne 5)

Fonctions auxiliaires – printab Transforme une liste de listes en un tableau Exemple: ? (printab ‘((a b c) (d e f) (g h i)))  (a b c) (d e f) (g h i) Définition: ( de printab ( liste) (until (null liste) (print (car liste)) (setq liste (cdr liste))))

La fonction tref tref Retourne le terme de la ligne i et de la colonne j d’un tableau Exemple: ? (setq tab ‘((a b c) (d e f) (g h i))) ? (tref tab 2 0) ;le terme de la ligne 2 et de la colonne 0 =g Définition: (de tref (tab i j ) (setq ligne (nth i tab)) ;affecte à l’atome ligne la ligne ‘i’ du tableau tab (nth j ligne)) ;retourne l’élément ‘j’ de la ligne respective Le prédéfini (nth <n> <l>) retourne le <n> ième élément d’une liste <l>: ? (nth 2 ‘(g h i)) =i ? (nth 1 ‘((a b c) (d e f) (g h i))) = (d e f)

La fonction tset tset Remplace dans un tableau le terme < i > < j > par un autre Exemple: ? (tset ‘( (a b c) (d e f) (g h i) ) 1 1 ‘x ) = ((a b c) (d x f) (g h i)) Définition: ( de tset (tab i j x) (setq nl (replace (nth i tab) j x)) ;nth retourne la ième ligne de tab (replace tab i nl)) ;replace remplace le jème terme par x ;setq affecte à nl cette nouvelle ligne ;replace remet dans tab cette nouvelle ligne (replace <l> <n> <x>) ;remplace dans la liste l le terme de rang n par x ? (replace ‘(a b c) 2 ‘x) = (a b x)

La fonction <replace> Définition: (de replace (liste i x) (cond ((= i 0) (rplaca liste x)) ( t (cons (car liste) ( replace (cdr liste) (1- i) x ) ) ) ) ) Le prédefini (rplaca <liste> <x>) remplace le premier terme de la liste par x Exemples: (rplaca ‘(a b c) ‘x)  ( x b c ) (replace ‘(a b c) 2 ‘x)  (a b x) (tset ‘((a b c) (d e f) (g h i)) 1 1 ‘x)  ((a b c) (d x f) (g h i))

Programme LISP (de laby (labyrinthe i j) (setq pas-trouve T) // initialisation du drapeau pas-trouvé à VRAI (cherche-sortie i j ) // fonction d’exploration à partir de la case i j (if pas-trouve (print "pas de sortie") (print "solution: " ) (printab labyrinthe) ) ) (de cherche-sortie (i j) (if (equal (tref labyrinthe i j) 'fin ) (setq pas-trouve ( ) ) 3 (tset labyrinthe i j ‘*) 4 (if (and pas-trouve (member (tref labyrinthe i (1+ j)) '(- fin))) (cherche-sortie i (1+ j))) 5 (if (and pas-trouve (member (tref labyrinthe (1+ i) j) '(- fin))) (cherche-sortie (1+ i) j)) 6 (if (and pas-trouve (member (tref labyrinthe i (1- j)) '(- fin))) (cherche-sortie i (1- j))) 7 (if (and pas-trouve (member (tref labyrinthe (1- i) j) '(- fin))) (cherche-sortie (1- i) j))) 8 (ifn pas-trouve (tset labyrinthe i j ‘o)))

Explication de la fonction «cherche-sortie » Si la case < i j > est égale à fin (test du IF) On affecte à l’atome « pas-trouvé » ( la valeur ( ) (si oui) si non on évalue la suite des fonctions (de 3 à 8) à commencer par: 3. On remplace le (-) par (*) (marquage du chemin ) On choisit l’algorithme d’exploration: droite – bas – gauche – haut Exploration à droite: 4. Test du IF (2 conditions reliées par AND): SI pas-trouve est VRAI (True) et si la case à droite est libre ou fin ALORS relancer <cherche-sortie> à droite SINON (mur à droite) explorer la case du Bas 5. Exploration en bas: <(1+ i), j >…..si elle échoue (mur en bas): 6. Exploration à gauche < i, (1- j) > …si elle échoue (mur à gauche): 7. Exploration en haut <(1+ i), j > (mur en haut) Si 4,5,6,7 échouent  cul-de-sac (toutes les directions bouchées) alors on passe à 8.

8. pas-trouve = T donc le test de IFN échoue Suite 8. pas-trouve = T donc le test de IFN échoue On remonte dans la pile en dépilant les appels récursifs précédents en attente (on remonte le chemin parcouru) en testant les choix restants toujours dans l’ordre droite-bas-gauche-haut.. Quand le test (tref labyrinthe i j) = FIN  test (1) VRAI on pose: (setq pas-trouve ( ) ) le si oui de (2) et l’on remonte dans la pile pour évaluer les fonctions en attente. Toutes échouent à cause du test « pas-trouve = ( ) » -Seul le test du IFN (8) réussit et le « tset » marque le chemin correct (remplace les * par des o)

Exercices/Mini-projet Changez le type de labyrinthe (nombre de cases et/ou position des murs) et vérifiez que le programme fonctionne toujours correctement. Modifiez le programme afin que l’atome FIN de la case sortie soit remplacé par un o (marquage habituel) Insérez dans le programme donné un compteur qui permette d’afficher: - le nombre de pas corrects (le nombre de ronds ‘o’) - le nombre de pas ratés (le nombre d’étoiles ‘*’ ) Changez l’algorithme d’exploration du labyrinthe initial et vérifiez que le nombre de pas (utiles et ratés) peut changer.

Mini-projet Sachant qu’il y a 24 algorithmes d’exploration possibles (expliquez pourquoi) écrivez le programme qui permet de mettre en œuvre automatiquement ces algos, de calculer chaque fois le nombre de pas corrects et ratés et de mettre en évidence le ou les algos optimaux selon un critère d’optimalité choisi (par exemple nombre minimal de pas corrects ou bien nombre minimal de pas ratés ou bien nombre minimal de pas totaux). Note: les étudiants qui rendent le mini-projet au plus tard le 4.01.05 (et le soutiennent correctement) seront exemptés du contrôle de IA du 23.03.