• Aucun résultat trouvé

croyances distinctes

Avant de g´erer les croyances pour chaque agent, nous utilisions l’algo-rithme 8 pour construire une repr´esentation symbolique du monde. Cette al-gorithme est une boucle simple, qui appelle la fonction agent.computeFacts(objects) qui calcule les faits symboliques d´ecrits plus haut dans le paragraphe 3.1 pour chaque agent pr´esent dans la sc`ene.

Algorithm 8 computeFactsSimple (agents,objects) for all agent in agents do

if agent.isP resent then agent.computeF acts(objects) end if

end for

Dans cette algorithme, les nouvelles croyances ne sont pas calcul´ees si l’agent a quitt´e la sc`ene. Quand il revient, ses croyances sont mises `a jour `a partir de l’´etat courant du monde. Ceci repose sur l’hypoth`ese forte que les agents prennent connaissance imm´ediatement et compl`etement de tous les changements per¸cus par le robot. En d’autres termes, tous les agents pr´esents partagent le mˆeme ´etat symbolique du monde.

7.4 Gestion explicite des croyances distinctes

Le nouvel algorithme de gestion des croyances distinctes pour chaque agent correspond `a l’algorithme 9. Avant d’entrer dans le d´etail de l’algo-rithme, nous pr´esentons l’ensemble des variables et des fonctions utilis´ees. Toutes ces croyances sont du point de vue du robot mˆeme si elles sont rela-tives `a un autre agent. Il s’agit alors du point de vue du robot sur la croyance d’un autre agent.

Variables utilis´ees dans l’algorithme :

Pour chaque objet et agent, nous utilisons les variables positionKnown, hasDistinctPosition et distinctPosition pour d´ecrirent les croyances relatives `a la position de l’objet.

La variable bool´eenne agent.positionKnown(object) indique si un agent connait la position d’un objet.

agent.hasDistinctPosition(object) est une variable bool´eenne qui indique si la croyance courante d’un agent sur la position d’un objet est distincte ou non de celle du robot.

agent.distinctPosition(object) contient la croyance distincte de l’agent sur la position d’un objet si l’agent a une croyance distincte pour cette objet. Elle est vide autrement.

La croyance du robot sur la position de l’objet est stock´ee dans une autre variable.

Ces variables permettent de d´ecrire ais´ement les croyances de chaque agent `a propos des positions d’un objet. Par exemple :

Robert ne sait pas o`u est la boˆıte grise. robot.positionKnown(greyBox) = true

robert.positionKnown(greyBox) = false robert.hasDistinctPosition(greyBox) = false robert.distinctPosition(greyBox) = empty

Robert et le robot croient tous les deux que la boˆıte grise est `a une position donn´ee.

robot.positionKnown(greyBox) = true robert.positionKnown(greyBox) = true robert.hasDistinctPosition(greyBox) = false robert.distinctPosition(greyBox) = empty.

Robert croit que la boˆıte grise est `a une position someDistinctP osition1 dans l’espace qui est connue du robot mais diff´erente de la croyance actuelle du robot sur la position de la boˆıte grise.

robot.positionKnown(greyBox) = true robert.positionKnown(greyBox) = true robert.hasDistinctPosition(greyBox) = true

robert.distinctPosition(greyBox) = someDistinctPosition1

Robert croit que la boˆıte grise est `a une position inconnue du robot. robot.positionKnown(greyBox) = false

robert.positionKnown(greyBox) = true robert.hasDistinctPosition(greyBox) = false robert.distinctPosition(greyBox) = empty

agent.SaveCurrentSharedPositions(objects) :

Cette fonction est appel´ee quand un agent quitte la sc`ene. Elle enregistre pour chaque objet dans la liste objects la position courante dans distinctP osition sauf si cet agent a d´ej`a une position distincte pour cet objet. Elle a ´egalement pour effet de mettre la variable agent.hasDistinctPosition(object) `a true pour chacun de ces objets.

objects.previouslyUnseenAreUnknown(agent) :

cette fonction est appliqu´ee une seule fois au moment de l’apparition de l’agent agent. Elle assigne la variable positionKnown `a false pour tous les objets de la liste objects qui n’avaient jamais ´et´e vus par cet agent jusque l`a.

object.isSeenAtRobotPosition(agent) :

cette fonctions indique si un agent peut voir un objet object `a la position qu’il a dans le mod`ele du robot. agent.deleteDistinctPosition(object) :

cette fonction efface la variable distinctP osition d’un agent pour un objet object. objects.setDistinctPositionsInModel(agent) :

cette fonction d´eplace dans le mod`ele 3D chacun des objets de la liste objects vers la position distinctP osition d’un agent si elle est distincte de celle du robot.

agent.computeFacts(objects) :

calcule les faits pour tous les objets de la liste objects en utilisant les positions actuelles dans le mod`ele 3D qui sont normalement celle d’un agent sp´ecifique.

object.isSeenAtDistinctPosition(agent) :

cette fonction d´etermine si un agent peut voir un objet object l`a o`u il croit que l’objet est. objects.resetRobotPositionsInModel() :

cette fonction r´einitialise dans le mod`ele 3D les positions de tous les objets de la liste objects sur les croyances du robot. Tab. 7.1 – Fonctions utilis´ees par l’algorithme 9.

L’algorithme 9 de calcul des faits avec gestion des croyances distinctes est pr´esent´e ci dessous en pseudo-code. Lorsqu’un agent est absent, des objets peuvent ˆetre d´eplac´es. Quand l’agent revient, il y a trois cas distincts si un objet a boug´e :

– L’agent voit la position courante de l’objet et per¸coit donc le change-ment. Il n’aura pas de croyance distincte sur la position de cet objet. – L’agent ne voit pas la nouvelle position mais il per¸coit que l’objet n’est

plus l`a o`u il ´etait. Dans ce cas, l’agent sait qu’il ne sait plus o`u est cet objet.

– L’agent n’a aucun moyen de percevoir le d´eplacement car il ne peut voir ni la nouvelle position, ni l’absence de l’objet de la position pr´ec´edente. Dans ce cas, l’agent a une croyance distincte de celle du robot tant que ces deux conditions restent vrai ou si un autre agent l’informe de la nouvelle position.

Nous nous appuyons sur l’hypoth`ese simplificatrice suivante : le robot consid`ere que les humains pr´esents dans la sc`ene per¸coivent et interpr`etent correctement toutes les actions sur les objets et connaissent donc toutes les nouvelles positions des objets mˆeme si certains de ces objets ne sont pas visibles dans ces positions. L’agent peut alors imaginer cette position compte tenu de l’action. Les positions distinctes sont autoris´ees uniquement pour les objets qui peuvent ˆetre d´eplac´es ais´ement et cach´es derri`ere d’autres objets plus gros. Cette gestion des positions distinctes peut augmenter les calculs n´ecessaires. Les faits relatifs `a un objet pour lequel un agent poss`ede une position distincte doivent ˆetre recalcul´es pour cet agent. Dans le pire des cas, le nombre de calculs suppl´ementaires est le produit du nombre d’objets pouvant avoir une position distincte que multiplie le nombre de faits par objet que multiplie le nombre d’agents autres que le robot. Dans nos sc´enarios avec au maximum trois agents et cinq objets pouvant ˆetre d´eplac´es, les calculs suppl´ementaires restent raisonnables.