Maîtrise Informatique 2003 / 2004. Devoir de PROLOG. Julien Van Den Bossche / Benoît Moulin



Documents pareils
Initiation à la Programmation en Logique avec SISCtus Prolog

Guide de l utilisateur. Faites connaissance avec la nouvelle plateforme interactive de

Vous avez cliqué sur le lien disponible sur le Site Uniformation. Vous venez d arriver sur cette page.

L import massif introduit plusieurs nouvelles fonctionnalités, selon que l on importe un thésaurus, un ensemble de valeurs contrôlées ou un corpus.

Utilisation du site de retours Lexibook

Consigne : je remplis le tableau en tenant compte des informations de la ligne supérieure et de la colonne de gauche (droite pour les gauchers)

Créer le schéma relationnel d une base de données ACCESS

Modes Opératoires WinTrans Mai 13 ~ 1 ~

EXCEL TUTORIEL 2012/2013

Correction des Travaux Pratiques Organiser son espace de travail

Guide d installation & de démarrage Gamme Aqua PC Version AquaPro

1. Ouvrir Internet Explorer Faire défiler une page Naviguer dans un site Internet Changer d adresse Internet (URL) 2

Interface PC Vivago Ultra. Pro. Guide d'utilisation

PRISE EN MAIN RAPIDE

Notice de fonctionnement DVR H Méthode de Visionnage ESEENET

Plus petit, plus grand, ranger et comparer

Sous réserve de modifications techniques et des disponibilités, fabrication française.

Base-Elèves. Premiers pas en direction des Mairies

Utilisation du client de messagerie Thunderbird

Manuel fournisseur : procédure pour prendre connaissance d une consultation en ligne et soumettre une offre. Version de février 2014 SNCF

BALISE GPS. Modèle EOLE. MANUEL INSTALLATEUR Version 3.4 GPS+GSM+SMS/GPRS

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

COMMENT CREER SIMPLEMENT UN TABLEAU DE BORD AVEC SAS BI DASHBOARD 4.3?

Si vous décidez d utiliser un autre chemin, c est ce nouveau chemin qu il faudra prendre en compte pour la sauvegarde. Cf. : Chapitre 9 Sauvegarde

!!! Archipad version 1.4. Manuel de Référence

Manuel utilisateur Netviewer one2one

MEGA ITSM Accelerator. Guide de Démarrage

Publipostage et étiquettes

GESTION DE L OptoAMC Via AREASanté

Analyse de problème Certificat (clé-usb) Mac

Aide à la prise en charge / PEC+ Utilisation dans les logiciels Mélusine Taxi Live

Celestia. 1. Introduction à Celestia (2/7) 1. Introduction à Celestia (1/7) Université du Temps Libre - 08 avril 2008

Guide d utilisation du logiciel

Notice de présentation. La mise à jour de la référence bancaire sous TelePAC

GloboFleet. Mode d emploi CardControl Plus

MODE D EMPLOI. Plateforme de réflexion et de recherche de la CIDEGEF pour un modèle de management francophone

Retour table des matières

Utiliser le site Kahoot pour créer des quiz interactifs

Guide d utilisation du système rapport en ligne de la famille de la CMS

Manuel de l utilisateur Solwatt du service extranet.

Manuel d utilisation DeveryLoc

SOMMAIRE. Présentation assistée sur ordinateur. Collège F.Rabelais 1/10

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

Module 16 : Les fonctions de recherche et de référence

MEDIA NAV Guide de téléchargement de contenus en ligne

1) Information sur le logiciel et la notice 2) Le tableau de bord 3) Les devis 4) Les factures 5) Les factures d acompte 6) Les avoirs sur facture

GESTION DU LOGO. 1. Comment gérer votre logo? Format de l image Dimensions de l image Taille de l image 9

Service des ressources informatiques - Conseil Scolaire de District Catholique Centre-Sud Page 1

Centrale d Alarme Visiotech

Guide des fonctions avancées de mywishtv

MEDIAplus elearning. version 6.6

Guide de l approbateur de base

Guide sommaire de TecLocal

GUIDE D UTILISATION DU CENTRE DE DONNÉES DE L ISU

Guide d utilisation des fichiers bonus accompagnant le guide «L Argent est une science exacte»

