• Aucun résultat trouvé

Voici l'exemple d'une implantation du monde du Wumpus dans le langage FLUX, qui per-met de faire une comparaison entre la dénition formelle du problème exprimée par une logique du premier ordre et le même problème résolu par DTF. Ceci, an de faire ressortir le manque d'expressivité et d'évolutivité des représentations par les logiques du premier ordre.

Une version de base du monde du Wumpus peut être axiomatisée par neuf uents : Ce sont At(x,y) et Facing(d) qui représentent respectivement le fait qu'un agent est dans la case en po-sition (x,y) et qu'il se dirige dans la direction d (correspondant aux quatre points cardinaux). Les axiomes Gold(x,y), Pit(x,y) et Wumpus(x,y) sont des axiomes de position, ils permettent d'indiquer les positions respectives de l'or, des trous et du Wumpus. L'axiome Dead indique que le Wumpus a été tué. Enn, les axiomes Has(x), XDim(n) et YDim(n) représentent le fait qu'un agent possède de l'or ou une èche, x ∈ {gold, arrow} et la taille, initialement inconnue de la grille.

Flux permet entre autres possibilités de combiner la spécication des eets physiques et ceux obtenus par les capteurs en un seul prédicat. Par exemple, stateUpdate(z1,A(x),z2,y) décrit l'état mis à jour de z1 etz2 dépendant de l'eet physique d'une action A(x) et du résultat donné par le capteur Y.

1.2. Principe de la solution en Flux Après l'initialisation du système et l'exécution de la première action "tourne à gauche", l'ex-ploration de la grille par l'agent commence. Le programme utilise trois paramètres entrants, à savoir, les points explorés, les cases explorées et enn le chemin actuel, ce dernier permettant de revenir en arrière. Le choix des directions dépend d'une liste qui encode les quatre directions possibles. L'agent sélectionne le premier élément de la liste en cours. Si la direction peut être explorée et que l'agent n'est pas resté à la même place (ce qui indiquerait que l'agent est entré dans un mur), il vérie tout d'abord s'il a trouvé de l'or. Si c'est le cas, il recherche le chemin le plus court pour revenir à son point de départ. Sinon, il vérie que le Wumpus peut être éli-miné. Alors un nouveau point est ajouté dans l'arbre indiquant la position actuelle. L'agent teste une nouvelle direction. Si la liste courante des directions est vide, l'agent rebrousse chemin. Le prédicat Backtrack permet à l'agent de reculer d'un pas sur le chemin courant en inversant sa direction, et le programme se terminera lorsque le chemin sera vide, signiant que l'agent est revenu à sa position de départ et qu'il a visité et nettoyé le plus grand nombre de cases possible. Si le prédicat auxiliaire Explore(x, y, d, v, z1, z2) est vérié, l'agent peut sans problème aller depuis sa position actuelle (x,y) dans une directiond. Une direction pourrait être explorée dans le cas où la case adjacente n'est pas un élément de la liste v des cases déjà explorées et n'est pas indiquée comme étant hors des limites. De plus, la case adjacente ne doit pas être reconnue comme étant un trou ou contenant le Wumpus.

Voici un exemple de représentations :

Détection d'une case avec une odeur indiquant la présence du Wumpus dans une des cases adjacente stenchPerception(X,Y,Percept,Z) :

XE# =X+ 1, XW# =X−1, Y N# =Y + 1, Y S# =Y 1,

(P ercept=f alse−>

not_holds(wumpus(XE, Y), Z), not_holds(wumpus(XW, Y), Z), not_holds(wumpus(X, Y N), Z), not_holds(wumpus(X, Y S), Z) ;P ercept=true,

or_holds([wumpus(XE, Y), wumpus(X, Y N), wumpus(XW, Y), wumpus(X, Y S)]

, Z)).

Détection d'une case avec un soue indiquant la présence d'un trou dans une des cases adjacente breezePerception(X,Y,Percept,Z):

XE# =X+ 1, XW# =X−1, Y N# =Y + 1, Y S# =Y 1,

(P ercept=f alse−> not_holds(pit(XE, Y), Z), not_holds(pit(XW, Y), Z), not_holds(pit(X, Y N), Z), not_holds(pit(X, Y S), Z) ;P ercept=true,

or_holds([pit(XE, Y), pit(X, Y N), pit(XW, Y), pit(X, Y S)], Z)).

Chapitre 1. Le monde du Wumpus

Détection d'une case avec un éclat indiquant la présence d'or glitterPerception(X,Y,Percept,Z) :

P ercept=f alse−> not_holds(gold(X, Y), Z) ;P ercept=true, holds(gold(X, Y), Z).

Pour des explications détaillées de ces exemples l'on pourra consulter [134].

L'agent ne chasse les Wumpus que dans des endroits connus, et, pour des raisons de simpli-cation, seulement lorsqu'il est dans la même ligne ou la même colonne que ceux-ci. Lorsque le Wumpus est mort, l'agent peut explorer des zones qu'il avait ignorées précédemment. Pour cela, les cases qui se trouvent dans la liste v des cases déjà explorées entre l'agent et le Wumpus mort peuvent être revisitées.

Après avoir trouvé l'or, l'agent utilise le prédicat GoHome pour se diriger vers la sortie par le chemin le plus court. Pour l'aider dans cette tâche, il dispose du prédicat StarPlan qui lui per-met d'utiliser un algorithme de typeA et la distance de Manhattan comme fonction heuristique. Dans les chapitres suivants nous réaliserons une implémentation complète du Wumpus en DTF, ce qui permettra une comparaison avec la méthode Flux.

2

Réalisation d'un simulateur DTF

Figure 2.1 Démonstrateur de DTF

L'agent DTF est un programme divisé en deux parties (représentées à la gure 2.1) : la première est la représentation ontologique de la connaissance (la dénition des types de DTF) et la seconde l'algorithme de démonstration (recherche de preuves des Contextes et des Actions) et la base de données (la situation).

Chapitre 2. Réalisation d'un simulateur DTF

2.1 Aspect ontologique de la connaissance

La partie ontologique répond aux diérentes dénitions des types de base et des types dé-pendants (Contextes et Actions). Elle correspond au modèle purement dynamique de la repré-sentation du monde accessible au programme. Elle peut évoluer en cours d'exécution.

Les types de base sont les concepts d'une ontologie de domaine. Les relations ontologiques entre les concepts sont représentées par des types dépendants (Σet Π types). Par exemple, les types personne et ingénieur s'écrivent respectivementP ersonne:T ype1 et Ingénieur:T ype1. Le lien de subsomption entre les deux, à savoir que Ingénieur est un concept subsumé par Personne peut s'exprimer en utilisant le constructeur Sub:Sub(Personne,Ingénieur).

Les contextes sont construits comme desΣ-types et des Σ-types emboîtés à partir des types de base et des relations ontologiques dénies dans la couche des types. Les prédicats d'actions sont les Π-types, signatures des fonctions utilisées pour réaliser les actions.

Un exemple de la dénition d'une fonction d'action est :

keep-gold , (Πa:agent .b : gold .(keep(a, b)))) où keep est une fonction dépendante du typeagent→gold→P rop.

Enn, les dénitions des types d'actions sont des Σ-types dénis à partir des Contextes et des prédicats d'actions de la couche précédente.

2.2 Représentation de la situation et algorithme de