Vous êtes sur la page 1sur 19

Chapitre 05

Réalisation
Réalisation

5.1. Introduction:
Après avoir vu, toutes les notions, les concepts ainsi que la conception que nous
venons de proposer, on arrive à la phase de réalisation. Là, où on doit présenter les outils,
le langage de programmation que nous avons jugés, pour leurs caractéristiques, à
répondre aux buts que nous avons fixés au début.

5.2. Outils de développement :

5.2.1. La plate-forme JADE (Java Agent Developpement Environment) :


Jade est un environnement de développement d’agents Open Source, qui était
développée par le laboratoire de recherche en télécommunications, CSELT7 . Ses
principales caractéristiques sont :

 N’importe quelle méthode de développement pourrait être utilisée


(indépendance de la méthode de développement).
 Les agents sont développés entièrement en Java, ce qui motive aussi notre
choix du langage.
 Jade permet un échange transparent de messages par le langage normalisé
FIPA-ACL.
 Jade s’occupe de la gestion des agents depuis leurs naissances jusqu’à leurs
morts.

5.2.2. Le langage de programmation, Java :


Nous avons dit ci-dessus, que tous les agents dans la plate-forme Jade, sont
entièrement écrits en Java, nous ajoutons aussi comme justification du choix du
langage les critères suivants :

 Java est un langage orienté objet, contenant beaucoup de concepts assez


avancés et simples à utiliser. (Par ex. Héritage, Polymorphisme…)
 Java est un langage multiplateforme, grâce à la JRE8, qui permet aux
programmes Java de s’exécuter sur n’importe quelle machine (quel que soit le Système
d’Exploitation) dotée de cette composante logicielle.
7
Centro Studi E Laboratori Telecomunicazioni, traduit par Centre d’Etude et Laboratoire de
Télécommunication :http://jade.cselt.it
8
Java Runtime Machine : http://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java

57
Réalisation

 Java est très riche, en matière de bibliothèques dont nous nous sommes servi,
par exemple : pour les interfaces graphiques, pour les expressions régulières…
 Parmi les bibliothèques Java disponibles sur Internet, on en trouve beaucoup,
qui servent pour l’interfaçage avec autres langages de programmation et qui permettent
aux programmes écrits en Java de les manipuler et exécuter des commandes de
compilation et d’interprétation comme si on utilisait ce langage de programmation
directement, par exemple : la bibliothèque JPL9 (que nous présenterons ci-après).

5.2.3. La bibliothèque JPL :


JPL est une bibliothèque utilisant l’API du logiciel SWI-PROLOG et l’interface
JNI10 de SUN, fournissant une interface bidirectionnelle entre Java et PROLOG (intégrer
Java en PROLOG ou l’inverse).

5.2.4. Le langage de programmation logique, Prolog :


Le PROLOG est un acronyme de PROgramationLOGique, qui est un langage créé
par par Alain Colmerauer et Philippe Roussel vers 1972, dans le but de faire un langage
qui permet d’utiliser l’expressivité de la logique au lieu une simple succession
d’instruction.

Le PROLOG est utilisé essentiellement dans le domaine d’intelligence artificielle et


dans le traitement du langage naturel. Sa syntaxe et sa sémantique sont considérées
comme très simples et claires.
Prolog est basé sur le calcul des prédicats du premier ordre ; cependant il est
restreint dans sa version initiale à n’accepter que les clauses de Horn. Une des
particularités de Prolog est que l'on peut construire une base de connaissances dans un
ordre indéterminé. Prolog peut ensuite résoudre des séries de problèmes logiques relatifs
à une telle base de connaissances

5.3. Les agents


Comme nous avons dit avant, (cf. Chapitre Conception et Analyse), l’activité de nos
agents, est résumée dans des tâches cycliques (en Jade, on dit, des Comportements), car

9
Java Prolog Library : http://www.swi-prolog.org/packages/jpl/
10
http://fr.wikipedia.org/wiki/Java_Native_Interface