Services bancaires par Internet aux entreprises. Guide pratique pour : Rapports de solde Version

Déclaration des postes SIP 67xxi

Campagnes d ings v.1.6

Manuel utilisateur Réservation d un Court via Internet. Procédure PC/Tablette/Smartphone

@telier d'initiation

Manuel d utilisation

COMMENT TROUVER VOS FUTURS CLIENTS À L INTERNATIONAL? 05/03/2015 Creditsafe France

4D Server et les licences : fonctionnement et environnement

Mode d emploi : Module SMS

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Généralités. Premier lancement

Analyse de la vidéo. Chapitre La modélisation pour le suivi d objet. 10 mars Chapitre La modélisation d objet 1 / 57

Le langage C. Séance n 4

Manuel Utilisateur Chariot odys.sante-lorraine.fr

Mozaïk. Nouveautés et améliorations. de la version

BONNE NOUVELLE, À PARTIR DE DEMAIN 15 AOÛT 2014, l inscription en ligne sera disponible à partir du site de l ARO.

MANUEL UTILISATEUR : RECETTES TABLE DES MATIERES PIE : PRESTATIONS INTERNES ET EXTERNES

Chapitre 4 : Guide de Mouvement et Masque

Les tablettes et l'extranet Intermixt Mode d'emploi

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Access 2007 FF Access FR FR Base

MANUEL D UTILISATION - Précis Poste de Traitement d Images 1 - Déconvolution

Site internet de la ville de Sautron Tutoriel 1

La Clé informatique. Formation Excel XP Aide-mémoire

Base de données Guide de l utilisateur

TD de supervision. J.P. Chemla. Polytech Tours Département productique 2ème année

Création d'un questionnaire (sondage)

EXEMPLES DE PROCEDURE POUR METTRE A JOUR LES CERTIFICATS BANQUE _

FIDÉICOMMIS. Être en mesure de :

Des outils numériques simples et conviviaux!

MEGA ITSM Accelerator. Guide de démarrage

pas à pas prise en main du service sur le web Le Cloud

Boîtier Externe USB 3.0 pour Disque Dur 2,5 SATA III avec soutien UASP

erma (Instructions d utilisateur )

Solutions en ligne Guide de l utilisateur

PromoPost Manuel d utilisation

Manuel d utilisation de la plate-forme de gestion de parc UCOPIA. La mobilité à la hauteur des exigences professionnelles

Google Drive, le cloud de Google

Assistant d e tablissement de Tableaux

Troisième projet Scribus

Gestion de références bibliographiques

ATTENTION AU DÉPART! GUIDE DE QUESTIONS DU MENEUR DE JEU.

LPP SAINT JOSEPH BELFORT MODE OPERATOIRE ACTIVINSPIRE. Bonne utilisation à toutes et tous! UTILISATION DES TBI LE LOGICIEL ACTIVINSPIRE

Transcription:

Maîtrise Informatique 2003 / 2004 Devoir de PROLOG Julien Van Den Bossche / Benoît Moulin Devoir de PROLOG, Julien Van Den Bossche / Benoît Moulin Page 1 sur 10

Généralités sur le devoir Les codes sources se trouvent sur http://www.julienvdb.com/prolog. Dans ce rapport, nous expliquons nos choix mais nous ne détaillons pas nos fonctions car ces dernières sont décrites par le biais de commentaires dans le code source. 1.Représentation de la scène et des actions Nous avons décidé de représenter un véhicule de la manière suivante : vehicule(nom, Type, Couleur). Les véhicules sont donc définis dans le fichier Prolog : Par exemple : vehicule(m1, moto, jaune). Les véhicules sont des faits. Un état comporte un ensemble de véhicules ou bien des places vides. La représentation d un état se fera par une liste, car la manipulation de ces dernières se fait aisément. L'état courant est défini par le prédicat dynamique etat_courant(e). E étant l'état de la file de voitures. On définit E comme l'état courant. Pour l initialisation de l état courant on utilise les assertz et retract : init:- retract(etat_courant(_)), assertz(etat_courant([v1, vide, m1, vide, vide, v2, m2, c1])). En fait on retire tout ce qui est dans l état courant puis on ajoute notre nouvelle liste. 1.1. Tests des propriétés. Le prédicat vrai(etat, Proprietes) permet de tester un ensemble de propriétés sur un Etat. Dès qu une propriété n est pas vérifiée on renvoi faux. Prenons un exemple : On teste la couleur d un véhicule dans un état. vrai(etat, [couleur(nomvehicule, Couleur) Queue]) :- member(nomvehicule, Etat), vehicule(nomvehicule, _, Couleur), vrai(etat, Queue). Devoir de PROLOG, Julien Van Den Bossche / Benoît Moulin Page 2 sur 10