58
Réalisation

elles dépendent de la fréquence de l’envoi et la réception de messages ou requêtes de


différents acteurs du système (agents ou utilisateurs).

Pour l’acheminement des messages, c’est le graphe contextuel (cf. Chapitre


Conception et Analyse) qui nous indique l’expéditeur et les récepteurs.

Dans ce qui suit, on va donner le prototype de chaque agent (tâche), ainsi que la
technologie pour qu’il puisse accomplir son rôle :

a. Agent User :

Figure 18 : Agent User

Il faut distinguer l’agent User de l’agent Anque, car User ne fait que la gestion de
l’interface graphique et libérer l’agent Anque de cette tâche, aussi pour simplifier le code
source des deux agents pour qu’il soit facile à gérer.

Cet agent, comme nous l’avons dit ci-dessus, est responsable du dialogue entre les
différents agents du système, et l’utilisateur, par l’interface graphique que nous verrons
après. C’est pour ça, que sa classe hérite d’une classe spéciale GuiAgent, qui contient
une méthode abstraite :

protectedvoidonGuiEvent(GuiEventge)

Dans le code de cette dernière, on doit traiter tous les types d’évènements que notre
système pourrait recevoir.

public class User extends GuiEvent


{

59
Réalisation

public void setup();


protected void onGuiEvent(GuiEventge);
}
La tâche qui lui est confiée, est Dialog, qui est un comportement cyclique :

public class Dialog extends CyclicBehaviour


{
public voidaction();
}
Dans sa méthode action(), les messages de/vers l’utilisateur seront passés.

b. Agent Anque :

Figure 19 : Agent Anque

Les activités qui sont affectées à l’agent Anque, et qui les realise par sa tâche
Analquesont :

 validateSyntaxe() : pour valider la syntaxe de la requête selon un automate à


etats finis pour l’analyse syntaxique :

60
Réalisation

Figure 20 a : Automate d’état fini de l’analyse syntaxique de questions Pourquoi et


Pourquoi Pas

Figure 20 b : Automate d’état fini de l’analyse syntaxique de l’information


 Cet automate, et pour faciliter sa programmation, est codé en PROLOG, parce
qu’il offre des mécanismes assez puissants pour la gestion de Listes, que toute la partie de
la base de connaissances dédiée aux automates est basée sur des listes.
 nettoie() : pour le nettoyage de l’information de mots vides, par exemple :
Pour la requête : [mohamed, est, le,pere, de,said],
La méthode nettoie, donne : [mohamed,pere,said].

61
Réalisation

 addInformation() : pour l’enrichissement de la base de connaissances par des


informations saisies par l’utilisateur.
 checkPerson(), verifyPersons() : servent pour la verification et l’analyse
sémantique de l’information qui fera partie de la base de connaissance. Par exemple :
Si l’utilisateur tente d’enrichir la base de connaissances par l’information :
moh11 est le pere de said.
Tel que moh11, n’est pas encore défini dans la base de connaissances,
checkPerson(), le signale, et le système affiche le message :
Informations Manquantes : La(les) personne(s) n’est (sont) pas reconnue(s) dans la
base de connaissances :
» moh11.
 verifyQuery() : sert à vérifier l’existence de l’information ou pas, que
l’utilisateur tente d’ajouter. Par exemple :

mohamed est le pere de said.

Cette information existe déjà dans la base de connaissances, donc, par la fonction
verifyQuery(), le système affiche :
L'information : "mohamed est le pere de said" déjà existe dans la base de
connaissances.

La classe de l’agent ainsi de la tâche est comme suit :

public class Anque extends CyclicBehaviour


{
public void action();
protectedbooleanvalidateSyntax(String query);
protectedArrayList<String>nettoie(String[] qry);
public void addInformation();
protected boolean checkPerson(String pers);
protected boolean verifyPersons(ArrayList<String> al);
protected boolean verifyQuery(String qry);
}

62
Réalisation