Dans un premier temps, on doit vérifier que le véhicule se trouve bien dans la file. Si c est le cas on regarde si la couleur donnée correspond au véhicule demandé. On poursuit les tests avec les autres propriétés. Un autre exemple intéressant : Ici on teste si un véhicule est en queue de file. vrai(etat, [queue_de_file(nomvehicule) Queue]) :- member(nomvehicule,etat), append(l,[nomvehicule _], Etat), NomVehicule\=vide, vide(l), vrai(etat,queue). De la même manière on s assure que le véhicule est dans la liste et que ce n est pas «vide». Ensuite on cherche NomVéhicule dans Etat. S il est trouvé on forme la liste L composée d une liste contenant les éléments avant NomVéhicule et d une liste composée des éléments à partir de NomVéhicule. Pour être en queue de file il faut bien sûr avoir personne derrière, soit L contenant que des «vide». On teste ensuite les autres propriétés sur le même état. En fait, on cherche à identifier notre expression (L,[NomVehicule _]) à la liste représentant l état par le prédicat append. Si on veut tester une propriété sur l état courant on ne met pas le nom de l état : vrai(propriete) :- etat_courant(e), vrai(e, Propriete). 1.2. Les transitions et actions Une transition va pouvoir modifier l état courant en appliquant une action, soit à un véhicule, soit à la file entière. transition(etat, Action, Nouvel_Etat). De la même manière que pour les tests de propriétés on procédera par unification avec l état courant. Prenons un exemple : Devoir de PROLOG, Julien Van Den Bossche / Benoît Moulin Page 3 sur 10

transition(etat,avance(nomvehicule),nouvel_etat) :- append(tete, [NomVehicule Queue], Etat), (1) append(tete, [vide], L), (2) append(l, [NomVehicule Queue], Nouvel_Etat), (3) NomVehicule\=vide. %Quand on est en tête de file on agrandit la file transition(etat,avance(nomvehicule),nouvel_etat) :- append(tete, [NomVehicule], Etat), append(tete, [vide, NomVehicule], Nouvel_etat), NomVehicule\=vide. Requête : Etapes : transition(etat_courant(e), avance(v1), Nouvel_Etat) Etat initial : [v1, vide, m1, vide, vide, v2, m2, c1] (1) : [v1, vide, m1, vide, vide, v2, m2, c1] En bleu on retrouve Queue, Tete est vide (2) : [vide] : L (3) : [vide, v1, m1, vide, vide, v2, m2, c1] En orange v1 puis en violet ce qui se trouvait après v1. Pour savoir si une transition est possible on regarde si l état de départ est égal au nouvel état : transition(e, Action,E) :- write(action), write(' '), write('action Impossible'), nl, write('veuillez saisir une autre action'), nl. Pour définir une action sur l état courant on utilise transition : action(action) :- etat_courant(e), transition(e,action,nouvel_etat), retract(etat_courant(_)), assertz(etat_courant(nouvel_etat)), etat. On effectue la transition sur l état courant, on affecte le nouvel état renvoyé à l état courant puis on affiche l état. Devoir de PROLOG, Julien Van Den Bossche / Benoît Moulin Page 4 sur 10