public class Anque extends Event


{
public void setup();
protected void onGuiEvent(GuiEventge);
}
c. Agent Whow-Key,Whot-Key:
Les codes de ces deux agents sont assez similaires, donc tout ce que nousallons dire
pour l’un est valide pour l’autre. Seuls quelques points de différence qui seront envisagés
au niveau du codage.

Figure 21: Agent Whow-Key etWhot-Key

Les actions de cet agents ce résument en :

 createQuery() : qui s’occupe de la création d’une chaine de prédicats, format


PROLOG, pour l’envoyer à l’agent CONCEX, à partir d’un tableau de motsreprésentant
les mots composants la requête. la requête est nettoyée par la méthode nettoyer(). Par
exemple :
 La requête (pourquoi mohamed est le grand_pere de ismail) après sont
nettoyage par la méthode nettoyer() :
[mohamed,pere,pere,ismail]
Devient par cette méthode : pere(mohamed,V1),pere(V1,ismail).
 nettoie() : identique à celle de Anque.
 findOtherLevel() : C’est une fonction qui se base sur la classe HashTable 11,
pour la définition des possibles approfondissements au le niveau de l’explication générée.
Par exemple :

11
java.util.Hashtable

63
Réalisation

[mohamed,grand_pere,ismail] devient par cette méthode


[mohamed,pere,pere,ismail]
 ableToProvidMoreInformation() : c’est la fonction qui nous dit, en se basant
sur le même principe de findOtherLevel(), et en parcourant tous les chemins possibles, si
on peut ou pas obtenir une explication plus détaillée.

Pour le code de cet agent (Whow-Key ou Whot—Key) :

public class Whow-Key extends Event


{
public void setup();
protected void onGuiEvent(GuiEventge);
}
public class Why-how-key extends CyclicBehaviour
{
public void action();
protected String createQuery(ArrayList<String> al, int i);
protected ArrayList<String>nettoie(String[] qry);
protected ArrayList<String>findOtherLevel(ArrayList<String>
al);
protected booleancheckPerson(String pers);
protected booleanableToProvideMoreInformation
(ArrayList<String> al);
}

d. L’agent Concex:
C’est l’agent qui génère l’explication dans son format final.

64
Réalisation

Figure 22: Agent Concex

Pour ses méthodes :

 findSolutions() : C’est la méthode qui fait un accès à la base de


connaissances, par la bibliothèque JPL, pour trouver des solutions au résultat(La chaine
PROLOG générée par la méthode Whow_key .createQuery()). Par exemple :
Pour la requite : pere(mohamed,V1),pere(V1,ismail), le système génère les
instructions suivantes :

If(Main.openPROLOG())
{
Query q2 = new Query(“pere(mohamed,V1),pere(V1,ismail)”);
If(q2.hasSolution())
{
//Traitement de solutions.
}
}

 match() : Cette méthode trouve, dans cette chaine de caractères, toutes les
variables utilisées dans la construction de l’ensemble de prédicats PROLOG.
Par exemple :
Pour : pere(mohamed,V1),pere(V1,ismail), cette méthode nous retourne V1.
Pour ce faire, nous avons utilisé un concept de Compilation qu’est les expressions
régulières (Regex)12 :

Pattern pattern = Pattern.compile("\\w+[0-9]*\\b");


//C’est le motif de recherche

12
http://fr.wikipedia.org/wiki/Expression_rationnelle

65
Réalisation

Matcher matcher1 = pattern.matcher(s);


//La compilation de la chaine pere(mohamed,V1),pere(V1,ismail)
while (matcher1.find())
{
//Traitementde : matcher1.group();V1
}

 generateExplication() : C’est la méthode qui génère l’explication en langage


naturel en se basant sur le résultat de findSolutions().
 refineExplication() : Cette méthode permet de raffiner l’explication en
éliminant des mots comme : enfant, parent,…, et en les remplaçant par des mots plus
clairs tels que : fils, fille, pere, mere,…,