2. Visualisation On utilise les primitives de création et de déplacement d objets données dans le fichier util_visu.pro. Au départ on va crée une fenêtre puis on créer la route : initialisationgraphique :- initialisation, ouvre_fen, cree('rn13',_), visu. Visu va servir à dessiner les véhicules dans la fenêtre : Pour représenter les véhicules regarde chaque élément de l état courant : Si c est un vide alors on avance d une place. Si c est un véhicule alors on le dessine dans la fenêtre. visu_raz permet d enlever les composants graphiques de la fenêtre. Quand on veut visualiser une action on va faire appel au prédicat de la partie 1 pour voir si l action est possible et si c est le cas modifier l état courant. Si l état courant a été modifié alors on enlève les composants de la fenêtre puis on affiche le nouvel état. Exemple : action_visu(double(nom1,nom2)):- etat_courant(e), transition(e,double(nom1,nom2), Nouvel_Etat), retract(etat_courant(_)), assertz(etat_courant(nouvel_etat)), visu_raz,cree('rn13',_),visu. Devoir de PROLOG, Julien Van Den Bossche / Benoît Moulin Page 5 sur 10

3. Interface en langage naturel. Le but de cette partie est d établir une interface en français permettant d interroger la scène et d effectuer les actions. Le procédé à suivre est le suivant : à partir d une requête saisie au clavier par l utilisateur, il faut générer un terme Prolog. Celui-ci contient les informations importantes de la requête. Ensuite, ce terme sera interprété et les différentes réponses possibles s afficheront à l écran en français. Les informations contenus dans le terme Prolog correspondent à des mots clés qui sont le type des véhicules (voiture, moto, camion), la couleur des véhicules (rouge, vert, jaune), leur nom (v1, v2, m1, m2, c1), les mots désignant leur position (devant, derrière, juste, queue, tête) et les actions (avance, recule, double). Afin que ces mots soient interprétés, nous supposons qu ils sont invariables, même si cela engendre des fautes d accord dans la requête. Par exemple, l utilisateur doit rentrer comme requête : Quels sont les véhicules rouge? à la place de : Quels sont les véhicules rouges? Il existe deux types de requêtes, les questions et les actions. 3.1. Questions : Les questions sont réparties dans deux catégories. Tout d abord, on trouve les questions portant sur l identification, comme : Quelle est la voiture rouge? Il faut d abord créer un prédicat qui reconnaît les différents mots clés. Il s agit de requete_qui/2. Il génère, à partir d une liste de tokens, le terme Prolog qui(liste), dans lequel la liste Liste contient les informations. Par exemple :?- requete_qui([quelle,est,la,voiture,rouge],r). R=(qui([type(rouge), couleur(rouge)]). Ensuite le prédicat reponse_qui/2 prend en paramètre le terme Prolog et génère la réponse qui vérifie les informations qu il contient. Cette vérification se fait avec l appel de la fonction vrai(propriété).?- reponse_requete(qui([type(rouge), couleur(rouge)]),r). R=[la,voiture,v1]. Devoir de PROLOG, Julien Van Den Bossche / Benoît Moulin Page 6 sur 10

Le nombre d occurrences de ces prédicats dans le programme est important, car il faut prendre en compte le plus de requêtes possibles. De plus, il faut que les réponses aient du sens ([la,camion,c1] n est pas correct). Le prédicat requete1 permet de créer l interface pour ce type de question. Il utilise certains prédicats du fichier util_saisie.pro : lire_phrase/1 et tokenise/2. L utilisateur entre un requête. Celle-ci est prise en paramètre par lire_phrase/1. Il en résulte une liste prise en compte par tokenise/2. On se retrouve alors avec un liste de tokens. C est à ce moment qu interviennent les prédicats requete_qui/2 et reponse_qui/2. requete_qu/2 prend en paramètre la liste des tokens. Les utilisations des prédicats setof/3 et last/2 sont nécessaires pour filtrer les réponses. setof(r, requete_qui(s,r), L) renvoie la liste L qui correspond à tous les termes Prolog possibles. Seul le dernier éléments de la liste est utile (d où l utilisation de last/2). Celui-ci est utilisé par reponse_qui/2 qui retourne la réponse sous forme d une liste. Enfin, le prédicat affiche2/1 permet d afficher la réponse en français. Elle effectue le travail inverse de tokenise/2. La deuxième catégorie de questions concerne la localisation des véhicules. Le principe est exactement le même que précédemment. Les prédicats utilisés sont requete_ou/2 et reponse_ou/2. Le terme Prolog engendré est ou([liste]). Le prédicat utilisé pour établir l interface est requete2. 3.2. Action : Pour les actions, le procédé reste identique. Un prédicat requete_action/2 crée un terme Prolog. Celui-ci est interprété par reponse_action/2. Par contre, la vérification se fait grâce à l appel de la fonction action(a). Le prédicat qui crée l interface de ce genre est requete3. Remarque : En remplaçant le prédicat action(a) par visu_action(a) dans les occurrence de reponse_action/2, et en admettant que la fenêtre graphique soit déjà ouverte, on peut observer les changements d états de la route. Devoir de PROLOG, Julien Van Den Bossche / Benoît Moulin Page 7 sur 10

Jeu de tests : 1?- initialisation. 2?- etat. Etat courant : (v1, voiture, rouge) vide (m1, moto, jaune) vide vide (v2, voiture, vert) (m2, moto, rouge) (c1, camion, vert) 3?- vrai([juste_derriere(v1,m1), devant(v2,v1)]). 4?- vrai([juste_derriere(v1,m1), devant(v1,v2)]). No 5?- initialisation. 6?- etat. Etat courant : (v1, voiture, rouge) vide (m1, moto, jaune) vide vide (v2, voiture, vert) (m2, moto, rouge) (c1, camion, vert) 7?- action(recule(v1)). Etat courant : (v1, voiture, rouge) vide vide (m1, moto, jaune) vide vide (v2, voiture, vert) (m2, moto, rouge) (c1, camion, vert) 8?- action(avance(c1)). Etat courant : (v1, voiture, rouge) vide vide (m1, moto, jaune) vide vide (v2, voiture, vert) (m2, moto, rouge) vide (c1, camion, vert) 9?- action(avance(v2)). avance(v2) Action Impossible Veuillez saisir une autre action Etat courant : (v1, voiture, rouge) vide vide (m1, moto, jaune) vide vide (v2, voiture, vert) (m2, moto, rouge) vide (c1, camion, vert) 10?- action(double(v1,m1)). Devoir de PROLOG, Julien Van Den Bossche / Benoît Moulin Page 8 sur 10

Etat courant : vide vide vide (m1, moto, jaune) (v1, voiture, rouge) vide (v2, voiture, vert) (m2, moto, rouge) vide (c1, camion, vert) 11?- action(double(v1,v2)). double(v1, v2) Action Impossible Veuillez saisir une autre action Etat courant : vide vide vide (m1, moto, jaune) (v1, voiture, rouge) vide (v2, voiture, vert) (m2, moto, rouge) vide (c1, camion, vert) 12?- action(recule(v1)). recule(v1) Action Impossible Veuillez saisir une autre action Etat courant : vide vide vide (m1, moto, jaune) (v1, voiture, rouge) vide (v2, voiture, vert) (m2, moto, rouge) vide (c1, camion, vert) 13?- action(distance_de_securite). Etat courant : vide (m1, moto, jaune) vide (v1, voiture, rouge) vide (v2, voiture, vert) vide (m2, moto, rouge) vide (c1, camion, vert) 14?- initialisationgraphique. 15?- visu_action(double(v1,m1)). 16?- visu_action(recule(c1)). recule(c1) Action Impossible Veuillez saisir une autre action 17?- visu_action(recule(m1)). 18?- visu_action(recule(m1)). 19?- visu_action(recule(m1)). 20?- visu_action(avance(c1)). Devoir de PROLOG, Julien Van Den Bossche / Benoît Moulin Page 9 sur 10

21?- visu_action(distance_de_securite). Etat courant : (m1, moto, jaune) vide vide (v1, voiture, rouge) vide (v2, voiture, vert) vide (m2, moto, rouge) vide (c1, camion, vert) 22?- requete1. : quelle est la voiture rouge. la voiture v1 23?- requete2. : où est v1. la voiture v1 est derrière v2 la voiture v1 est derrière m1 la voiture v1 est derrière m2 la voiture v1 est derrière c1 la voiture v1 est juste derrière m1 la voiture v1 est en queue de file No 24?- requete3. : v1 avance. Etat courant : vide (v1, voiture, rouge) (m1, moto, jaune) vide vide (v2, voiture, vert) (m2, moto, rouge) (c1, camion, vert) Devoir de PROLOG, Julien Van Den Bossche / Benoît Moulin Page 10 sur 10