1. Base de Connaissances :
Chaque base de connaissances, ce compose d’un ensemble de faits, et un ensemble
de règles.

Dans notre base de connaissances, on a utilisé des faits pour :

 Identifier les personnes. Par exemple :


homme(mohamed).
femme(lamia).
 Identifier les relations de base (parenté) entre les personnes déjà identifiées.
Par exemple :
pere(X,Y) :- parent(X,Y),homme(X).
mere(X,Y) :- parent(X,Y),femme(X).
grand_parent(X,Y) :- parent(X,Z),parent(Z,Y).

Aussi, la base de connaissance, contient une implémentation des automates qui
servent à l’analyse syntaxique. Par exemple :

etat1([pourquoi|L]):-etat2(L).
etat2([X|L]):-etat3(L).
etat3([est|L]):-etat4(L).
…….

5.4. Le prototype :
5.4.1. Présentation :

66
Réalisation

Notre système ne comporte pas beaucoup d’interfaces graphiques, car la plupart du


traitement est dans le code. (voir la page suivante)

Figure 23 : La première fenêtre du prototype

Tout d’abord, l’utilisateur doit choisir un fichier (*.pl), fichier de base de


connaissances (PROLOG).

67
Réalisation

Figure 24 : Boite de dialogue pour le choix de la base de connaissances

L’utilisateur doit choisir le fichier de la base de connaissances (Fichier .pl, dans la


figure : BC1.pl).

Puis, dans la figure 23, clique sur Lancer le système, pour avoir la fenêtre suivante :

68
Réalisation

1
4
6 3
5

Figure 25 : Fenêtre principale de l’application

1) Champs de texte pour inscrire la requête (question, information) .


2) Champs de texte pour afficher l’historique de toutes les interactions de
l’utilisateur avec le système.
3) Bouton pour lancer la requête de l’utilisateur, son activité dépend de l’état de
la case à cocher (6), Information :
a. Cochée : Enrichir la base de connaissances.
b. Décochée :Générer l’explication.
4) Bouton pour effacer le contenu des deux champs de texte.
5) Bouton pour sauvegarder l’historique (2) dans un fichier texte.
6) Case à cocher, que son état détermine ce que le système attend de l’utilisateur :
a. Cochée : Information.
b. Décochée : Question.

5.4.2. Etude de Cas :

Maintenant, supposons le scénario suivant :

 L’utilisateur : demande une information en saisissant dans le champ de texte


(1) la requête suivante :
o qui est le pere du grand_pere de ramzi

69
Réalisation

Figure 26 : Exemple 1 (dialogue explicatif)

Le système, après le traitement déjà décrit ci-dessus, répond par :

o mohamed est le père du grand_père de ramzi


 Puis demande, si l’utilisateur a besoin d’une explication du raisonnement qui a
mené à une telle affirmation : (page suivante)

70
Réalisation

Figure 27 : Exemple 2 (dialogue explicatif)

 Si l’utilisateur choisit Oui, le système justifie son affirmation en répondant à la


question :
o pourquoi mohamed est le père du grand_père de ramzi ? (page suivante)

71
Réalisation

Figure 28 : Exemple 3 (dialogue explicatif)

 Quand on clique sur OK, le système demande si l’utilisateur a compris


l’explication ou non (Si c’est possible de générer une autre explication avec un niveau de
détails plus profond). (page suivante)

72
Réalisation

Figure 29 : Exemple 4 (dialogue explicatif)

 Si l’utilisateur demande plus d’informations, le système utilise la méthode


findOtherLevel() de l’agent Whow-key/Whot-key.
 Enfin, quand le système trouve par la méthode
ableToProvideMoreInformation(), qu’il ne pourra plus à générer une explication plus
détaillée, il affiche ce message :

Impossible de générer plus d’information

Comme la figure ci-dessous

73
Réalisation

Figure 30: Exemple 5 (dialogue explicatif)

74

Vous aimerez peut-être aussi