• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Simulation de comportements de foule
 

Simulation de comportements de foule

on

  • 4,182 views

Ce document est un mémoire de maîtrise qui présente les résultats du développement d'un simulateur de comportements pour des entités virtuels évoluant dans un environnement géographique 2D/3D ...

Ce document est un mémoire de maîtrise qui présente les résultats du développement d'un simulateur de comportements pour des entités virtuels évoluant dans un environnement géographique 2D/3D virtuel.

Statistics

Views

Total Views
4,182
Views on SlideShare
4,174
Embed Views
8

Actions

Likes
5
Downloads
0
Comments
1

2 Embeds 8

http://static.slidesharecdn.com 7
http://www.slashdocs.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Simulation de comportements de foule Simulation de comportements de foule Document Transcript

    • PATRICK PELLETIER SIMULATION DE COMPORTEMENTS DE FOULE Thèse présentée à la Faculté des études supérieures de l'Université Laval dans le cadre du programme de maîtrise en informatique pour l’obtention du grade de maître ès sciences (M.Sc.) FACULTÉ DES SCIENCES ET GÉNIE UNIVERSITÉ LAVAL QUÉBEC SEPTEMBRE, 2003 © Patrick Pelletier, 2003
    • Résumé Ce projet de maîtrise s’inscrit dans un projet de plus grande envergure portant sur la simulation de foule. Plus spécifiquement, ce mémoire porte sur le module comportemental du système. Notre modèle attribue des profils aux agents, définissant leurs objectifs et leurs besoins. Un agent fait des choix parmi les objectifs qu’il peut tenter d’atteindre dans une situation donnée. Il associe une priorité à ses objectifs variant selon l’intensité courante du besoin, les contraintes temporelles définies et les opportunités, afin de prendre des décisions reflétant son état et celui de son environnement. En intégrant le module comportemental à plusieurs autres parties, le projet a abouti à la création de MAGS (Multi- Agent Geo-Simulation) qui est une plateforme de simulation multi-agent temps réel se déroulant dans un environnement géographique virtuel. Un exemple portant sur des comportements de foule comprenant des attroupements de spectateurs autour d’amuseurs publics a servi à montrer la fonctionnalité du modèle.
    • ii Abstract This master’s degree project is a part of bigger project about crowd simulation in a virtual urban environment. More specifically, this thesis deals with the behavioural module of the system. In the behavioural model, each agent has objectives and needs related to its profile. An agent has to choose among the potentially attainable objectives in a given situation. The agent prioritizes its objectives according to the intensity of its own needs, to the temporal constraints and to the opportunities, making choices following its state and the environment’s state. By integrating the behavioural module and the other parts of the project, we built a platform for real-time multi-agent simulation in a geographical virtual environment called MAGS, which stands for Multi-Agent Geo-Simulation. The first tests were made on an example of public entertainers giving shows to spectators, showing the functionality of the model.
    • Remerciements En premier lieu, je tiens à remercier le centre de Recherche et Développement de la Défense du Canada – Valcartier pour m’avoir donné l’opportunité de travailler sur un projet aussi intéressant. Sans cette opportunité, je n’aurais sûrement pas trouvé de projet qui concordait autant que celui-ci avec mes intérêts personnels. J’exprime ma gratitude à mon directeur de recherche, Dr Bernard Moulin, pour son appui constant. M. Moulin est un directeur avec de grandes qualités de leader. Il est très ambitieux et il a su nous transmettre sa vision du projet. Sa remarquable vivacité d’esprit nous apporta de très bonnes solutions aux problèmes rencontrés. Car, malgré une quantité considérable de projets à gérer, il est toujours aux courants de la situation de chacun d’eux. Son expérience lui confère aussi la capacité de déceler rapidement la source des problèmes. Sans compter son inépuisable patience qui est constamment mise à l’épreuve par tous les étudiants qu’il dirige. Je tire lui tire mon chapeau, pour son extraordinaire talent de leader! Je remercie aussi toute l’équipe de travail. Sans nos efforts combinés, nous n’aurions jamais abouti à ces résultats. Je les remercie aussi pour le support moral qu’il mon procurés et pour leur compagnie au laboratoire et durant nos sorties. Mon dernier remerciement va tout spécialement à Claude Bolduc, qui m’a appuyé le long d’un stage. Son aide précieuse, son attitude positive et sa joie de vivre m’ont permis d’améliorer et de développer tout le potentiel de notre modèle.
    • « It would be very singular that all nature and all the stars should obey eternal laws, and that there should be one animal five feet tall which, despite these laws, could always act as suited his caprice. It would act by chance and we know that chance is nothing. We have invented this word to express the known effect of any unknown cause. » - Voltaire
    • Table des matières Chapitre I - Introduction .........................................................................................................1 I.1 – Introduction générale......................................................................................................2 I.2 – Contexte du projet ..........................................................................................................3 I.3 – Problématique & objectifs..............................................................................................4 I.4 – Méthodologie de recherche ............................................................................................5 I.5 – Structure du mémoire .....................................................................................................6 Chapitre II - Étude du domaine...............................................................................................7 II.1 – Introduction ...................................................................................................................8 II.2 – Psychologie de la foule .................................................................................................9 II.2.1 – Foule, attroupement et historique...........................................................................9 II.2.1.1 – Expériences quotidiennes................................................................................9 II.2.1.2 – Densité sociale et spatiale et distance interindividuelle ................................10 II.2.1.3 – Modèle de surcharge de stimuli ....................................................................12 II.2.1.4 – Densité en tant que contrainte comportementale ..........................................13 II.2.1.5 – Conception « Top-Down » versus « Bottom-Up » .......................................13 II.2.2 – Comportement humain dans les organisations.....................................................13 II.2.2.1 – Comportement organisationnel .....................................................................15 II.2.2.2 – Socialisation organisationnelle......................................................................16 II.2.2.3 – Buts individuels et organisationnels..............................................................21 II.2.2.4 – Motivation et performance ............................................................................26 II.2.2.5 – Influence et leadership ..................................................................................29 II.2.2.6 – Dynamiques de groupe..................................................................................34 II.2.3 – Psychologie sociale ..............................................................................................36 II.2.3.1 – Conception de soi..........................................................................................36 II.2.3.2 – Percevoir les autres .......................................................................................37 II.2.3.3 – Processus de groupes.....................................................................................38 II.2.4 – Comportements de foule ......................................................................................42 II.2.4.1 – Dimensions des foules...................................................................................43 II.2.4.2 – Types de foule ...............................................................................................45 II.2.5 – Conclusion sur la psychologie de la foule............................................................48 II.3 – Simulation de comportements de foule.......................................................................49 II.3.1 – Comportements de bas niveau .............................................................................49 II.3.1.1 – Modèle de dynamique de matériaux granulaires ..........................................50 II.3.1.2 – Modèle de dynamique des fluides.................................................................51 II.3.1.3 – Système d’attroupement................................................................................51 II.3.2 – Comportements de haut niveau............................................................................52 II.3.2.1 – Architecture du modèle .................................................................................53 II.3.2.2 – Relations entre les individus .........................................................................57 II.3.2.3 – Exigences pour des agents sociaux crédibles................................................58 II.3.2.4 – Conclusion sur le modèle de Thalmann ........................................................64 II.4 – Conclusion...................................................................................................................65 Chapitre III - Les concepts du module comportemental de MAGS .....................................66
    • vi III.1 – Introduction................................................................................................................67 III.2 – Types d’agents de MAGS..........................................................................................70 III.2.1 – Agents mobiles & objets.....................................................................................70 III.2.2 – Agents groupes & clusters ..................................................................................71 III.2.3 – Agent scénario ....................................................................................................72 III.2.4 – Résumé des types d’agents .................................................................................73 III.3 – Profil des agents.........................................................................................................74 III.4 – Comportement à base d’objectifs ..............................................................................76 III.4.1 – Structure générale ...............................................................................................77 III.4.2 – Cycle de vie ........................................................................................................79 III.4.3 – Règle ...................................................................................................................82 III.4.4 – Précondition ........................................................................................................83 III.4.5 – Élément de formule.............................................................................................84 III.4.6 – Récurrence ..........................................................................................................89 III.5 – Motivation du comportement d'un agent ...................................................................90 III.5.1 – Besoins et Priorité des objectifs..........................................................................90 III.5.2 – Influence de l’intensité d’un besoin sur la priorité .............................................91 III.5.3 – Influence des opportunités sur la priorité ...........................................................92 III.5.4 – Influence du temps sur la priorité .......................................................................93 III.6 – Conclusion .................................................................................................................94 Chapitre IV - Le fonctionnement du module comportemental de MAGS ...........................96 IV.1 – Modules de MAGS....................................................................................................97 IV.2 – Interface entre les modules ......................................................................................101 IV.2.1 – Conventions des diagrammes de classes ..........................................................102 IV.3 – Module d’agents ......................................................................................................103 IV.4 – Module des états ......................................................................................................106 IV.5 – Mécanisme de fixage des référents..........................................................................110 IV.6 – Module Comportemental.........................................................................................114 IV.6.1 – Classe TProfile .................................................................................................115 IV.6.2 – Classe TRule.....................................................................................................117 IV.6.3 – Classe TAction .................................................................................................119 IV.6.4 – Classe TInternalReferent ..................................................................................120 IV.6.5 – Classe TPreCondition .......................................................................................122 IV.6.6 – Classe TFormulaElement .................................................................................123 IV.7 – Module des objectifs................................................................................................126 IV.7.1 – Classe TObjective.............................................................................................128 IV.7.2 – Classe TObjectiveReferents .............................................................................130 IV.7.3 – Classe TInternalObjectiveReferent...................................................................131 IV.7.4 – Classe TPrioritiesTimes....................................................................................132 IV.7.5 – Classe TConstrainedPrioritiesTimes ................................................................133 IV.7.5.1 – Contraintes temporelles et priorités associées ...........................................134 IV.7.5.2 – Interprétation des contraintes temporelles.................................................135 IV.7.5.3 – Calcul du modificateur de priorité relatif au temps ...................................136 IV.7.5.4 – Calcul lorsque des contraintes temporelles sont indéfinies .......................138 IV.7.5.5 – Algorithme de mise à jour du modificateur de priorité .............................139 IV.8 – Algorithme de vérification du comportement .........................................................141
    • vii IV.8.1 – Vérification du comportement au niveau de l’agent ........................................142 IV.8.2 – Vérification du comportement au niveau du profil ..........................................143 IV.8.3 – Vérification du comportement au niveau d’un objectif....................................144 IV.8.4 – Vérification du comportement au niveau d’une règle ......................................148 IV.8.5 – Vérification du comportement au niveau d’une précondition ..........................153 IV.8.6 – Calcul d’un élément de formule .......................................................................154 IV.9 – Sélection et d’exécution du comportement .............................................................157 IV.9.1 – Sélection et exécution au niveau de l’agent......................................................157 IV.9.2 – Exécution au niveau du profil...........................................................................158 IV.9.3 – Exécution au niveau d’un objectif ....................................................................159 IV.9.4 – Exécution d’une règle.......................................................................................161 IV.10 – Conclusion .............................................................................................................162 Chapitre V - Application à un phénomène de foule ...........................................................164 V.1 – Mise en situation .......................................................................................................165 V.2 – Données nécessaires..................................................................................................166 V.3 – Description des objectifs...........................................................................................167 V.4 – Description technique des objectifs ..........................................................................171 V.4.1 – États dynamiques ...............................................................................................171 V.4.2 – Modèle de présentation ......................................................................................171 V.4.3 – Objectif 2.1 : Avoir fixé la destination de la présentation .................................177 V.4.3.1 – Activation de l’objectif 2.1 .........................................................................177 V.4.3.2 – Action de l’objectif 2.1 ...............................................................................178 V.4.3.3 – Complétude de l’objectif 2.1.......................................................................178 V.4.3.4 – Composition de l'objectif 2.1 ......................................................................181 V.5 – Conclusion sur le déroulement de la simulation .......................................................183 V.5.1 – Problèmes rencontrés et solutions possibles ......................................................184 V.6 – Conclusion sur l’exemple d’application ...................................................................187 Chapitre VI - Conclusion....................................................................................................188 VI.1 – Résumé ....................................................................................................................189 VI.1.2 – MAGS comparé aux théories étudiées .............................................................190 VI.1.2.1 – Expérience quotidienne de foule ...............................................................191 VI.1.2.2 – Comportement humain dans les organisations ..........................................192 VI.1.2.3 – Psychologie sociale....................................................................................194 VI.1.2.4 – Types de foule ...........................................................................................195 VI.1.2.5 – Conclusion .................................................................................................196 VI.1.3 – MAGS comparé aux autres simulateurs de foules............................................197 VI.1.4 – Comparaison avec les architectures BDI..........................................................199 VI.2 - Améliorations possibles du système ........................................................................200 VI.2.1 – Extensions des éléments de formule.................................................................200 VI.2.1.1 – Extension des opérateurs ...........................................................................200 VI.2.1.2 – Extension des types de données.................................................................201 VI.2.1.3 – Ajout d’éléments de formule .....................................................................201 VI.2.2 – Ajout d’action ...................................................................................................202 VI.2.3 – Extensions des référents ...................................................................................202 VI.2.3.1 – Ajout de sources de référents.....................................................................203
    • viii VI.2.3.2 – Structure efficace en rapport à la quantité de mémoire utilisée ................203 VI.2.3.3 - Types de référents possibles.......................................................................204 VI.2.4 – Possibilité pour la gestion de la suspension......................................................204 VI.2.4.1 – Suspension avec reprise.............................................................................205 VI.2.4.4 – Conclusion sur la suspension.....................................................................208 VI.2.5 – Amélioration des profils ...................................................................................208 VI.3 – Cohérence des comportements ................................................................................210 VI.4 – Efficacité du système...............................................................................................211 VI.5 – Conclusion finale.....................................................................................................212 Annexe I - Description technique d’objectifs .....................................................................218 I.1 – Objectif 1 : S’être déplacé vers une destination .........................................................219 I.1.1 – Activation de l’objectif 1.....................................................................................219 I.1.2 – Complétude de l’objectif 1 ..................................................................................219 I.1.3 – Composition de l’objectif 1 .................................................................................220 I.2 – Objectif 1.1 : Avoir choisi une destination.................................................................220 I.2.1 – Activation de l’objectif 1.1..................................................................................221 I.2.2 – Action de l’objectif 1.1........................................................................................222 I.2.3 – Complétude de l’objectif 1.1 ...............................................................................223 I.2.4 – Composition de l’objectif 1.1 ..............................................................................225 I.3 – Objectif 1.2 : Avoir géré l'envie de se déplacer..........................................................227 I.3.1 – Activation de l’objectif 1.2..................................................................................227 I.3.2 – Action de l’objectif 1.2........................................................................................228 I.3.3 – Complétude de l’objectif 1.2 ...............................................................................228 I.3.4 – Composition de l'objectif 1.2...............................................................................229 I.4 – Objectif 2 : Avoir donné un spectacle de rue .............................................................229 I.4.1 – Activation de l’objectif 2.....................................................................................230 I.4.2 – Complétude de l’objectif 2 ..................................................................................231 I.4.3 – Composition de l’objectif 2 .................................................................................232 I.5 – Objectif 2.1 : Avoir fixé la destination de la présentation..........................................233 I.6 – Objectif 2.2 : Avoir attiré des spectateurs ..................................................................233 I.6.1 – Activation de l’objectif 2.2..................................................................................234 I.6.2 – Action de l’objectif 2.2........................................................................................237 I.6.3 – Complétude de l’objectif 2.2 ...............................................................................238 I.6.4 – Composition de l'objectif 2.2...............................................................................241 I.7 – Objectif 2.3 : Avoir terminé le spectacle....................................................................243 I.7.1 – Activation de l’objectif 2.3..................................................................................244 I.7.2 – Action de l’objectif 2.3........................................................................................244 I.7.3 – Complétude de l’objectif 2.3 ...............................................................................245 I.7.4 – Composition de l'objectif 2.3...............................................................................246 I.8 – Objectif 2.4 : Avoir ramassé de l'argent .....................................................................247 I.8.1 – Activation de l’objectif 2.4..................................................................................247 I.8.2 – Actions de l’objectif 2.4 ......................................................................................248 I.8.3 – Complétude de l’objectif 2.4 ...............................................................................249 I.8.4 – Composition de l'objectif 2.4...............................................................................250
    • Liste des tableaux Tableau II.2 : Comportements des groupes ..........................................................................54 Tableau III.1 : Causes des transitions dans le cycle de vie d’un objectif .............................80 Tableau III.2 : Exemple de l’influence de l’intensité d’un besoin sur la priorité .................92 Tableau III.3 : Exemple de l’influence de la perception d’une opportunité sur la priorité ..92 Tableau IV.1 : Modificateur de priorité d’un état dynamique selon la valeur courante.....175
    • Liste des figures Figure II.1 : Sous-systèmes organisationnels clés ................................................................14 Figure II.2 : Cadre de travail d’étude du comportement humain dans les organisations .....17 Figure II.3 : Le Processus de socialisation ...........................................................................19 Figure II.4 : Résumé du processus de socialisation organisationnel ....................................23 Figure II.5 Motivation, comportement et buts......................................................................24 Figure II.6 : Le contexte du comportement individuel .........................................................27 Figure II.7 : Pyramide de Maslow ........................................................................................28 Figure II.8 : Processus de motivation : facteurs affectant l’effort individuel, ......................30 la performance et la satisfaction ...........................................................................................30 Figure II.9 : Différents moyens pour influencer le comportement .......................................32 Figure II.10 : L’échange social entre le leader et les suiveurs d’une organisation...............33 Figure II.11 : Étendu du comportement de leadership.........................................................35 Figure II.12 : Déclenchement d’un comportement déviant ..................................................40 Figure II.13 : « Groupthink » : antécédents, symptômes et conséquences...........................42 Figure II.14 : Simulation de l’évacuation d’une foule dans un avion...................................50 Figure II.15 : Architecture du modèle CROWD...................................................................54 Figure II.16 : Architecture globale du modèle comportemental...........................................60 Figure II.17 : Algorithme de calcul d’une émotion ..............................................................61 Figure II.18 : Structure d’un comportement .........................................................................62 Figure II.19 : Structure d’une cellule comportementale .......................................................63 Figure II.20 : Comportement élémentaire encapsulant un comportement spécialisé ...........63 Figure III.1 : Exemple d’un arbre d’objectifs .......................................................................77 Figure III.2 : Cycle de vie d’un objectif ...............................................................................79 Figure III.3 : Exemple d’élément de formule de type nombre réel ......................................85 Figure III.4 : Exemple d’élément de formule de type variable.............................................86 Figure III.5 : Exemple d’élément de formule de type nœud.................................................87 Figure III.6 : Exemple d’arbre d’éléments de formule .........................................................88 Figure IV.1 : Modules de MAGS .........................................................................................97 Figure IV.2 : Vision globale des algorithmes du module comportemental ..........................98 Figure IV.3 : Diagramme de classes montrant l’interface entre les modules .....................101 Figure IV.4 : Diagramme de classes du module d'agents ...................................................104 Figure IV.5 : Diagramme de classes du module des états ..................................................106 Figure IV.6 : Mécanisme de fixage des référents ...............................................................111 Figure IV.7 : Diagramme de classes du module comportemental......................................114 Figure IV.8 : Classe TProfile et structures contenues dans la classe..................................116 Figure IV.9 : Classe TRule .................................................................................................118 Figure IV.10 : Classe TAction............................................................................................119 Figure IV.11 : Classe TInternalReferent.............................................................................121 Figure IV.12 : Classe TPreCondition .................................................................................122 Figure IV.13 : Classe TFormulaElement et union utilisée .................................................124 Figure IV.14 : Diagramme de classes du module des objectifs..........................................127 Figure IV.15 : Exemple décrivant les index de données spécifique à un agent .................128 Figure IV.16 : Classe TCompositeObjective et TElementaryObjective.............................130
    • xi Figure IV.17 : Évolution de la priorité en fonction du temps.............................................134 Figure IV.18 : Ordre de mise à jour des objectifs...............................................................142 Figure V.1 : Résumé du rôle qui permet aux agents de se déplacer ...................................167 Figure V.2 : Résumé du rôle qui permet à un amuseur public de donner un spectacle......168 Figure V.3 : Résumé du rôle du spectateur.........................................................................170 Figure V.4 : Objectif 2.1.....................................................................................................177 Figure I.1 : Objectif 1 .........................................................................................................219 Figure I.2 : Objectif 1.1 ......................................................................................................221 Figure I.3 : Objectif 1.2 ......................................................................................................227 Figure I.4 : Objectif 2 .........................................................................................................230 Figure I.5 : Objectif 2.2 ......................................................................................................234 Figure I.6 : Objectif 2.3 ......................................................................................................243 Figure I.7 : Objectif 2.4 ......................................................................................................247
    • Chapitre I Introduction
    • 2 I.1 – Introduction générale La recherche sur la simulation informatique est en effervescence depuis plusieurs années. Le fait est que les domaines d’application possibles sont très diversifiés contribue grandement à l’essor de ce domaine à caractère polyvalent. À commencer par des applications scientifiques telles que la physique, le biologie ou la chimie. À continuer par les applications de divertissement, qui sont aussi très diversifiées. Nous pensons à la simulation de la création et de la gestion d’une ville dans SimCityTM ou du grand succès commercial The SimsTM, qui simule la vie d’humains dans différents contextes. Plus récemment, l’industrie du cinéma est aussi entrée dans la partie, voyant l’opportunité de créer des foules de milliers de personnes sans pour autant avoir à engager des acteurs réels. Grâce à ces avances technologiques, nous pouvons assister à des scènes d’un réalisme impressionnant dans plusieurs films. Par exemple, dans le film « A bug’s life » des milliers de fourmis expriment différentes émotions et accomplissent diverses actions qui sont l’aboutissement d’un simulateur. Bien sûr, il ne faut pas oublier l’excellent travail des artistes. Le film « Two Towers » comprenait aussi des scènes inoubliables, d’un grand réalisme. Derrière cette réussite incontestable, un simulateur de foule permettait à des milliers d’acteurs virtuels, combinés aux acteurs réels, de constituer une scène de prise d’une forteresse qui aurait été quasi impossible à créer autrement.
    • 3 I.2 – Contexte du projet La simulation de comportements de foule n’intéresse pas seulement l’industrie du jeu et du cinéma. Le domaine militaire porte aussi un intérêt particulier à ce type de simulations pour des motifs stratégiques. Par exemple, un système de simulation de comportement de foule multi-agent aurait été très utile en vue de la préparation du Sommet des Amériques, à Québec en 2001. Un tel système aurait aidé à la prise de décisions stratégiques, en permettant de visualiser l’environnement et de déterminer les emplacements idéals pour les clôtures, par rapport à la réaction de la foule simulée. Le centre de Recherche et développement pour la défense Canada - Valcartier, RDDC Valcartier, a donc donné au Laboratoire d'Informatique Cognitive dirigé par Bernard Moulin, le mandat d’explorer le domaine et de développer un système multi-agent simulant les comportements de foule. La création d’un tel outil représente un défi de taille qui nécessite toute une équipe de travail pour arriver à terme. Non seulement il y a tout l’environnement en 3D à créer à partir de données d'un Système d'Information Géographiques, mais il faut aussi représenter ces donnés dans les modèles du système de façon à les rendre utilisables par les agents. De plus, les agents doivent posséder plusieurs caractéristiques, telles que la perception, la mémoire, la capacité de naviguer dans l’environnement. Finalement, le projet a abouti à la création de MAGS, pour Multi-Agent Geo- Simulation. C’est une plateforme de simulation multi-agent temps réel se déroulant dans un environnement géographique virtuel, qui est en constante évolution. Étant donné que les domaines d’application sont très variés, MAGS s’inscrit dans un projet de plus grande envergure que la simulation de comportements de foule. Le présent mémoire s’intéresse plus spécifiquement au modèle de comportements des agents que nous avons développé.
    • 4 I.3 – Problématique & objectifs Nous avions donc le mandat d’explorer la théorie du domaine et de développer un modèle de comportements reflétant au mieux le comportement humain. En plus des humains, les objets de l’environnement et les groupes d’agents devaient aussi être des agents intelligents. Un modèle de comportement suffisamment générique et abstrait était donc nécessaire pour permettre de simuler le comportement des différents types d’agents. Chaque agent nécessitait suffisamment de caractéristiques le définissant en tant qu’individu, objet ou groupe d’agents de la simulation. Chaque agent devait pouvoir raisonner sur ses propres caractéristiques, ainsi que sur celles des autres agents de la simulation. Dépendamment du profil de l’agent, celui-ci devait être en mesure adopter différents comportements, selon les raisonnements effectués ainsi que ses besoins. De plus, la simulation devait répondre aux exigences posées par le temps réel, cela malgré la présence de milliers d’agents dans l’environnement. Nous avions donc des contraintes d’efficacité affectant les décisions de conception du système. Face à cette problématique, nous avons les trois objectifs généraux suivants : - Développer un modèle de comportement permettant de représenter des comportements individuel, de groupe et de foule. - Implanter le modèle dans un engin de simulation. - Illustrer la validité du modèle par un exemple d'application portant sur un phénomène de foule.
    • 5 I.4 – Méthodologie de recherche Les recherches ont commencé par l’étude des théories portant sur les comportements d’individus, de groupes et de foules, ainsi que sur les techniques de simulation. Plusieurs articles et livres portant sur les théories de la psychologie sociale, les comportements de groupe et la foule ont été étudiés de façon à construire un modèle qui s'approche au mieux des théories sociales ou psychologiques. Nous avons aussi exploré le domaine de la simulation de comportements de foule et des différentes techniques utilisables dans ce contexte. La simulation de comportements de foule est un domaine très vaste et complexe. Les bases théoriques sont souvent empiriques et pas toutes en accord et ce autant dans le domaine de la psychologie des foules que dans la simulation. Suite à cela, nous avons utilisé le meilleur de notre jugement pour construire un premier modèle de comportement. Ensuite, nous avons développé un premier prototype qui implantait le modèle proposé. Le premier modèle de comportement implanté suivait les modèles classiques de comportements à base de règles. Bien qu’il fut satisfaisant, il n’était pas suffisant pour répondre à tous nos besoins. En effet, ce type de système est très réactif et limité par la simplicité des règles. Le modèle ne s’approchait pas suffisamment des théories du domaine. C’est lors du développement d’un modèle de spécification de scénarios que nous avons opté pour un système à base d’objectifs permettant de définir des contraintes sur le temps et l’environnement afin de contrôler le déroulement des comportements. Notre modèle comportemental se rapproche des systèmes BDI. Nous avons donc implanté ce nouveau modèle dans un second prototype, que nous avons amélioré grandement depuis ses débuts.
    • 6 I.5 – Structure du mémoire Ce mémoire commence par la présentation de deux domaines pertinents pour nos travaux : la théorie sur les comportements de foule et diverses simulations qui portent sur les comportements de foule. Le chapitre II vise à présenter ces deux domaines. Ainsi, nous abordons plusieurs théories proposées en psychologie sociale, sur le comportement de l’individu dans une organisation et sur la foule en tant que telle. Le chapitre III explique le modèle de comportement que nous avons développé, en définissant tous les concepts nécessaires à sa compréhension. Le chapitre IV entre plus en détail, en exposant le fonctionnement du modèle. Dans ce chapitre, nous explorons les différentes classes qui ont servi à implanter le modèle dans le système. Nous verrons aussi les algorithmes et mécanismes implantés qui mettent en jeu les différents concepts, formant un tout qui permet à un agent de raisonner sur lui-même et sur son environnement de façon à décider de son comportement. Le chapitre V décrit un exemple d’application qui simule un phénomène de foule. Le scénario défini et simulé comprend un ensemble d’agents qui se déplacent dans une partie de la ville de Québec et des amuseurs publics qui présentent des spectacles devant des attroupements. Finalement, le chapitre VI conclut en comparant le modèle aux domaines d'étude et en expliquant les limites et les améliorations possibles du système.
    • CHAPITRE II Étude du domaine
    • 8 II.1 – Introduction Le champ d’étude de ce mémoire rassemble deux domaines fondamentaux. La première partie couvre tout ce qui a trait à la psychologie et la sociologie par rapport au comportement de foule. Au cours des années de recherches, les scientifiques qui étudiaient les comportements de foule se sont rendu compte qu’il est impossible de dissocier le comportement individuel du comportement de l’individu dans la foule. C’est pourquoi l’étude effectuée couvre autant des parties de comportements individuels que des parties de comportements collectifs. Le second domaine est, bien sûr, celui de la simulation de comportement de foule. Nous verrons que plusieurs tentent de simuler le comportement de foule en utilisant différentes approches.
    • 9 II.2 – Psychologie de la foule La section II.2 traite de la première grande partie de la simulation de foule. Nous discutons de plusieurs théories plus ou moins en détail. L’annexe I comprend plus d’explications, pour les lecteurs intéressés par le domaine. Nous verrons d'abord, une conception générale de foule et d'attroupement ainsi qu'une revue historique sur les modèles de foule développés dans le passé. Ensuite, il sera question du comportement des humains dans les organisations. Puis, nous verrons quelques théories intéressantes de psychologie sociale. Ces deux sections résument plusieurs théories au niveau des groupes et de l’individu. Finalement, nous verrons comment les foules peuvent être caractérisées suivant les individus qui la forme. II.2.1 – Foule, attroupement et historique Tout d’abord, il faut préciser qu’en anglais, le terme « crowd » peut être utilisé en tant que nom ou verbe. Malheureusement, il n’y a pas de traduction française pour la forme verbale du mot. La meilleure traduction est « attroupement » et ne reflète pas exactement la définition anglaise du mot. « Crowd » et « crowding » sont deux champs de recherche différents et indépendants. La foule peut être définie comme étant un rassemblement d’un grand nombre de personnes dans un même endroit. Mais, la forme verbale du mot anglais « crowd » a une signification plus nébuleuse. « Crowding » est définie comme étant trop de monde dans pas assez de place. La présente section résume quelques parties du livre [Graumann & Moscovici 86]. II.2.1.1 – Expériences quotidiennes Les scénarios de masses font partie de la vie quotidienne de plusieurs personnes. Nous pensons, par exemple, au métro, où des centaines et des milliers de personnes en files
    • 10 se poussent et se font pousser pour avancer, ils s’entassent dans des compartiments et ils sont déplacés par la masse plutôt que de leur propre gré. Il y a peu d’études empiriques rigoureusement définies ou même de descriptions fiables des phénomènes de masse. Plusieurs théories tentent d’expliquer les changements au sein des comportements des individus d’une foule, mais elles semble insuffisante à la construction d’un modèle générique de comportement. Le comportement de foule est un phénomène qui est étudié depuis longtemps, LeBon fut un des pionniers du domaine, après l’époque de la Révolution Française [LEBON 1895]. La foule était alors perçue comme une menace, qui inspirait la crainte et qui commettait les actes les plus atroces. Ensuite, plusieurs autres chercheurs, tels que Freud, Sighele et Tarde, suivirent la tendance de LeBon en décrivant la foule négativement [STANFORD HUMANITIES LABORATORY]. Par contre, d’autres chercheurs, comme [ALLPORT 24], [Graumann & Moscovici 86], et [LANG & LANG 61], ont contribué différemment à l’étude du comportement de foule en adoptant une vision de la foule au quotidien. C’est la foule qui se promène sur les trottoirs, dans les rues, celle que nous retrouvons dans un autobus, au centre d’achat ou dans différents lieux publics. Bref, c’est l’étude du comportement de tous les jours des gens en société. Il n’est pas question de dire que LeBon avait tord. Il ne faut tout simplement pas confondre les deux visions. L’étude de LeBon reposait sur un contexte de violence quotidienne, c’est pourquoi il décrivait la foule ainsi. Maintenant, la foule est perçue plus positivement, mais il arrive encore de nos jours qu'elle soit une menace et qu'elle commette des actes répréhensibles tels que du pillage, des émeutes et même parfois des actes encore plus graves. II.2.1.2 – Densité sociale et spatiale et distance interindividuelle
    • 11 Des recherches sur des animaux ont amené les chercheurs sur une piste intéressante en ce qui concerne les facteurs qui peuvent influencer le comportement des individus d’une foule. Les chercheurs ont découvert les différentes variables faisant le lien entre la densité et l’augmentation du stress. Ces variables sont la grosseur du groupe, le nombre d’individus et l’espace disponible. L’impact de ces variables changeait avec l’espèce, le sexe ou l’organisation sociale du groupe. Nous en venons ainsi aux concepts de densité sociale, de densité spatiale et de distance interindividuelle. La densité sociale met l’emphase sur les effets du nombre de personnes dans une situation donnée. Les facteurs critiques reliés sont l’augmentation des contacts sociaux, l’interstimulation des individus et l’excès de stimulations sociales. La densité spatiale considère les restrictions spatiales des mouvements ou du nombre d’activités possibles qui résultent d’un endroit trop petit ou mal construit et de la présence des un près des autres. L’espace disponible est vu en termes de ressources et lorsqu’il manque de ressource cela restreint la liberté de choix. Le concept de distance interindividuelle traite des violations des normes sur l’espace personnel ou des normes spécifiques d’interaction de groupe. Stokols (1972) apporta un avancement conceptuel important lorsqu’il détermina que le terme densité devait être réservé pour les conditions physiques objectivement mesurables et le terme « crowding » pour référer aux expériences subjectives. À cause de son utilisation commune, le terme « crowding » était souvent utilisé pour caractériser la densité en plus du « crowding ». Avec la description restreinte de « crowding », il est possible de conceptualiser le terme de différentes façons. « Crowding » est l’équivalent cognitif de la condition objective de la densité. « Crowding » est un état de stress psychologique variant avec la densité et d’autres variables. Cette définition comporte surtout les états négatifs. Finalement, « crowding » est réservé pour un état de perception d’un manque d’espace ou du résultat d’un excès de stimulation ou de l’expérience de l’interférence d’un comportement non voulu ou du besoin de plus d’intimité ou du résultat de l’invasion de l’espace personnel ou de la perte de contrôle, etc.
    • 12 Selon cette distinction, la densité est vue comme étant un antécédent nécessaire au lieu d’une condition suffisante pour que les individus expérimentent le « crowding ». Le modèle de Stokols voit le « crowding » comme étant un état motivationnel qui survient seulement lorsque la demande d’espace d’un individu excède la quantité d’espace disponible. Les restrictions d’espace sont dépendantes des conditions de densité spatiale et sociale ainsi que d’autres facteurs individuels, sociaux et de situation. L’individu en présence de « crowding » ressent le besoin de résoudre la situation en modifiant les conditions spatiales ou sociales ou en quittant la situation ou en activant divers mécanismes cognitifs tels que la diminution des standards comportementaux. II.2.1.3 – Modèle de surcharge de stimuli Le modèle de surcharge de stimuli définit la densité comme étant une surcharge de stimuli ou d’information. Il est tiré des théories de Simmel (1905/1950) et Wirth (1938). Il postule que la grosseur, la densité et la diversité des populations urbaines sont les facteurs pris en compte comme étant la cause de niveaux excessifs de stimulation physique et sociale. Simmel observa que les individus s’adaptaient à des situations de surcharge des milieux urbains par le retrait social (social withdrawal). Les sources de surcharge peuvent venir de la présence de trop de personnes, de trop de rencontres sociales, de pas assez de distance interindividuelle, de pas assez d’espace par personne ou d’un flux d’information trop rapide et complexe, dépassant les capacités individuelles. Le monde apprend donc à minimiser le temps alloué à certains stimuli et à ne pas s’occuper de certains, en développant différentes techniques de filtrage. La surcharge de stimuli peut avoir des conséquences cognitives et comportementales chez l’individu. L’environnement peut sembler incertain, imprévisible et incontrôlable, ce qui peut entraîner des décisions « irrationnelles », qui ne sont pas basées sur des raisonnements complets et ne considérant pas toutes les alternatives. Cela peut aussi entraîner une réduction du nombre de décisions, amenant ainsi à des comportements plus habituels, routiniers ou stéréotypés.
    • 13 II.2.1.4 – Densité en tant que contrainte comportementale La théorie de densité en tant que contrainte comportementale propose d’analyser la densité spatiale et sociale en termes de limitations spatiales et de contraintes comportementales. Ne pouvant pas agir comme ils le veulent, les gens doivent changer leurs habitudes ou changer leurs standards de liberté de choix. La présence d’autres stress rend la situation encore plus désagréable. Les autres peuvent interférer avec la performance et avec l’accès à des ressources d’un individu. De telles situations peuvent causer de la frustration dans quel cas un individu aura tendance à rétablir sa liberté de décision et de comportement. Lorsque l’individu peut ou croit pouvoir quitter la situation, les contraintes peuvent ne pas être stressantes et peuvent même être appréciées. Mais, si l’individu subit une situation et qu’il ne peut pas la quitter ou la modifier, il peut ressentir beaucoup de stress. II.2.1.5 – Conception « Top-Down » versus « Bottom-Up » Le défaut d’une procédure uniquement « bottom-up » est qu’elle ne tient pas compte ou sous-estime les principes sociaux qui sont les fondements de l’action collective. Par contre, l’approche « top-down » est basée sur ces fondements. Pour comprendre l’ordre social dans lequel les masses sont mobilisées et pour identifier les valeurs, les normes et les règles sociales qui dictent les agissements des masses, il faut expliquer le comportement des foules autant que le comportement des individus impliqués dans l’action collective. La principale faiblesse de l’approche « top-down » est de négliger la description de la base des phénomènes. Donc, une combinaison des techniques « top-down » et « bottom-up » semble être la meilleure solution. II.2.2 – Comportement humain dans les organisations
    • 14 Après une revue historique et une étude des différentes théories développées dans le passé, nous abordons maintenant une branche avancée et complexe de la psychologie, qui porte sur le comportement humain dans les organisations. Nous pouvons observer la foule en termes des individus et des groupes qui la composent. Bien que les théories étudiées portent surtout sur des organisations en terme d’une compagnie, il est possible de ramener plusieurs des théories à des groupes que nous pourrions qualifier de plus généraux, tels les groupes qui composent une foule. Il est donc pertinent d’étudier le comportement des humains à l’intérieur d’organisations. Cette section est, en majeure partie, un résumé de [French Wendell & al 85]. Figure II.1 : Sous-systèmes organisationnels clés Les organisations sont définies comme étant des systèmes sociaux composés de gens qui travaillent ensemble pour atteindre des buts. Une organisation est caractérisée par ses tâches, ses technologies, sa structure, ses politiques personnelles, ses buts, ses groupes
    • 15 sociaux et son style de gestion. Elle peut donc être composée d’un ou de plusieurs groupes. La Figure II.1 définit une organisation comme un sous-système d'un environnement plus large qui est orienté par des buts et qui contient un sous-système technique, un sous- système structurel, un sous-système psychologique et un sous-système directorial [French Wendell & al 85 p.18]. Les membres d’une organisation possèdent aussi plusieurs caractéristiques qui sont des attitudes, des talents, des croyances, des buts et des valeurs basés sur des caractéristiques génétiques soit, physiques et mentales, ainsi que sur les expériences passées et sur l'apprentissage. Combinées ensemble, les caractéristiques individuelles et organisationnelles permettent de déterminer le comportement organisationnel, qui est le comportement des membres dans l'organisation. II.2.2.1 – Comportement organisationnel L’étude du comportement organisationnel est basée sur la recherche, l'observation et la théorie. Elle permet d'analyser et de comprendre les attitudes, sentiments, perceptions, motifs et le comportement des membres dans un contexte organisationnel. Le comportement organisationnel comprend la psychologie sociale. Celle-ci tente de comprendre et d’expliquer le comportement d'humain individuel dans un contexte social. Elle permettra donc de définir plus en détail les modèles des individus, faisant partie ou non d’un groupe. À cause de l'immense variété de différences entre les individus, il est impossible de dériver des lois et des principes absolus du comportement organisationnel. Mais, bien que chaque situation soit unique, il semble y avoir des modèles de relations sociales sur les variables importantes à comprendre. Les vues de contingence permettent de définir les relations entre ces variables et entre les différents sous-systèmes dans les organisations. En effet, le concept de contingence permet de définir un modèle en tenant compte du fait que chaque individu est unique, en tenant compte d'un facteur d'incertitude.
    • 16 Le cadre d’étude du comportement humain dans des organisations est présenté dans la Figure II.2 [French Wendell & al 85 p.22-23]. Nous y retrouvons les composants de base qui sont l'environnement externe, le contexte organisationnel, les aspects du comportement humain dans les organisations et les résultats, les sorties et la performance dans les activités organisationnelles. II.2.2.2 – Socialisation organisationnelle Nous commencerons en examinant la socialisation organisationnelle, un des aspects du comportement humain dans les organisations. Tout d’abord, la socialisation réfère au processus par lequel des personnes acquièrent la connaissance, des talents et des dispositions qui font d'eux des membres plus ou moins aptes de leur société. La théorie de la psychologie sociale sur la comparaison sociale dit qu’une personne évalue ses propres talents et opinions en se comparant aux autres. Un individu s’engage dans des comparaisons sociales sous des conditions d’incertitude, par exemple, lorsqu’il se retrouve sans autre moyen d’autoévaluation dans une situation nouvelle ou ambiguë. L’individu se base donc sur des observations des comportements d’autres individus similaires pour être en mesure de s’auto-évaluer correctement. La Figure II.3 montre le processus d’adaptation de l’individu à l’organisation [French Wendell & al 85 p.36]. Le comportement de celui-ci est une fonction de l'interaction entre la personne et l'environnement. Selon cette formule, les organisations tendent à fournir un environnement permettant de stimuler la personne pour qu'elle se comporte d'une façon organisationnellement appropriée [French Wendell & al 85 p.39]. Mais, la variable personnelle entraîne évidemment que les personnes d'une même organisation ont des perceptions différentes et se comportent de différentes manières. La socialisation n'est donc jamais absolue ou complète pour les participants, chacun gardent sa personnalité individuelle unique.
    • Figure II.2 : Cadre de travail d’étude du comportement humain dans les organisations
    • Figure II.3 : Le Processus de socialisation Behavior = f(P, E) Formule II.1 : Comportement (B) en fonction de la personne (P) et de l’environnement (E) II.2.2.2.1 – Contrat psychologique Le contrat psychologique définit une dynamique, une relation changeante qui est constamment renégociée. C’est le processus selon lequel il se crée un équilibre entre les attentes des individus et celles de l’organisation. Il tient aussi compte de la force motivationnelle et du climat organisationnel. Toutes les attentes ne peuvent pas être rencontrées. Il y a des compromis explicites et implicites à faire des deux côtés. Le degré de conflit ou la possibilité de conflit se retrouve dans les négociations continuelles du contrat psychologique, selon le degré de compatibilité entre les attentes de l'individu et de l'organisation. Le contrat psychologique va de paire avec la notion de cohésion entre les membres d’un groupe qui est étudié dans à la section II.2.2.6, ainsi que dans [Legault 2003]. La force motivationnelle pour qu'un individu s'engage dans un comportement particulier est en fonction des attentes que la personne a sur les résultats possibles de
    • 20 l'adoption d’un comportement et des valeurs que l'individu associe à ces résultats. Les personnes sont différentes dans leurs attentes en termes de leurs talents et de leur volonté d’arriver à ces attentes. L'image de soi est aussi un facteur important dans le processus de socialisation organisationnelle. Si l'image de soi est compatible avec les exigences d'un rôle organisationnel, la personne a plus tendance à être motivée, performante et satisfaite. L'image de soi est potentiellement modifiée par le processus de socialisation organisationnelle. Les organisations ont, elles aussi, leurs exigences et attentes, entre autres : - Atteindre des buts organisationnels autres que les buts personnels; - Avoir une implication, un engagement et une initiative suffisante des membres; - Nécessiter que les individus jouent des rôles particuliers; - Avoir de gens qui accomplissent certaines tâches efficacement; - Nécessiter que les participants acceptent l’autorité et assument leurs responsabilités; - Exécuter l’intégration et la coordination des activités; - Nécessiter l’adhésion à des politiques, des règles et des procédures; - Atteindre une réceptivité du leadership et de l’influence du leader; - Développer suffisamment de loyauté envers l’organisation pour maintenir le système social… Le climat organisationnel est une qualité relativement persistante de l'environnement interne à une organisation qui est expérimenté par les membres, influence leur comportement et peut être décrit en termes des valeurs d'un ensemble de caractéristiques de l'organisation. Le climat organisationnel est basé sur les caractéristiques perçues par les participants. Une organisation est constituée d'un certain nombre de rôles reliés entre eux. Les rôles sont les modèles comportementaux correspondant à des positions dans une société ou une organisation. Plusieurs facteurs sont considérés dans l'assignation des rôles tels que : - La nature de la tâche à effectuer;
    • 21 - Le degré de responsabilité accordé; - L'ordre des niveaux dans la hiérarchie; - Les exigences en termes de compétences techniques et interpersonnelles. II.2.2.2.2 – Synthèse Individu - Organisation Le schéma de la Figure II.4 représente une synthèse du processus de socialisation organisationnelle et de tout ce qui entre en compte du côté de l’individu et de l’organisation [French Wendell & al 85 p.54-55]. L’individu et l’organisation sont définis selon leurs caractéristiques et leur vécu. Chacun a des attentes envers l’autre, ce qui entraîne des processus d’adaptation chez les deux partis de la relation. L’individu entre dans un processus de socialisation organisationnelle, alors que l’organisation entre dans un processus d’individualisation. Ces processus évoluent dans le temps par les négociations du contrat psychologique. L’individu et l’organisation doivent apprendre les attentes de l’autre, déterminer les rôles, négocier les attentes de l’autre, afin de s’adapter. Ces processus peuvent mener à deux types « d’échec », la rébellion, où un l’individu profite de la dépendance de l’organisation, et l’ultra-conformité, où l’individu dépendant se conforme totalement aux exigences de l’organisation. L’idéal est bien sûr un équilibre entre la dépendance des deux parties. Dans tous les cas, il y a un impact sur le futur de l’individu et de l’organisation. II.2.2.3 – Buts individuels et organisationnels Les valeurs affectent les buts qu’un individu se fixe ainsi que les moyens par lesquels il les accomplit. Elles sont en fait un cadre de référence général qui détermine le choix d'un but, d'une action, selon les normes et les standards individuels qui dictent ce qui est bon et désirable. Les valeurs sociales réfléchissent un système de croyances partagées sur les buts désirés et les normes de la conduite humaine.
    • 22
    • Figure II.4 : Résumé du processus de socialisation organisationnel
    • La Figure II.5 montre le processus d’atteinte d’un but [French Wendell & al 85 p.68]. La motivation est déterminée par nos instincts, nos besoins et nos attentes. Elle nous pousse à adopter les comportements qui sont susceptibles de nous permettre d’atteindre les buts fixés. Figure II.5 Motivation, comportement et buts Les organisations ont certaines valeurs aussi, mais il est difficile de faire le lien entre celles-ci et les buts fixés. Chaque membre d'une organisation y apporte une part de ses valeurs. Les sources externes apportent aussi une part de leurs valeurs à une organisation. Les sources externes sont les consommateurs, les compétiteurs, les fournisseurs, les gouvernements et d'autres éléments de l'environnement. Il y a au moins cinq niveaux de valeurs : - Les valeurs individuelles; - Les valeurs de groupe : celles d'un groupe, formel ou non, qui affectent les comportements individuels et les actions de l'organisation; - Les valeurs organisationnelles : celles de l'organisation comme un tout : composée des entrées individuelles, de groupe, de l'organisation totale et culturelles;
    • 25 - Les valeurs des composantes de l'environnement : celles de ceux qui sont en contact direct avec l'organisation; - Les valeurs culturelles : celles de la société. Les valeurs déterminent : - Quels buts sont légitimes; - La valeur des buts; - La légitimité ou le mérite des moyens potentiels pour atteindre les buts. Les buts d'une organisation sont une réflexion de tous les individus qui peuvent influencer les activités de l'organisation. Les buts d'une organisation sont donc une abstraction distillée des désirs des membres et des pressions de l'environnement et du système interne. Les buts peuvent être vus suivant trois perspectives : - Le niveau environnemental : les contraintes imposées par la société sur une organisation; - Le niveau organisationnel : les buts de l'organisation en tant que système; - Le niveau individuel : les buts des participants de l'organisation. La fonction des buts : - Légitimer les activités; - Guider les activités; - Développer l'engagement des membres; - Servir de standards pour estimer la performance de l'organisation; - Réduire les incertitudes dans le processus de prise de décision; - Évaluer le changement et servir de base d'apprentissage et d'adaptation; - Fournir une base pour le design structurel en fixant les contraintes initiales qui déterminent quelles structures sont appropriées pour quelles tâches; - Fixer un cadre de travail pour la planification et le système de contrôle sur lesquels se base la formation de buts. Les principales catégories de buts organisationnels sont : - Satisfaction des intérêts de l’organisation, des membres et des autres; - Production de services ou de biens; - Efficacité et profit : objectifs d'entrées-sorties;
    • 26 - Investissement dans la viabilité (survie, expansion) organisationnelle; - Mobilisation de ressources; - Observation de codes : les règles formelles et informelles, qu'est-ce qui est attendu/défendu; - Rationalité, soit les modèles d’action satisfaisants en terme de désirabilité, de faisabilité et de consistance. Le processus de fixer un but est souvent une combinaison de méthodes rationnelles, déterministes et d'approches adaptatives et négociatrices. C'est un mélange complexe entre les forces internes et externes et les contraintes. Il y a un certain équilibre de pouvoir entre les participants qui change avec le temps et les buts. Les conflits sont assez fréquents, à cause des demandes des différents groupes participants qui peuvent diverger plus ou moins, selon leurs attentes. De plus, la compétition pour des ressources ou des buts rares est une source de conflits organisationnels. Il est donc rare de pouvoir maximiser les buts d'un individu ou d'un groupe, il faut faire un compromis pour pouvoir arriver à une entente. L'organisation doit tenter de satisfaire le mieux possible tous les participants. L'individu accepte et internalise des valeurs et des buts organisationnels par la socialisation et le développement du contrat psychologique. L'internalisation augmente selon le degré d'engagement personnel d'un individu pour atteindre les buts organisationnels et le degré de conflit diminue avec cette augmentation. II.2.2.4 – Motivation et performance Un motif est soit la cause qu'une personne a d'effectuer une action d'une certaine façon, soit un penchant pour un comportement spécifique. Une motivation psychologique ou physiologique peut être considérée comme un « gap » et le besoin inhérent de le combler, pour un organisme. Les motifs couvrent une étendue de causes qui varient selon le degré de conscience des causes et du comportement relié. Le « gap » peut être, par exemple, un besoin, une tension, un inconfort, une attente, ou un objectif. Certains « gaps »
    • 27 sont internes et naturels, alors que d'autres sont externes. Les individus créent consciemment des « gaps » en se fixant des buts qui sont atteints par l'adoption de comportements. Ces buts peuvent être à court ou à long terme. L'effort est lié à la performance et vient de la motivation qui stimule, dirige et maintient un comportement. La Figure II.6 montre la complexité du contexte du comportement individuel [French Wendell & al 85 p.99]. Figure II.6 : Le contexte du comportement individuel II.2.2.4.1 – Besoins La pyramide de Maslow, représentée dans la Figure II.7, montre l’hiérarchie des besoins de l'homme [Toupin 01]. Selon [Microsoft 2001], Abraham Maslow a identifié un ordre de priorité dans la satisfaction des besoins humains. Il pose trois postulats concernant la motivation des individus : - Les gens sont motivés par le désir de satisfaire des besoins;
    • 28 - Ces besoins sont hiérarchisés; - Les gens progressent dans cette hiérarchie des besoins inférieurs satisfaits vers les besoins de niveau plus élevé. Figure II.7 : Pyramide de Maslow Selon Maslow, le comportement est déterminé par 2 éléments : - Les motivations, que sont les besoins, - La réalité, que sont les forces de l'environnement; Il accorde aussi de l’importance à l'histoire et la subjectivité d'une personne. L'être humain étant en recherche constante de motivation, lorsqu'un besoin est satisfait, un autre surgit. Les besoins du premier niveau doivent être satisfaits, du moins partiellement, avant ceux du niveau 2, qui viennent avant ceux du troisième, etc. Les besoins reviennent parfois même s’ils ont été acquis et certains sont rarement satisfaits. Le besoin d'accomplissement est un besoin de croissance intérieure.
    • 29 II.2.2.4.2 – Rôle des attentes L’individu est motivé à fournir un effort s’il croit qu’il y a une bonne chance d’atteindre les résultats escomptés et que des récompenses intrinsèques et extrinsèques mèneront à la satisfaction. Une expérience positive favorisera l’individu à s’engager dans des situations semblables, qui renouvelleront la motivation. II.2.2.4.3 – Processus de motivation La Figure II.8 suivante [French Wendell & al 85 p.110-111] schématise le processus de motivation en identifiant les facteurs qui affectent l’effort, la performance et la satisfaction d’un individu. Pour comprendre le processus, il faut savoir comment l’effort émerge, comment celui-ci est utilisé pour performer et quel degré de satisfaction est entraîné par la performance, qui à son tour aura un effet sur l’effort fourni subséquemment. La motivation peut être intrinsèque, c’est-à-dire qu’elle est engendrée par des facteurs propres à l’individu. Lorsque la motivation provient de facteurs externes à l’individu, elle est extrinsèque. Ce type de motivation comprend les récompenses, les punitions ou les obligations. II.2.2.5 – Influence et leadership Le leadership est non seulement une caractéristique d’un individu, mais aussi une relation entre les personnes d’un groupe social ou organisationnel. L’efficacité du leadership est mesurée par le degré selon lequel les directives du leader sont suivies. La mesure inclut aussi la performance du travail du groupe. Le leader doit établir un climat dans lequel les personnes sont motivées et utilisent leur potentiel au maximum.
    • Figure II.8 : Processus de motivation : facteurs affectant l’effort individuel, la performance et la satisfaction
    • La fonction de leader implique d’influencer le comportement des autres. Mais, l’influence joue un rôle à plusieurs niveaux de la hiérarchie d’une organisation. L’influence est dans toutes les transactions qui ont des effets psychologiques ou comportementaux. La Figure II.9 montre les différents moyens pour influencer le comportement [French Wendell & al 85 p.184]. Nous voyons que le pouvoir, l’habileté d’influencer le comportement, est le concept qui relie tous les moyens d’influence. Plus un individu a de pouvoir, plus il lui sera facile d’influencer les autres. Figure II.9 : Différents moyens pour influencer le comportement II.2.2.5.1- Rôle du leadership Le leadership peut être vu comme un groupe de statuts, une personne focale et une fonction. Les leaders incluent les directeurs, les exécutifs, les administrateurs, les managers, les patrons et les chefs. Le leadership est défini comme étant l’influence interpersonnelle, exercée dans des situations et dirigée, via le processus de communication, vers l’atteinte d’un ou de plusieurs buts spécifiques. Les suiveurs ont besoin des leaders pour des idées, des directions et du support. Les leaders dépendent des suiveurs pour des contributions significatives à la performance
    • 33 organisationnelle. La Figure II.10 représente l’échange social entre le leader et les suiveurs d’une organisation [French Wendell & al 85 p.191]. Les ensembles montrent que chaque parti partage certains aspects et qu’ils peuvent occuper d’autres rôles à l’extérieur de l’organisation. Les facteurs externes comme internes affectent l’échange social. L’échange social peut être vu en terme de modification de comportement. Les comportements renforcés tendent à continuer, alors que ceux qui sont punis ou ignorés tendent à cesser. Figure II.10 : L’échange social entre le leader et les suiveurs d’une organisation II.2.2.5.2- Pouvoir et autorité Le pouvoir dénote l’habileté à produire un certain événement. Il y a différentes structures hiérarchiques, chez les organisations, répartissant le pouvoir de différentes façons. L’autorité est le pouvoir institutionnalisé, basée sur des fondations légales qui définissent la mission de l’organisation et donne le pouvoir aux membres. Sans autorité formelle, les groupes développent des relations de pouvoir et allouent les statuts selon les
    • 34 caractéristiques des individus, comme la sagesse, le charisme, les habiletés physiques et techniques et par rapport à certaines possessions. L’autorité peut ou peut ne pas être efficace. Les individus ont une certaine tolérance selon laquelle ils acceptent des directives sans analyser les mérites de leurs comportements en lien avec le problème en question. Il faut que les directives soient dans la zone d’acceptation pour être efficaces. Plusieurs niveaux de pression peuvent être utilisés suite à l’échec d’une tentative d’influence afin d’atteindre l’acceptation, mais il se peut que ces tentatives échouent aussi. II.2.2.5.3- Attributs et comportements des leaders Les caractéristiques des leaders comprennent l’énergie, la taille, l’intelligence, l’enthousiasme, l’intégrité, la moralité, l’expertise technique, la persistance, la capacité de prendre des décisions et de diriger, l’apparence, la sympathie et le courage. Par contre, ce n’est pas une liste exhaustive et les leaders n’ont pas toutes ces caractéristiques. La situation comporte aussi des facteurs importants dans la détermination du type de leadership le plus approprié. Les différents types de leadership sont présentés dans la Figure II.11 en fonction du niveau d’autorité du leader par rapport au niveau de liberté des subordonnés [French Wendell & al 85 p.211]. II.2.2.6 – Dynamiques de groupe Un groupe peut être défini comme étant un nombre de personnes qui, pour une certaine période de temps, ont des interdépendances psychologiques ou de tâches, qui incluent l’interaction entre les personnes dans une situation. Le groupe formel existe par l’approbation d’une hiérarchie et a des fonctions spécifiques à remplir. Les groupes informels sont ceux qui se développent spontanément à cause de la proximité ou de la similarité du travail, de l’attraction mutuelle, du besoin mutuel d’accomplissement ou d’une combinaison de ces raisons.
    • 35 Figure II.11 : Étendu du comportement de leadership La taille du groupe est un aspect important. Par exemple, il y a plus de chance qu’un individu en confronte un autre, dans un groupe de trois personnes (triade) que dans un groupe de deux (dyade), car l’individu compte sur le support de l’autre. Le troisième individu joue, dans ce cas, le rôle d’intermédiaire, dont la position renforce le poids de la position d’un des deux autres membres. Le nombre de relations affectant possiblement les individus d’un groupe est de n(n – 1)/2, où n est le nombre de personnes dans le groupe. Les groupes de taille paire ont plus tendance à avoir des désaccords que les groupes de taille impaire, probablement par l’émergence d’un médiateur lorsque la taille est impaire. À partir d’environ sept jusqu’à environ quinze membres, les demandes faites sur le leader s’amplifient et il est de plus en plus différencié des autres. Plus le groupe est grand plus la tolérance à être dirigé augmente, plus les actions sont centralisées et les règles et procédures formalisées, plus la tendance à vouloir dominer des membres plus actifs est forte. Avec cette augmentation, l’atmosphère devient moins intime et la satisfaction des individus plus faible. Cela entraîne une tendance à former des sous-groupes.
    • 36 La cohésion est le degré d’attraction entre les membres et leur groupe. Si la cohésion est forte, un membre a plus de chance de prendre des responsabilités pour le groupe, de participer aux rencontres, d’influencer les autres, de les écouter, et d’accepter leurs opinions. Aussi, les buts du groupe seront mieux estimés et les standards plus facilement adoptés. La cohésion est donc liée à l’efficacité du groupe à travailler dans le sens des buts du groupe, ainsi qu’à la satisfaction des membres. II.2.3 – Psychologie sociale Un aspect important dans la simulation de foules est le niveau de réalisme des agents en tant qu’individus. Quel que soit le niveau visé, il est intéressant d’étudier la psychologie sociale afin que nos modèles d’agents reflètent bien la réalité et que nous soyons en mesure d’évaluer le niveau de réalisme par rapport à la réalité. La psychologie sociale est l’étude scientifique de la façon dont les individus pensent, ressentent et se comportent dans des situations sociales. Les notions et théories présentées dans cette section provienne de [Brehm & Kassin 90] et de [French Wendell & al 85]. La psychologie sociale voit les individus de deux manières. La première, appelé « chaude », qui met l’accent sur l’individu dirigé par ses besoins, ses désirs et ses émotions. L’autre, dite « froide », est une perspective plus rationnelle et analytique des aspects du comportement humain. II.2.3.1 – Conception de soi La conception de soi est la somme de toutes les croyances d’un individu sur ses attributs personnels. Une partie de la connaissance que nous acquérons sur nous-mêmes est construite en imaginant ce que les autres personnes, significatives pour nous, pensent de nous et en incorporant ces perceptions dans notre conception de soi.
    • 37 La théorie de la perception de soi énonce que lorsque des éléments internes sont difficiles à interpréter, une personne fait des inférences sur elle-même en observant son propre comportement et la situation dans laquelle il se produit. Les gens apprennent sur eux-mêmes par la perception de soi seulement lorsque la situation seule ne semble pas suffisante pour justifier les comportements. La théorie de la comparaison sociale énonce que les gens évaluent leurs habiletés et leurs opinions en se comparant aux autres. Les gens s’engagent dans des comparaisons sociales lorsqu’ils sont incertains et qu’ils n’ont pas le moyen de s’auto-évaluer, par exemple, lors d’une situation nouvelle ou ambiguë. II.2.3.2 – Percevoir les autres La perception que nous avons des autres est une composante importante de la psychologie sociale. La perception sociale est l’ensemble des processus par lesquels les gens réussissent à se comprendre les uns les autres. II.2.3.2.1 – Première impression Un des éléments de la perception sociale est le jugement basé sur des impressions de première vue, qui sont des « snapshots » d’information. Ces jugements peuvent être basés sur la catégorisation des gens selon un ou plusieurs facteurs, par exemple, la grandeur, la grosseur, le physique, la couleur de la peau, la couleur des cheveux, le port de lunettes, l’habillement, les traits du visage, le sexe, l’âge, la race, des caractéristiques démographiques, etc. Les jugements portés sur ces groupes peuvent parfois amener à des hostilités injustifiées.
    • 38 II.2.3.2.2 – Scripts Les gens ont non seulement des préconceptions sur certains types de personnes, mais aussi sur des situations. Les expériences passées permettent d’élaborer des scripts permettant d’anticiper des buts, des comportements et des résultats qui risquent d’avoir lieu au cours d’une situation particulière. Le script est donc une préconception sur une séquence d’évènements qui se produiront probablement dans un type de situation donnée. II.2.3.2.3 – Langage du comportement non-verbal Le langage du comportement non-verbal est un autre aspect important de la perception sociale. Ce type de comportement communique les sentiments d’une personne sans l’usage de la parole, par les expressions faciales, le langage du corps et le ton de la voix. Il y a au moins six émotions primaires que l’on peut reconnaître par les expressions faciales, soit la joie, la peur, la tristesse, la colère, la surprise et le dégoût. La perception sociale est souvent trompeuse, car parfois les gens essayent de cacher leurs sentiments ou de les exagérer. II.2.3.3 – Processus de groupes La section II.2.1 présentait plusieurs théories, développées dans le passé, relatives à la foule et à des groupes. Ces théories tentaient d’expliquer certains phénomènes et étaient souvent influencées par un certain biais axé sur la violence. La psychologie sociale élabore et généralise ces théories pour enlever ce biais. Elle propose aussi d’autres modèles de processus de groupe, comme le « groupthink » et énonce des théories sur la coopération, la compétition, les conflits et les méthodes de résolution de conflits.
    • 39 II.2.3.3.1 – Desindividuation La desindividuation est définie par la perte du sens de l’individualité et le relâchement des contraintes normales contre des comportements déviants. Deux types d’indices environnementaux peuvent servir à déclencher un comportement déviant. Le premier est la responsabilité pouvant être attribuée au comportement d’un individu dans une situation. L’anonymat de la foule réduit la responsabilité et donc les contraintes contre un comportement déviant, en changeant le calcul individuel de coût-récompense. Le coût d’être tenu responsable étant réduit, l’individu peut en venir à adopter délibérément un comportement déviant. Le second type d’indice est le centre d’attention de l’individu porté sur lui-même ou ailleurs selon les indices attentionnels. Lorsque les indices attentionnels environnementaux sont très forts, le centre d’attention est porté à l’extérieur de l’individu. La conscience de soi est réduite, ce qui peut entraîner un état de desindividuation qui peut faire suite à un comportement déviant impulsif. L’individu desindividualisé porte moins attention à ses standards de conduite, réagit plus à la situation immédiate et est moins sensible aux conséquences à long terme du comportement. La Figure II.12 résume les deux façons pouvant mener au comportement déviant [Brehm & Kassin 90 p.499]. La conscience de soi affecte l’agressivité de deux façons différentes. La première est le renforcement de l’adhésion à nos standards de conduite. Une conscience de soi élevée augmente les tendances initiales, agressives ou pas, alors que lorsqu’elle est faible, l’individu est plus apte à suivre la foule, agressif ou pas. Le deuxième effet de la conscience de soi est l’intensification de l’expérience émotionnelle. Celle-ci ne dépend pas des standards personnels, ce sont les caractères de l’individu qui ressortent plus fortement avec la conscience de soi. II.2.3.3.2 – Aspects fondamentaux d’un groupe Un des aspects fondamentaux d’un groupe est qu’il est constitué par les différents rôles qu’y jouent les membres. Nous pouvons définir un rôle de façon générale comme
    • 40 étant un ensemble des comportements attendus chez un individu. Il y a des rôles formels, tels que les métiers, et des rôles informels qui renferment les rôles qui ne sont pas définis formellement. Deux rôles sont fondamentaux au sein groupe. Le premier est un rôle instrumental qui aide le groupe à accomplir une tâche. Le second est un rôle expressif qui fournit un support émotionnel et maintient le moral. Figure II.12 : Déclenchement d’un comportement déviant Un deuxième aspect important dans un groupe correspond aux normes ou règles de conduite pour les membres. Une norme peut être formellement écrite ou transmise oralement, ou encore, informelle et plus subtile. Les membres d’un groupe peuvent parfois ne pas être au courant des normes informelles et en même temps être fortement influencés par celles-ci. Le troisième aspect important dans un groupe est la notion de cohésion d’un groupe, soit la force qui pousse les membres à demeurer ensemble. Nous ne discuterons pas davantage de cette notion étant donnée que nous l’avons traité à la section II.2.2.6.
    • 41 II.2.3.3.3 – Prise de décision du groupe La prise de décision peut être biaisée par plusieurs phénomènes. La polarisation du groupe est un de ces phénomènes qui consiste en l’exagération des tendances initiales dans la pensée globale des membres du groupe lors d’une discussion de groupe. Cette exagération met en valeur les idées communes aux membres et renforce les opinions communes. La théorie des arguments persuasifs énonce que la polarisation du groupe est produite par le nombre et la force persuasive des arguments présentés dans la discussion. Nous appelons catégorisation sociale la tendance des gens à se catégoriser et à catégoriser les autres en termes de groupes sociaux, selon les attributs communs. La catégorisation sociale est souvent commune à plusieurs personnes. Par contre, il est possible que des groupes existent seulement dans la perspective d’une personne ou d’un certain groupe. Nous distinguons les groupes dont nous faisons partie par « ingroups » et ceux auxquels nous ne nous identifions pas par « outgroups ». Les arguments persuasifs sont biaisés par cette distinction, c’est-à-dire, qu’ils auront un impact plus important s’il vient d’un « ingroup » que d’un « outgroup ». Seulement les arguments d’un « ingroup » devraient créer la polarisation de groupe. II.2.3.3.4 – « Groupthink » Le phénomène de « groupthink » est un type de prise de décision de groupe caractérisée par une collaboration excessive recherchée par les membres d’un groupe. C’est une perte de perspective qui rend la prise de décision très subjective et biaisée. Le « groupthink » peut être causé par trois facteurs majeurs. Ces facteurs sont la cohésion du groupe, la structure du groupe et le contexte situationnel. La figure II.13 présente les facteurs favorisant le « groupthink » ainsi que les symptômes et les conséquences qu’il entraîne. Nous pouvons expliquer que la cohésion entraîne le « groupthink » par le processus de perception sociale, discuté à la section II.2.3.2. En effet, le biais de la perception fait que les idées du groupe, possédant a priori des opinions communes en raison
    • 42 d’une forte cohésion, seront orientées dans la direction que tout le monde croit être la bonne. Figure II.13 : « Groupthink » : antécédents, symptômes et conséquences II.2.4 – Comportements de foule Dans cette section, nous explorons les éléments communs à toutes les foules et les caractéristiques qui distinguent les sous-types de comportement collectif des foules, tel que défini dans [Turner & Killian 57]. Certaines conditions qui dépendent des caractéristiques
    • 43 de la foule et des individus qui la composent sont nécessaires pour obtenir un comportement collectif. Les éléments communs dans toutes les foules sont l’incertitude, un sentiment d’urgence, la communication de l’humeur et d’une vision, les contraintes, la suggestibilité sélective individuelle et la permissivité. Une foule élémentaire est une collectivité qui possède ces caractéristiques, mais qui ne se développe pas suffisamment pour s’engager dans un comportement distinct permettant de la différencier. Une des caractéristiques essentielles de la foule est la communication de la vision qui inclut la conception d’une façon appropriée d’agir. L’objectif de la foule suit cette ligne d’action et permet de déterminer le type de relations entre les individus de la foule. À partir de l’objectif de la foule et des relations entre les individus, nous pouvons identifier le type de foule qui est formé. II.2.4.1 – Dimensions des foules Trois dimensions de la foule permettent d’identifier le type de foule en analysant les caractéristiques de l’objectif de la foule. L’objectif permet de savoir si la foule est individualiste ou solidariste, focalisée ou volatile et active ou expressive. Voici l’explication de chacune de ces dimensions. II.2.4.1.1 – Individualiste - solidariste Pour qu’une foule soit individualiste, les membres de la foule doivent agir ensemble sans pour autant intégrer leurs efforts. Les actions des membres sont parallèles et semblables, mais elles ne sont pas coopératives. Il n’existe alors pas d’objectif de groupe, mais plutôt une série d’objectifs individuels parallèles. Pour ce qui est de la foule solidariste, elle doit posséder un objectif de groupe que les individus de la foule ne pourraient pas atteindre seule. L’accomplissement de l’objectif nécessite des efforts combinés et intégrés.
    • 44 Dans une foule individualiste, la compétition entre en jeu lorsque le comportement d’un membre de la foule peut nuire ou empêcher un autre membre à atteindre son objectif personnel. Par contre, dans une foule solidariste, les efforts tendent à être divisés entre les membres. Les membres de la foule individualiste sont plus libres en terme des comportements appropriés que la foule solidariste. En effet, lorsque les membres sont solidaires, il y a une communication de l’humeur, un développement d’une vision commune de la situation et d’un comportement approprié. II.2.4.1.2 – Focalisée – volatile Les objectifs des foules varient dans leur degré de spécificité. Lorsque l’attention est portée sur un objet spécifique, la foule est dite focalisée. Par contre, si l’objectif peut être accompli par des actions sur plusieurs objets d’une classe générale, la foule est volatile. L’attention de ce type de foule est portée à changer d’un objet à l’autre. La foule volatile peut comporter plusieurs sous-foules dont l’attention porte sur un objet spécifique. Le fait que toutes les sous-foules considèrent la même classe générale d’objets permet à la foule d’être coordonnée et non aléatoire. II.2.4.1.3 – Active – expressive La réalisation d’un objectif d’une foule active nécessite une action sur un objet externe, que ce soit un objet physique, ou une ou plusieurs personnes qui ne font pas partie de la foule. Cette action n’est pas nécessairement un assaut physique ou une action directe. Pour la foule expressive, l’atteinte de l’objectif se fait par la production d’une sorte d’expérience subjective ou d’un certain comportement des membres de la foule. L’accentuation d’un sentiment ressenti, l’induction d’une expérience ou la provocation d’un certain type de comportement sont des objectifs de ce type de foule. L’objectif doit être atteint d’une façon subjective et interne aux membres de la foule.
    • 45 II.2.4.2 – Types de foule Les dimensions de la foule se combinent pour donner six types de foule. Nous avons la foule individualiste – expressive, individualiste – volatile – active, individualiste – focalisée – active, solidariste – expressive, solidariste – volatile – active et solidariste – focalisée – active. La raison pour laquelle toutes les combinaisons possibles ne sont pas explorées est que la foule expressive ne peut être focalisée ou volatile. En effet, les foules focalisées ou volatiles ont des objectifs qui portent sur des objets externes, alors que l’objectif de la foule expressive porte sur la production d’un certain état objectif. II.2.4.2.1 – Individualiste – expressive Lorsque plusieurs personnes sont exposées à la même situation, par exemple, lorsqu’elles partagent une frustration commune ou qu’elles perçoivent un événement relativement de la même manière, ces personnes peuvent en venir à expérimenter la même humeur presque simultanément. L’expressivité des autres stimule davantage le comportement expressif qui traduit l’émotion. Le comportement est expressif car l’objectif de la foule est l’expression et la mise en valeur de l’humeur des membres, et non pas d’effectuer un changement quelconque sur la situation externe. Un exemple de ce type de foule se retrouve chez les spectateurs d’un match de football qui expriment leur contentement face aux bons jeux ou aux points marqués par l’équipe favorite. II.2.4.2.2 – Individualiste – volatile – active Lorsque les membres de la foule agissent sur différents objets d’une classe générale qui sont externes à la foule, elle est dite volatile et active. De plus, si les membres veulent atteindre un objectif qui est privé par rapport aux autres membres, la foule est individualiste. Une foule qui fait du pillage est un bon exemple de ce type. Plusieurs individus et petits groupes poursuivent tous leurs objectifs individuels. L’action des individus donne la permission d’agir aux autres, permettant un comportement plus agressif.
    • 46 Les membres de ce type de foule entrent aussi en compétition lorsque l’objet de l’objectif de plusieurs individus est le même. II.2.4.2.3 – Individualiste – focalisée – active La foule individualiste, focalisée et active se distingue de la précédente par la nature de l’objectif individuel qui est très spécifique. Dans ce type de foule, c’est chacun pour soi et tous les participants suivent le même comportement. L’action de chacun n’est pas coordonnée avec celle des autres qui ne contribuent pas à l’atteinte du but. En fait, c’est la présence des autres qui définie la situation telle quelle est. Les situations qui causent la panique sont souvent à l’origine de ce type de foule. Par exemple, si une foule doit évacuer un édifice qui contient une bombe, tous les membres auront l’objectif de sortir de l’édifice par une porte qui est l’objet de l’objectif. Les membres entrent évidemment en compétition dans ce type de foule. II.2.4.2.4 – Solidariste – expressive Dans certaines foules expressives, l’objectif se définit par l’interaction des membres de la foule. L’humeur et le comportement expressif approprié sont induits aux membres. L’unité ou la solidarité de la foule ainsi que la division des tâches sont évidentes dans ce type de foule. L’atmosphère créée par la foule est non seulement permissive, mais aussi compulsive. La foule retrouvée dans une église est un bon exemple de ce type de foule. II.2.4.2.5 – Solidariste – volatile – active La différence entre la foule individualiste, volatile et active par rapport à la foule solidariste, volatile et active repose dans la relation entre les membres de la foule. Ce type de foule peut souvent donner naissance à des sous-foules qui se chargent d’un objet spécifique d’une classe générique. La présence de sous-foules indique la division des tâches plutôt que la compétition. Nous retrouvions ce type de foule lors du Sommet des
    • 47 Amériques à Québec. La foule était alors divisée en sous-foules qui tentaient de créer des brèches à divers endroit dans les clôtures délimitant le territoire. II.2.4.2.6 – Solidariste – focalisée – active Le terme anglais « mob » représente bien la foule solidariste, focalisée et active. La foule est alors concentrée sur un objet spécifique. Cet objet qui est plus important que tous les autres est l’objectif de groupe qui est défini par l’interaction de la foule. Les actions appropriées ou non envers cet objet sont définies par le groupe et chaque membre de la foule est contraint à accepter cette définition. Ce type de foule tend à partager les tâches entre ses membres. II.2.4.2.7 – Autres dimensions des foules Chacun de ces types de foule n’est pas absolu. Toutes les foules ne peuvent pas être classées dans un type spécifique, car chaque dimension de la foule ne représente pas une dichotomie, mais plutôt une tendance dont les foules peuvent se rapprocher plus ou moins. Il se peut que nous retrouvions des éléments des deux opposés d’une dimension dans la même foule. Par exemple, une foule individualiste pourrait comporter des membres solidaires. Une foule active peut aussi comporter des éléments de la foule expressive. Une foule peut être volatile à différents degrés suivant l’ampleur de la catégorie d’objet ciblé. Peu de foules sont vraiment focalisées sur un seul objet. Une autre dimension de la foule dépend de la densité de celle-ci. La foule peut être catégorisée comme étant compacte ou diffuse, suivant la proximité et les contacts physiques entre les gens qui se retrouvent dans un espace plus ou moins spacieux. La foule peut aussi être spontanée, conventionnelle ou manipulée. La foule spontanée agit suivant les normes qui émergent d’une situation nouvelle, non anticipée. La foule conventionnelle est caractérisée par la communication, la suggestibilité accrue, le sentiment d’urgence et la permissivité des autres types de foule. Finalement, la foule manipulée est contrôlée par des
    • 48 leaders qui manipulent la foule de façon à obtenir le comportement de foule désiré, ainsi que l’humeur et la vision que les membres doivent partager. II.2.5 – Conclusion sur la psychologie de la foule Tout au long de la section II.2, nous avons étudié une quantité considérable de théories sur la psychologie des foules, des groupes et des individus. Malgré cela, il reste encore quelques théories à explorer. Celles de Milgram semblent prometteuses pour l’étude de la psychologie des foules et des comportements collectifs, notamment des facteurs spatiaux et physiques, par exemple, les files de gens et les différentes formations dans une foule. Les vues de contingence semblent aussi pouvoir apporter une part de compréhension des phénomènes au niveau des groupes. Comme mentionné précédemment à la section II.2.2.1, elles permettent de définir les relations entre les variables et entre les différents sous-systèmes dans les organisations, en tenant compte du fait que chaque individu est unique. Bref, elle permettrait d’identifier une part des théories à modéliser pour un système qui simule des groupes. Bien sûr, il est impensable de modéliser d’une façon fiable et exhaustive toutes les théories mentionnées. La complexité serait considérablement grande et la fiabilité du modèle diminuerait avec cette augmentation. La simulation pose différentes contraintes, notamment au niveau de la performance. Les théories implémentées se doivent aussi d’être pertinentes pour la simulation, en fonction des objectifs fixés. De plus, nous devons être en mesure de déterminer la validité des théories, pour que le modèle représente au tant que possible la réalité.
    • 49 II.3 – Simulation de comportements de foule Cette section traite du second grand domaine d’étude dont il est question dans ce mémoire. Il s’agit de la simulation de comportement de foule à l’aide de modèles comportementaux. Les simulations basées multi-agent (MABS) sont utilisées dans plusieurs domaines [Edmonds 00]. Par exemple, les MABS peuvent servir pour les loisirs, les arts, les outils pédagogiques illustrant des principes sociologiques, philosophiques ou mathématiques, la communication ou la science en général comme outil pour comprendre les systèmes observés. Une architecture MABS est donc l’idéal pour la simulation de foule. Différentes approches sont utilisées pour simuler le comportement de foule. Ces approches sont caractérisées par le nombre possible d’individus dans la simulation, leur niveau d’intelligence, leur habileté à prendre des décisions, les évitements de collisions, les méthodes de contrôle, etc. Certaines de ces méthodes considèrent les comportements de chaque individu de la foule, alors que d'autres ne font pas de différence entre ceux-ci. Dans notre contexte de simulation de foule, il est nécessaire de pouvoir effectuer des simulations comprenant un grand nombre d'agents. Voici quelques exemples d’approches qui ont servi à la simulation de comportements de foule. II.3.1 – Comportements de bas niveau Nous entendons par comportements de bas niveau ceux qui permettent à l'agent de se déplacer dans l'environnement. Dans notre système, ce type de comportements se situe dans la couche de navigation. Le sujet de ce mémoire ne porte pas sur les comportements de bas niveau, mais plutôt sur une couche de haut niveau qui sert en partie à contrôler le bas niveau. Malgré ce fait, il est quand même intéressant d'étudier ces approches.
    • 50 II.3.1.1 – Modèle de dynamique de matériaux granulaires L’utilisation d’un système de particules pour simuler une foule consiste à représenter les individus de la foule comme étant des particules obéissants à certaines règles. [Owen & al 98] utilise un système de particule pour modéliser le comportement d’une foule dans un contexte d’évacuation d’un lieu clos lors d’un incendie. La simulation cherche à savoir si un lieu donné peut être évacué dans un temps prescrit, à identifier les endroits problématiques où les gens s’accumulent et à déterminer les endroits où la pression d’écrasement serait trop forte dans la foule. C’est un modèle en 2 dimensions qui est exécuté rapidement. La méthode pour simuler la dynamique de la foule est basée sur un modèle de dynamique moléculaire de flux de matériaux granulaires. Chaque personne est représentée par un élément modifiable qui suit un ensemble d’objectifs tout en interagissant avec les autres éléments indépendants et les frontières de l’environnement. Cela donne lieu à des interactions comportementales qui représentent la compétition pour l’atteinte des objectifs. Il est ainsi possible de voir les ralentissements et les fortes pressions de foules. Les éléments peuvent se chevaucher. La quantité de chevauchement permet de déterminer la force des interactions inter-éléments. Figure II.14 : Simulation de l’évacuation d’une foule dans un avion Le modèle permet d’ajouter du feu et de la fumée qui affecte les personnes en les ralentissant et en les rendant confus ce qui mène à de mauvais choix d’objectifs de sortie.
    • 51 Ce modèle permet un très grand nombre d’agents relativement simples qui obéissent à des lois physiques. II.3.1.2 – Modèle de dynamique des fluides Une deuxième technique utilise une analogie sur la physique de l’écoulement d’un fluide pour tenter de simuler la foule. [Still 00] argumente que cette méthodologie est inconsistante. En effet, des observations, notamment au « Wembley Complex Station », ont prouvé que la réalité ne concordait pas avec le modèle. En particulier, le modèle de dynamique des fluides pose l’hypothèse que l’écoulement est plus rapide au centre, alors que les observations sur la foule ont démontré que la foule se déplaçait plus rapidement sur les côtés. Ce mouvement chez la foule bloque l’avancement de la foule et ce phénomène n’existe pas dans l’écoulement d’un fluide. De plus, chaque individu a le choix de sa propre direction, ne conserve pas son élan, pouvant avancer et arrêter à sa guise. Pour toutes ces raisons, le modèle de dynamique des fluides ne peut pas s’appliquer à la dynamique des foules. En bref, les techniques sur la dynamique des flux de matériaux granuleux ou des fluides semblent ne pas être l’idéal pour tenter de simuler des comportements de foule. En effet, les modèles ne reflètent pas vraiment la réalité et, si certains sont assez réalistes pour être applicables, le domaine d’application se limite presque uniquement à l’évacuation d’endroits clos dans une situation d’urgence. De plus, bien que le nombre d’individus puisse être très grand, chacun d’eux obéit aux mêmes règles. II.3.1.3 – Système d’attroupement Les travaux de Craig W. Reynolds ont offert un apport important à la simulation de comportements de foule. À commencer par un modèle d’attroupement simple qui permet de décomposer le comportement complexe de groupe en trois règles simples de déplacement au niveau individuel [Reynolds 87]. Ce système se distingue des systèmes de particules
    • 52 grâce à ses éléments plus complexes que les particules dans leur définition même et dans leur comportement. Trois règles sont utilisées pour obtenir le comportement d’attroupement. La première règle est d’éviter les collisions avec les membres du troupeau. La seconde règle est de tenter d’aller à la même vitesse que les autres membres du troupeau. La dernière règle est de tenter de rester près des autres membres du troupeau. Les travaux plus récents de Reynolds portent sur des agents autonomes qui peuvent servir pour des animations créées par ordinateur, des jeux ou des environnements virtuels [Reynolds 99]. Étant autonomes, ces agents décident en temps réel de leurs actions, à la différence des agents qui suivent un simple script. Reynolds a défini une hiérarchie de comportements de mouvement à trois niveaux. Le premier niveau concerne la sélection de l’action, c’est-à-dire, l’élaboration d’une stratégie, l’atteinte de buts ou la planification. C’est en fait le niveau cognitif de l’agent qui décide du comportement à adopter. Le second niveau porte sur la détermination du chemin à emprunter. C’est à ce niveau que se trouve l’apport majeur de Reynolds. Le dernier niveau est celui de la locomotion, c’est-à-dire, l’animation et l’articulation de l’agent. Plusieurs comportements de base et plus complexes ont été définis pour ce système. Il y a des comportements de poursuite et d’évasion d’une cible qui peut être, ou non, en mouvement, ainsi qu’un comportement permettant aux agents d’éviter les obstacles, d’explorer l’environnement sans but précis, de fouille et de suivi d’un chemin. Il définit aussi des comportements de groupe comme la séparation, la cohésion et l’alignement. Le comportement d’attroupement décrit dans [Reynolds 87] peut être obtenu en combinant la séparation, la cohésion et l’alignement. Finalement, il définit le comportement de suivi du leader, ainsi que d’autres comportements combinant plusieurs comportements. II.3.2 – Comportements de haut niveau Le groupe de recherche Computer Graphics Lab (LIG) dirigé par Daniel Thalmann a travaillé sur plusieurs projets touchant toutes les questions de la simulation d’humains.
    • 53 Entre autres, ils ont modélisé des foules dans un environnement collaboratif virtuel (CVE). Ce projet visait à créer une impression de foules afin d’obtenir un monde virtuel le plus réaliste possible [Musse & al 98] [Farenc & al 98]. Il s’agit d’un modèle urbain hiérarchique avec une connaissance intégrée, adaptée à la simulation de comportement humain, de groupe et de foule. La connaissance urbaine est un ensemble structuré d’information et d’objets utilisables selon certaines conventions. La connaissance urbaine est donc l’association entre des zones de la ville et des informations sémantiques. L’objectif est que les agents puissent agir et atteindre leurs buts sachant ces informations. De plus, il est possible de décharger les agents de certains comportements d’interaction avec les objets, en définissant certaines propriétés à l’intérieur même des objets, créant ainsi des objets intelligents. Ils contiennent généralement un ensemble hiérarchique des parties, des actions, des commandes, des gestes et des règles de fonctionnement. Les agents utilisent le modèle de comportement basé sur des règles. II.3.2.1 – Architecture du modèle Dans l’architecture de la figure II.15 développée par le groupe de recherche de Thalmann, le comportement d’une foule est distribué sur des groupes et les comportements individuels obéissent aux spécifications du groupe. Le mouvement de foule est basé sur l’atteinte de buts, chaque groupe suivant sa liste de buts qui est distribuée de différentes façons entre les individus. L’approche de ce groupe de recherche vise à représenter les comportements émergents, c’est-à-dire, les effets globaux qui surviennent comme une fonction des règles appliquées localement. Le tableau II.2 présente les comportements implantés au niveau des groupes, soit la poursuite d’un but, l’attroupement, la gestion des collisions, suivre un individu ou un groupe et changer de but. De plus, le groupe peut être guidé, les buts étant choisis par l’utilisateur, sinon le groupe est autonome. Un ou plusieurs groupes peuvent être guidés en suivant un avatar qui est une source de buts dynamiques, selon la position qu’il occupe. Le groupe autonome doit avoir toute l’information des buts à atteindre au début de la simulation.
    • 54 Figure II.15 : Architecture du modèle CROWD Tableau II.2 : Comportements des groupes Poursuite d’un but Le groupe a l’habileté de chercher des endroits précis. Attroupement Le groupe a l’habileté de marcher ensemble dans un mouvement structuré. Déplacements sécurisés L’évitement des collisions par les agents. Suivre Le groupe a l’habileté de suivre un groupe ou un individu. Changement de but Le comportement du groupe peut changer en fonction des relations entre les individus. Contrôle du groupe Le groupe peut être contrôlé (autonome ou guidé). Le système de foule doit contenir suffisamment d’information pour permettre d’éviter les collisions entre les humains virtuels, d’interagir avec des objets et de connaître
    • 55 des endroits spécifiques. Il y a deux types d’information : les buts qui sont les stimuli de mouvement et qui représentent les endroits où la foule doit se rendre, passer par et agir, puis, il y a les positions des obstacles. Parmi les buts à atteindre, nous avons les points d’intérêt (IP) et les points d’actions (AP). Les IPs sont définis géométriquement par une position et une région où il est possible de marcher. Il peut y avoir plusieurs chemins reliant deux IPs. Un AP est défini par une position, une région et une spécification indiquant si les agents doivent arrêter ou pas. Lorsque les agents doivent arrêter, il y a un vecteur d’orientation des agents et une action associée. Les régions IP et AP doivent être définies de façon à permettre implicitement l’évitement des collisions avec les objets. L’utilisateur peut choisir les buts spécifiques aux différents groupes ou encore, le système peut faire une planification des mouvements en utilisant la proximité entre des buts pour décider le prochain IP avec l’algorithme II.1 qui suit. Algorithme II.1 : Reconstruction automatique de chemin Begin for each group g final_position = random(list_of_AP) initial_position = random(universe) path=BezierInterpolation(inital_position final_position) for each point pi of Bezier curve for each interest point pj if Near_distance(pi, pj) pi = pj pi_region = pj_region End Chaque point d’intérêt comporte des sous-sections à être occupé en considérant la priorité de proximité du point et la densité de la sous-région. La position des agents dans une sous-section est déterminée aléatoirement. Le chemin utilisé pour se déplacer entre deux buts est calculé en utilisant l’interpolation linéaire ou les courbes de Bézier. Les chemins peuvent être semblables pour chaque agent, mais ils sont différents, car les agents ne peuvent pas occuper la même sous-région.
    • 56 Le but de ce projet est de simuler le comportement d’un ensemble de groupes d’humains virtuels d’une foule [Musse & Thalmann 98]. Chaque groupe possède une liste de buts et un comportement général spécifié par l’usager et les comportements individuels sont créés par un processus aléatoire sur chaque groupe. Le comportement général du groupe a pour effet que les membres du groupe suivent une certaine tendance comportementale. Le modèle de comportement de foule est basé sur les relations entre les groupes. Les humains virtuels réagissent en la présence des autres. Lorsqu’ils font des rencontres, ils évaluent leurs paramètres émotionnels avec ceux des autres et si les émotions sont semblables, deux agents peuvent décider de marcher ensemble. Les paramètres d’un groupe sont spécifiés par la liste de buts, le nombre d’humains virtuels dans le groupe et le niveau de dominance de chaque groupe. Les agents sont créés selon l’information sur le comportement du groupe. Les paramètres individuels sont la liste de buts, les intérêts de l’individu pour ces buts, un état émotionnel, le niveau relationnel avec les autres groupes et le niveau de domination. Tous les paramètres individuels peuvent être changés dépendant des relations avec les autres. Si, par exemple, nous avons un humain virtuel A d’un groupe GA et un autre humain virtuel B d’un groupe GB, alors les agents A et B aurons les paramètres suivants : À partir de ces paramètres, il est possible de créer des situations dans lesquelles les paramètres individuels changent. Voici un exemple durant lequel A passe du groupe GA au groupe GB :
    • 57 II.3.2.2 – Relations entre les individus Au niveau individuel, les agents possèdent trois possibilités d’action interindividuelle. La première est l’évaluation des positions et la décision de qui doit changer de direction pour éviter une collision. Si l’agent est dans une région de densité forte en terme de nombre d’agents, la détection de collision survient seulement quand les individus sont près les uns des autres. Si l’agent est dans une région à faible densité, la détection est effectuée selon une distance plus grande entre les agents. La deuxième possibilité est d’attendre un agent du groupe qui est en retard, en vérifiant si tous les agents du groupe ont atteint le but. La dernière est de rencontrer un autre agent et d’évaluer les paramètres sociaux selon les règles définies dans le modèle social. Cette dernière possibilité peut changer le comportement du groupe et de la foule, comme nous l’avons vu précédemment. L’attroupement des agents est défini par les quatre règles suivantes : - Les agents d’un même groupe partagent la même liste de buts; - Ils marchent à la même vitesse - Ils suivent les chemins générés entre les buts - Un agent peut attendre un autre membre du groupe quand il arrive à un but.
    • 58 Ces quatre règles ont pour conséquence que les agents d’un même groupe marchent ensemble. II.3.2.3 – Exigences pour des agents sociaux crédibles Pour obtenir un niveau de réalisme des agents qui les rend acceptables en terme de crédibilité, il est nécessaire de leur donner une identité sociale [Guye-Vuilleme & Thalmann 00]. Il y a quatre concepts sociologiques dont il faut tenir compte. Cette méthode diffère de l’approche Bayesienne, car une décision est considérée bonne selon l’acceptation sociale et les valeurs personnelles, au lieu d’un calcul d’utilité. Les normes font donc partie de ces quatre concepts. Ce sont les normes qui fixent les standards comportementaux d’une société et d’une culture. Les normes guident l’action et spécifient ce qui doit être fait et ce qui est interdit dans une situation donnée. Les normes permettent donc, dans une situation précise, de vérifier si les conditions de certaines règles comportementales s’appliquent. Il faut préciser que cette vérification des conditions n’implique pas la prise de décision en tant que telle. C’est-à-dire, même si les conditions sont remplies pour un certain comportement, l’agent reste libre d’appliquer ou pas ce comportement. En effet, ce sont les valeurs qui sont à la base de sélection des actions. Une action est dite bonne à partir des valeurs indépendamment de ces chances de succès. Les valeurs impliquent la recherche d’un état abstrait idéal et servent de critère de classification. Elles constituent le système moral personnel. Le troisième concept est la vision du monde. Il faut identifier la vision du monde des groupes, la façon dont elle est créée et maintenue, afin de comprendre les actions des individus. Les mécanismes cognitifs agissent sur la perception et permettent de créer plusieurs réactions potentielles différentes pour une même situation. Les individus n’agissent pas objectivement par rapport à une situation, mais plutôt selon leur définition de la situation. Une différente approche des ethnométhodologistes a décrit un mécanisme de « typification » qui permet d’organiser notre perception des autres et du monde. Nous associons ainsi des caractéristiques aux gens et aux objets que nous percevons afin de les définir et de les comprendre. Ces définitions sont constamment mises à jour suivant les expériences personnelles. Le rôle est le dernier des quatre concepts. Le comportement d’un individu est relié au statut social. Un rôle comporte un ensemble cohérent de
    • 59 comportements standard, ainsi que la vision du monde, les normes et les valeurs. Le rôle est lié à plusieurs caractéristiques individuelles et un même individu peut posséder plusieurs rôles. Les individus ajustent leur rôle aux autres pendant des interactions sociales. Pour prendre en compte ces quatre concepts, nous devons respecter certaines exigences architecturales. Tout d’abord, l’architecture doit permettre d’associer plusieurs comportements globaux distincts, afin de tenir compte du fait qu’un individu peut avoir plusieurs rôles et parce que les activités sont multiples et diverses. Deuxièmement, il faut un mécanisme permettant de changer de comportement. Le contexte social local devrait être utilisé pour déterminer si un changement est nécessaire. Ensuite, les agents doivent agir selon l’environnement social. Lorsqu’il adopte un comportement global, l’agent doit encore prendre une décision sur l’action à entreprendre. Ces décisions ne devraient pas être effectuées seulement selon l’environnement physique, mais aussi avec l’environnement social et culturel. L’agent doit donc posséder une connaissance spécifique de son environnement social. De plus, il faut un mécanisme cognitif de base permettant d’agir de façon subjective, selon la définition du monde. Pour personnaliser le comportement de l’agent, il doit être en mesure typifier ou de classifier les autres et les objets. Les critères de décision doivent être définis pour chaque rôle. Parfois, nous agissons naturellement et n’avons pas à prendre de décisions sur ce que nous devons faire. Ces comportements standards sont des comportements routiniers et basés sur les normes. Ces actions sont automatiquement déclenchées ou empêchées dans une situation donnée. Finalement, il faut que les agents agissent selon leurs valeurs sociales et pas seulement pour l’accomplissement de buts. Les actions doivent être évaluées selon les valeurs de l’individu, pour savoir si elles sont bonnes ou mauvaises, indépendamment de leur utilité. Les agents doivent paraître crédibles et leurs actions doivent être spontanées et imprévisibles [Becheiraz & Thalmann 98]. Pour respecter ces exigences, l’équipe de Thalmann utilise les émotions, qui sont définies par des conditions d’émergence, différentes pour différents acteurs, qui décrivent comment et quand elles doivent émerger. L’utilisation des émotions augmente la crédibilité des agents en leur permettant de réagir de différentes façons à la même situation, autant pour un même agent que pour différents
    • 60 agents. Les réactions d’un agent sont définies par son caractère, ce qui permet de définir des personnalités distinctes pour chaque agent. Étant donné la nature dynamique du monde, les agents doivent percevoir leur environnement pour pouvoir décider des actions à entreprendre pour atteindre leurs buts. Le modèle comportemental s’occupe de la perception et du contrôle moteur, alors que le modèle émotionnel s’occupe de la génération et de la représentation des émotions. Pour ressentir des émotions, un acteur doit percevoir les objets de son environnement, les autres acteurs ainsi que leurs actions et les conséquences de ces actions, appelées événements. Les émotions peuvent être générées en réponse à des actions ou à des événements. La Figure II.16 présente l’architecture globale du modèle comportemental. Figure II.16 : Architecture globale du modèle comportemental II.3.2.3.1 – Perception La perception est décomposée en trois catégories, soient la perception d’objets et d’acteurs, la perception des actions des acteurs et la perception des événements. Il y a trois classes d’événements, soient les événements désirables, les événements qui arrivent à un autre acteur et les événements potentiels qui peuvent ou peuvent ne pas arriver. La première classe de perception vient de la perception d’un acteur, d’une de ses actions et d’un objet impliqué qui, ensemble, correspondent à un événement désirable. La deuxième classe est semblable à la première sauf que l’agent qui perçoit n’est pas celui qui subit l’événement. La dernière classe de perception se fait en deux étapes, soit la perception d’un événement
    • 61 potentiel et sa confirmation ou son infirmation après un certain temps. Bien que des animations et des modèles 3D très réalistes forment le monde 3D, les agents ne peuvent pas percevoir et analyser la complexité d’une telle scène. La méthode de perception de l’équipe de Thalmann, pour ce projet, est donc basée sur la catégorisation de chaque objet, agent et action selon sa nature et ses caractéristiques. II.3.2.3.2 – Émotion Les émotions sont divisées selon les trois classes, identiques à celles de la perception. Les émotions sont générées en réaction aux objets, aux actions des agents et aux événements. Les émotions concernant les événements sont séparées en trois types. Le premier groupe contient les émotions causées par un événement potentiel, le second, par les événements affectant la destinée des autres et, finalement, par les événements qui affectent le bien-être des agents. Figure II.17 : Algorithme de calcul d’une émotion
    • 62 Une émotion est calculée en deux étapes. Avant tout, il faut que les conditions d’émergences par rapport à la perception soient satisfaites. Ensuite, le potentiel d’une émotion est calculé à partir du groupe des éléments contribuant à l’émotion. Si le potentiel traverse le seuil, la valeur est utilisée pour calculer l’intensité de l’émotion. Le potentiel et le seuil sont des valeurs dans l’intervalle [0,1]. La Figure II.17 présente l’algorithme de calcul d’une émotion, où pour une émotion em, nous avons le potentiel empot, le seuil emθ et l’intensité emi. II.3.2.3.3 – Comportement Comme le montre l’architecture globale, les comportements proviennent des perceptions et des émotions. Le module des comportements gère l’exécution des comportements en parallèle ainsi que les transitions entre les comportements séquentiels. Un comportement est composé d’un ensemble d’une ou de plusieurs cellules comportementales qui sont structurées sous forme d’automate fini, permettant l’exécution séquentielle. L’état courant de l’automate est défini par la cellule active. La Figure II.18 montre un exemple de structure d’un comportement. Figure II.18 : Structure d’un comportement Une cellule comportementale est composée d’un ensemble de comportements exécutés de façon concurrente. Ces comportements sont soit des comportements, soit comportements élémentaires. Le comportement élémentaire est donc l’élément final de cette hiérarchie récursive. Deux comportements peuvent être reliés ensemble par un lien
    • 63 d’inhibition indiquant que l’exécution de ces comportements doit être effectuée exclusivement et non concurremment. Une cellule comportementale utilise trois fonctions, l’activation, l’exécution et la transition à une autre cellule. L’activation initialise le comportement. L’exécution est utilisée pour effectuer des opérations spécifiques au comportement modélisé par la cellule comportementale. La fonction de transition évalue quand une transition à une autre cellule comportementale doit être effectuée soit en testant la terminaison du comportement ou, par exemple, en détectant une perception particulière. La Figure II.19 donne la structure d’une cellule comportementale. Figure II.19 : Structure d’une cellule comportementale Le comportement élémentaire permet d’activer et de contrôler une ou plusieurs actions. C’est une structure générique qui encapsule un comportement spécialisé qui contient les actions et détermine leurs paramètres de contrôle. La structure du comportement élémentaire est présentée dans la Figure II.20. Figure II.20 : Comportement élémentaire encapsulant un comportement spécialisé
    • 64 Un comportement est exécuté de façon récursive en exécutant chaque comportement, cellule comportementale et comportement élémentaire, à chaque niveau de la structure hiérarchique du comportement. L’état de chaque comportement ou comportement élémentaire de la cellule comportementale est évalué et ensuite, chaque lien d’inhibition est appliqué. Les comportements ou comportements élémentaires actifs et non- inhibés sont effectués. Ce processus est effectué du bas au top de la hiérarchie du comportement. Ensuite, les actions spécialisées sont effectuées. II.3.2.3.4 – Action Le module d’action gère l’exécution des actions d’un comportement en animant le modèle humain générique. Il permet l’exécution concurrente ou séquentielle en gérant les transitions pour qu’elles soient fluides. II.3.2.4 – Conclusion sur le modèle de Thalmann Le modèle de Thalmann comprend plusieurs concepts qui sont importants pour notre modèle. Le modèle traite de la foule, de groupes et d'individus. Il offre plusieurs possibilités d'actions individuelles ou de groupe. L'architecture globale du module comportemental n'est pas inutilement complexe et comporte les éléments essentiels selon Thalmann à l'obtention d'agents sociaux crédibles. Nous y retrouvons la perception et les émotions qui affectent le comportement qui décide des actions à effectuer. La structure des comportements est aussi intéressante, offrant la possibilité d'actions concurrentes et de liens inhibiteurs entre les actions. La structure récursive sous forme de cellules comportementales permet de bien structurer les comportements, sous différents niveaux d'abstraction. Ce modèle est évidemment une bonne base pour la définition de notre propre modèle.
    • 65 II.4 – Conclusion En conclusion, il est assez difficile de trouver des systèmes de simulation de foules, ainsi que des modèles généraux, des lois et des formules théoriques régissant ce domaine. Les théories de la psychologie sociale sont nombreuses, mais la modélisation et la consolidation de ces théories restent un défi de taille. Il est évident que la quantité de variables pouvant entrer en compte dans la simulation de comportements de foule est immense. Il est donc nécessaire, comme pour tous les modèles qui existent, de réduire le nombre de variables en jeu, obtenant ainsi une abstraction satisfaisante de la réalité par rapport à nos buts et nos objectifs. Les théories entourant la socialisation organisationnelle semblent un bon point de départ pour définir les spécifications des individus, des groupes et des interrelations entre ceux-ci. D’autres théories de la psychologie sociale semblent aussi intéressantes. Par exemple, celle qui porte sur les comportements déviants pour permettre de modéliser des comportements de foule comme des émeutes ou des combats entre différents individus ou groupes. La simulation idéale serait celle où la foule, les groupes et les individus ont le plus haut niveau d’autonomie possible et que cette autonomie reste contrôlable par l’usager qui pourrait provoquer ainsi certains comportements qui se produisent moins souvent. Mais, il ne faut pas se faire d’illusions, car les limitations sur la performance face à la complexité d'un modèle nous forcent à faire des compromis sur les différents niveaux d’autonomies. [Thalmann & al 00] explique ce compromis entre les différents niveaux d’autonomie.
    • 66 Chapitre III Les concepts du module comportemental de MAGS
    • 67 III.1 – Introduction Le simulateur MAGS (Multi-Agent GeoSimulation) a été développé par le Laboratoire d’Informatique Cognitive de l’Université Laval. Ce système multi-agent a pour but de simuler le comportement de milliers d’individus dans un environnement géographique virtuel. Bien que l’application courante du simulateur concerne la simulation de comportement de foule dans un environnement urbain, MAGS se veut une plate-forme générique permettant la simulation de plusieurs types de comportements, dans des environnements distincts. Le module comportemental de MAGS doit donc être suffisamment expressif et générique pour remplir les attentes de la diversité potentielle de contexte de simulation. Le système comporte cinq types d’agents, soient les agents mobiles, objets, clusters, groupes et scénarios. Un agent possède un ensemble d’états qui le caractérise en tant qu’individu dans la simulation. Entre autres, nous avons les états dynamiques et les états statiques qui permettent de représenter différents attributs de l’agent. Pour les états statiques, les valeurs représentées sont de nature stable, comme l’âge et le sexe d’un individu. Contrairement aux états statiques, les états dynamiques servent à représenter des caractéristiques d’un agent qui varient pendant la simulation. Ces états peuvent entre autres servir à représenter des variables physiologiques ou psychologiques telles que la faim, l’énergie, le besoin de se divertir, etc. La représentation de ce type de variable permet d’enclencher divers comportements lorsque la valeur courante de l’état dynamique franchit un seuil défini. De façon plus générale, les états de l’agent permettent l’enclenchement de certains comportements dépendamment des valeurs que prennent ces états. Les agents de chaque type possèdent leurs propres comportements. Les comportements dépendent des profils qui sont attribués aux agents. Un profil renferme un ensemble de rôles qui sont joués par les agents ayant ce profil. Un rôle est considéré comme un arbre d’objectifs. En fait, nous avons opté pour une approche à base d’objectifs pour simuler le comportement de nos agents. Un objectif est décomposable en sous-
    • 68 objectifs qui peuvent aussi être décomposés. Un rôle est donc un arbre d’objectifs constitué de nœuds et de feuilles qui sont respectivement des objectifs composés et élémentaires. Cette structure d’arbre nous permet de définir le comportement à différents niveaux d’abstraction. Un objectif est défini comme un état possiblement atteignable pour un agent, par l’exécution d’une ou plusieurs actions ou d’un ou plusieurs sous-objectifs, lorsque l’agent se retrouve dans une certaine situation. Ainsi, lorsqu’un agent est dans une certaine situation, c’est-à-dire lorsqu’un ou plusieurs états de l’agent ou de son environnement prennent certaines valeurs, l’agent a alors la possibilité d’exécuter une ou plusieurs actions qui lui permettront éventuellement de modifier ses états, ou ceux de son environnement, de façon à se retrouver dans une nouvelle situation qui correspond à la complétude de l’objectif. Un agent a la possibilité d’amorcer un objectif suivant certaines contraintes. Les contraintes peuvent être définies en rapport avec les différents états de l’agent et de son environnement, ainsi qu’avec le temps. Ces contraintes sont posées dans les règles d’activation d’un objectif. Lorsqu’une de ces règles s’applique, l’objectif s’active, c’est alors qu’il peut être sélectionné et exécuté dans le cas d’un objectif élémentaire. En effet, c’est à ce niveau que se trouvent les actions. L’exécution des actions d’un objectif élémentaire amène l’agent à changer d’état et d’environnement afin d’accomplir cet objectif. L’accomplissement d’un objectif est aussi géré par des règles, de complétude cette fois-ci, qui permettent de vérifier si l’agent a complété, avec ou sans succès, l’objectif entrepris. Chaque objectif est associé à un besoin de l’agent, ce qui lui permet de satisfaire ses besoins en accomplissant des objectifs. Chaque besoin a une certaine importance pour l’agent dépendamment de son profil et c’est en partie ce qui lui permet de faire le choix du comportement à adopter parmi l’ensemble des objectifs qu’il peut sélectionner à un instant donné. Le besoin nous donne en fait la priorité de base d’un objectif qui est associé à ce besoin. D’autres facteurs tels que l’intensité du besoin, les opportunités qui se présentent et les contraintes temporelles permettent d’augmenter l’importance d’un objectif en modifiant la priorité de base de celui-ci.
    • 69 Ce chapitre présente plus en détail ces différents concepts nécessaires à la compréhension de la structure d’objectifs, ainsi que des mécanismes du module comportemental. Dans un premier temps, nous explorons les différents types d’agents qui peuvent faire partie d’une simulation. Ensuite, nous présentons le concept de profil, qui permet d’associer à un agent ses rôles dans la simulation, c’est-à-dire l’ensemble des objectifs qu’il a le potentiel d’atteindre. Puis, nous détaillons la composition et le fonctionnement des objectifs. Finalement, nous traitons des mécanismes liés à la priorité des objectifs qui permettent à l’agent d’adopter un comportement plutôt qu’un autre.
    • 70 III.2 – Types d’agents de MAGS Les agents de MAGS ne sont pas tous des agents humains. Certains sont des objets et d’autres représentent des concepts plus abstraits. MAGS comprend en tout cinq types d’agents. Chaque agent possède plusieurs états qui le caractérisent. L’état de localisation permet de positionner l’agent dans son environnement. L’état de navigation gère les déplacements de bas niveau d’un agent, c’est-à-dire, éviter les collisions et se déplacer suivant les décisions prises au niveau du module comportemental. L’état de possession contient les avoirs d’un agent. L’état d’occupation comprend une liste des agents qui occupent un agent. Les états statiques permettent de représenter différentes caractéristiques de l’agent, tel que son âge, son sexe, etc. Finalement, les états dynamiques représentent les variables qui évoluent dans le temps, tels que la faim, l’énergie, etc. Les états dynamiques sont très importants pour le module comportemental. En effet, ce sont souvent ces états qui enclenchent un objectif lorsque la valeur courante dépasse un seuil. Tous ces états ne sont pas définis pour chaque type d’agent. Par exemple, un agent qui ne se déplace pas n’a pas besoin d’état de navigation. III.2.1 – Agents mobiles & objets Le premier type d’agent renferme tous les agents mobiles, tels que les voitures, les animaux, les humains, etc. Ceux-ci ont évidemment la capacité de se mouvoir. Tous les autres agents sont statiques ou ne sont pas positionnés dans l'environnement de la simulation. Les agents qui entrent dans la catégorie des agents objets, sont ceux qui ne se déplacent pas, par exemple, les guichets automatiques, les édifices, les bancs de parc, etc. Chaque agent peut posséder un comportement bien à lui, peu importe son type. Par exemple, un agent mobile tel qu’une voiture peut recevoir des commandes d’un agent conducteur. Une commande du conducteur enclenche tout simplement un objectif chez la voiture qui sélectionnera le comportement de façon à répondre à cette commande. Un agent objet peut avoir un comportement [THALMANN & AL 99]. Si, par exemple, nous modélisons le
    • 71 comportement d’un téléphone, celui-ci aura plusieurs objectifs lui permettant entre autres de sonner, d’établir la communication, d’avertir l’agent qui téléphone que la communication est terminée, etc. Le comportement est donc simulé au niveau micro, c’est- à-dire, que chaque agent a ses propres comportements. III.2.2 – Agents groupes & clusters De plus, nous avons deux types d’agents qui sont des groupes d’agents. Dans un premier temps, nous avons des groupes qui comportent un ensemble d’agents possédant une ou plusieurs caractéristiques communes. Ces groupes ne sont pas localisés dans l’espace de la simulation, ce sont des agents virtuels qui permettent d’organiser les agents en une hiérarchie. Par exemple, il est possible de définir des groupes d’agents mobiles tels que « étudiants », « enfants », « autobus », etc. Nous pouvons aussi créer des groupes d’agents objets comme « restaurants », « hôtels », etc. De plus, il se peut que plusieurs groupes aient des caractéristiques communes, de ce fait, nous pouvons aussi les regrouper sous un même groupe. Par exemple, il est possible de définir un groupe « édifices » qui contient les sous-groupes « édifices commerciaux », « édifices industriels » et « édifices résidentiels ». Ensuite, « édifices commerciaux » peut contenir les sous-groupes « restaurants », « stations service », « centres d’achat ». Cette hiérarchie permet entre autres une recherche efficace d’un agent appartenant à un groupe donné. De plus, rien n’empêche qu’un agent puisse faire partie de plusieurs groupes. De cette façon, nous pouvons avoir les groupes « épiceries » et « restaurants » dans le groupe « édifices commerciaux » et « besoin de manger ». Dans un second temps, nous avons les groupes d’agents qui se forment dynamiquement dans l’espace de la simulation, c’est-à-dire, qu’un tel agent est formé lorsqu’une certaine quantité d’agents mobiles occupent un certain espace, suivant des contraintes spécifiques. Nous nommons ce type d’agents « cluster ». Un cluster peut être une file d’attente, un attroupement autour d’un certain point d’intérêt, un groupe d’agents qui se déplacent ensemble, etc. Les clusters peuvent aussi faire partie d’agents groupes.
    • 72 Les agents groupes et clusters nous permettent d'obtenir une simulation qui tient compte du niveau macro en plus du niveau micro. En effet, en donnant un comportement à un groupe ou à un cluster, nous pouvons définir le comportement d’un ensemble d’agents. Les agents groupes servent principalement à regrouper les agents sous différentes catégories hiérarchisées. Mais, pour ce qui est des clusters, nous pouvons, par exemple, définir un comportement sur les déplacements des agents du cluster. Les clusters sont donc très pratiques pour modéliser le comportement de foule. Si nous prenons un cluster composé de policiers en rangs serrés, le cluster dictera aux agents leur position, ainsi que les déplacements à effectuer. Ceci nous permet aussi de réduire la complexité des comportements. Les agents groupes et clusters possèdent aussi des comportements sur la gestion des membres. Nous pouvons gérer la cohésion entre les membres des groupes et des clusters à l’aide d’objectifs. Par exemple, trois personnes qui se rendent ensemble à un certain endroit formeront un cluster. Mais, contrairement à l’exemple précédent, le cluster ne dictera pas exactement le comportement des agents. Il leur dira plutôt de ne pas trop s’éloigner les uns des autres. S’il advient qu’un des agents a soudainement un autre intérêt plus important, il pourra quitter le cluster pour aller remplir son nouvel objectif et les autres membres pourraient aussi décider de faire de même. Un autre exemple est celui du cluster qui gère la file d’attente des agents désirant aller retirer de l’argent au guichet automatique. En bref, il est possible avec un agent cluster d’assigner la position des agents pour qu’ils soient plus ou moins organisés et pour faciliter la navigation. III.2.3 – Agent scénario Finalement, le cinquième et dernier type d’agent est le scénario. Celui-ci est unique dans la simulation. Il sert à simuler les comportements qui ne sont pas attribuables à un agent spécifique ou les effets qui proviennent de causes qui ne sont pas simulées. En d'autres termes, le scénario simule des évènements qui ne pourraient pas survenir par eux- mêmes et qui sont spécifiés par l’usager. Le scénario est aussi un agent qui possède un comportement. Celui-ci est nécessaire, car il est impensable de pouvoir simuler tous les facteurs qui peuvent entraîner un
    • 73 comportement donné. C’est pourquoi nous avons créé cet agent qui sert à spécifier l’évolution de tout ce qui se trouve en dehors des limites de la simulation. Par exemple, si nous voulons simuler une panne d’automobile, nous ne simulerons pas toute la mécanique de la voiture et l’impact des éléments défectueux sur le comportement de la voiture. Un objectif du scénario sera donc utilisé pour forcer la voiture à tomber en panne sous certaines contraintes. Nous créons ainsi cet événement qui n’aurait pas pu se produire autrement. Le scénario sert aussi à gérer les arrivées et les départs des agents dans l’espace de simulation. III.2.4 – Résumé des types d’agents En résumé, nous avons cinq types d’agent qui sont les agents mobiles, les agents objets, les agents groupes, les agents clusters et l’agent scénario. Tout agent possède un comportement qui lui est propre, dépendamment de son profil. Chaque agent possède plusieurs états sur lesquels se basent plusieurs contraintes sur les comportements. Entre autres, il y a l’état de navigation pour les agents mobiles. Nous avons aussi un état de localisation qui permet de situer physiquement les agents dans la simulation. Les états les plus importants à mentionner sont les états dynamiques. Ceux-ci contiennent une valeur courante qui évolue dans le temps, ainsi que des seuils qui permettent de donner plus ou moins d’importance à l’état en question. Par exemple, ce type d’état peut servir à simuler la faim d’un agent qui augmente avec le temps et franchit différents seuils de tolérance. La section suivante explique le concept de profil et de rôle de notre modèle.
    • 74 III.3 – Profil des agents Chaque agent peut avoir différents profils. Les profils sont en quelque sorte la porte d’entrée du module comportemental. Le comportement d’un agent diffère selon les profils qui lui sont associés, car les profils permettent de définir le comportement d'un agent particulier en lui associant des rôles. Un rôle est tout simplement défini comme un arbre d’objectifs. Parmi l’ensemble des profils d’un agent, il y en a un d’actif à un instant donné. Le terme actif signifie que ce profil est considéré au moment de la vérification, de la sélection et de l’exécution du comportement. Le fait d’avoir plusieurs profils permet à l’agent de remplir certains rôles selon une situation et d’autres rôles dans une situation différente. Par exemple, prenons un agent qui travaille. Durant les heures de travail, il remplira les différentes fonctions associées aux rôles qu’il doit jouer à son travail. Lorsque le travail est terminé, le profil actif qui était celui du travail sera changé pour un autre profil qui contient les différents objectifs que l’agent doit remplir lorsqu’il n’est pas au travail. De plus, chaque agent possède un profil de base qui contient les rôles que l'agent doit considérer peut importe son profil actif courant. Les profils facilitent la tâche de découpage du comportement des agents. Par exemple, les profils peuvent servir à représenter les états d’un agent objet. En effet, si un agent objet peut prendre différents états et se comporter différemment selon l’état dans lequel il se trouve, nous pouvons représenter les états comme des profils, car c’est là toute la philosophie des profils que nous avons illustrée avec l’exemple du travailleur. Par exemple, un agent téléphone peut avoir les profils « Disponible », « En train de sonner », « Établissement de la communication » et « En communication ». Chacun de ces profils renferme un ensemble d’objectifs servant à simuler le comportement du téléphone dans l’état où il se trouve. Ainsi, nous n’avons pas à nous soucier d’une partie des comportements que le téléphone ne peut pas adopter selon la situation, puisque ceux-ci sont dans d’autres profils qui ne sont pas actifs.
    • 75 Pour ce qui est des agents groupes et clusters, nous pouvons aussi avoir différents profils. Par exemple, un cluster peut avoir un profil « file » qui est associé aux objectifs de gestion d’une file d’attente. Les profils renferment aussi les besoins d'un agent ainsi que l'importance relative qu'un agent attache à chacun de ses besoins. Ainsi, dépendamment du profil d'un agent, celui-ci cherchera à satisfaire davantage certains besoins plutôt que d'autres. Cette méthode permet de personnaliser le comportement d'un agent.
    • 76 III.4 – Comportement à base d’objectifs Comme nous l'avons mentionné précédemment, le module comportemental de MAGS est à base d'objectifs. Chaque agent d'une simulation possède des rôles à remplir qui régissent son comportement. Les agents de la simulation sont des agents vivants, des objets « intelligents » concrets ou abstraits ou encore des groupes d’agents. Les arbres d’objectifs augmentent l’expressivité du système de simulation en permettant d’organiser les règles comportementales et les actions complexes des agents d’une façon cohérente, en plus de permettre des contraintes supplémentaires sur l’exécution des actions. L’enchaînement des objectifs d’un arbre d’objectifs ainsi que le jeu de priorité offre à un agent une forme simplifiée de planification qui évite à l’agent d’avoir à élaborer de plans. L’agent cherche simplement à accomplir les objectifs activés, choisissant le plus prioritaire pour lui. Durant la simulation, un objectif peut servir une fois, plusieurs fois ou même jamais selon la nature de l'objectif, selon les contraintes définies et dépendamment des autres objectifs qui peuvent être plus important à réaliser. Les contraintes peuvent être basées sur l'état de l'agent ainsi que sur l'état de son environnement et elles peuvent aussi être de nature temporelle. Les règles d’activation et de complétude déterminent ces contraintes qui permettent de dire respectivement dans quelles circonstances un objectif peut être entrepris et accompli. En bref, la structure d’objectifs sert à représenter les comportements de nos agents et le comportement est vue comme étant une action ou un ensemble d’actions servant à atteindre des objectifs. Un objectif peut se décomposer en sous-objectifs, qui peuvent se décomposer de nouveau. Le niveau le plus haut est le plus abstrait, c'est en fait un rôle d’un agent. À mesure que nous descendons dans la hiérarchie, nous retrouvons plus de détails sur l’atteinte de cet objectif. Par exemple, un agent peut marcher vers la cuisine dans le but de se rendre au réfrigérateur. Mais, à un autre niveau, cet agent peut avoir comme objectif de satisfaire sa faim.
    • 77 La présente section explique en détail la structure d’objectifs. Nous verrons d'abord sa structure générale sous forme d’arbre. Ensuite, nous détaillerons le fonctionnement et la composition des objectifs, qui tourne autour du cycle de vie et de règles renfermant certaines contraintes sur ce cycle. Finalement, nous traiterons de la récurrence de certains objectifs. III.4.1 – Structure générale Avoir satisfait sa faim OU OU Avoir mangé Avoir mangé au ... sa nourriture restaurant ET ET Avoir Être rendu Avoir mangé la dans sa cuisiné sa nourriture cuisine nourriture cuisinée Figure III.1 : Exemple d’un arbre d’objectifs Un objectif peut être élémentaire ou composé. Un objectif élémentaire est rattaché à une ou plusieurs actions. Par exemple, l’objectif « Avoir satisfait son envie de manger » est rattaché à l’action manger de la nourriture. Un objectif composé est un objectif qui n’est pas rattaché à une action particulière, mais qui est une combinaison d’objectifs élémentaires et d’objectifs composés. Par exemple, l’objectif d’avoir réussi un examen est un objectif composé des sous-objectifs élémentaires suivants : « Avoir étudié », qui est rattaché à l’action étudier, et « Avoir passé l’examen », qui est relié à l’action passer un examen. Les objectifs composés permettent donc des actions complexes en regroupant d'autres objectifs.
    • 78 Par conséquent, la structure d’objectifs a la forme d’un arbre n-aire où la racine est l’objectif principal qui peut être composé ou élémentaire, les nœuds internes sont des objectifs composés et les feuilles sont des objectifs élémentaires. Les actions se retrouvent au niveau des feuilles seulement. L'arbre de la figure III.1 présente un exemple d’arbre d'objectifs permettant la satisfaction de la faim. Dans cet exemple, nous trouvons à la racine le rôle de l’agent qui consiste à satisfaire sa faim. Cet objectif renferme une série de sous-objectifs qui sont les différentes alternatives de l’agent pour atteindre son objectif. Parmi ces sous-objectifs, nous retrouvons l’objectif d’avoir mangé sa nourriture, qui est décomposé en trois sous-objectifs représentant les différentes étapes pour accomplir l’objectif de ce nœud. Le premier sous- objectif renferme l’action de marcher jusqu’à la cuisine. Le second sous-objectif pourrait être décomposé de nouveau afin de définir chaque étape plus précisément. La décomposition dépend en fait du niveau de granularité auquel se situent les actions. Peut- être que pour une simulation donnée, nous choisirons que l’agent mange tout simplement un repas dont la composition et la préparation ne sont pas décrites exhaustivement. Nous pourrions dans ce cas donner le choix à l’agent de grignoter ou de préparer un repas plus ou moins léger ou complexe, simulant le temps de préparation requis. Ce niveau de granularité se retrouve dans le jeu The SimsTM qui simule la vie au quotidien de personnages dans leur maison [ELECTRONIC ARTS INC. 02]. Il est possible qu’une autre application nécessite plus de détails. Pour ce faire, il faudrait modéliser les aliments et les ustensiles disponibles, donner un livre de recettes à l’agent et décomposer le sous-objectif permettant de cuisiner pour pouvoir atteindre le niveau de granularité désiré. L’avantage de cette structure est qu’elle permet de s’ajuster au niveau de granularité que nécessite l’application. D’une manière formelle, un objectif se définit selon la grammaire BNF suivante : Objectif ::= Objectif_Composé | Objectif_Élémentaire Objectif_Composé ::= Objectifs, Règles_D’Activation, Règles_De_Reprise, Règles_De_Complétude, Priorités&Temps, Est_Récurrent, Fréquence Objectif_Élémentaire ::= Actions, Règles_D’Activation, Règles_De_Reprise, Règles_De_Complétude, Priorités&Temps, Est_Récurrent, Fréquence Objectifs ::= {Objectif1, ..., Objectifn}
    • 79 III.4.2 – Cycle de vie Chaque objectif suit un cycle de vie particulier qui est défini dans la figure III.2. Figure III.2 : Cycle de vie d’un objectif Un objectif est inactif tant que les conditions de déclenchement définies par les règles d’activation ne sont pas satisfaites. Lorsqu’une de ces règles d’activation s’applique, l’objectif devient actif et, par conséquent, candidat à la sélection. Plus tard, s’il n’est pas sélectionné et qu’aucune des règles d’activation ne s’applique, il retombe à inactif. L’objectif qui est sélectionné pour l’exécution passe à en cours ou reste à ce statut s’il y était déjà. Lorsqu’il passe d’actif à en cours, les actions de l’objectif élémentaire sont exécutées. Les actions du système permettent de modifier les états d’un agent et de son environnement. Par exemple, si un agent décide de courir, sa vitesse sera augmentée, s’il mange, sa faim diminuera, et ainsi de suite. Il est à noter qu’un objectif composé peut être en cours seulement si au moins un de ses enfants est sélectionné, car les actions se trouvent au niveau des objectifs élémentaires. Le passage à en cours d’un objectif élémentaire entraîne le passage à en cours de ses objectifs parents jusqu’à la racine de l’arbre. L’objectif sélectionné est l’objectif qui est le plus prioritaire au moment de la sélection.
    • 80 L’étape de sélection constitue la décision que prend l’agent face à tous les objectifs candidats. Un objectif en cours peut être arrêté ou complété. Si l’objectif est arrêté et que c’est un objectif qui peut être repris, il devient suspendu. L’objectif suspendu redevient en cours lorsqu’il est le plus prioritaire pour l’agent. Dans le cas où un objectif est arrêté alors qu’il n’est pas complété et qu’il ne peut être suspendu, il devient non-atteint. Lorsqu’une des règles de complétude s’applique alors qu’un objectif est en cours ou suspendu, il devient atteint ou non-atteint, selon la règle appliquée. Le tableau III.1 résume les différentes transitions possibles. Tableau III.1 : Causes des transitions dans le cycle de vie d’un objectif État de départ Cause de la transition État d’arrivée Inactif Au moins une règle d’activation s’applique. Actif Actif Aucune règle d’activation ne s’applique. Inactif En cours ou Au moins une règle de complétude menant au succès Atteint suspendu de l’objectif s’applique. En cours ou Au moins une règle de complétude menant à Non-Atteint suspendu l’insuccès de l’objectif s’applique. Actif L’objectif a la plus forte priorité. En cours L’objectif a la plus forte priorité et au moins une Suspendu En cours règle de reprise s’applique. En cours L’objectif n’est plus prioritaire et peut être suspendu. Suspendu L’objectif n’est plus prioritaire et ne peut être En cours Non-atteint suspendu. Ce tableau montre les causes des transitions dans le cycle de vie d’un objectif. Nous avons l’état de départ et l’état d’arrivée pour chacune des transitions possibles enrichies des causes du déclenchement des transitions. Explicitons chacune de ces causes de façon à mieux comprendre le cycle de vie d'un objectif. Lorsque l’objectif est inactif, la cause de transition est qu’au moins une règle d’activation s’applique. En effet, nous avons un ensemble de règles portant sur l'activation d'un objectif. L'ensemble représente la disjonction entre les règles, alors que la conjonction est représentée à l'intérieur même de la règle par l'ensemble des préconditions qui y sont définies. Nous obtenons ainsi une forme normale disjonctive, d'où le fait que l'activation de l'objectif nécessite seulement
    • 81 l'application d'une des règles. Si aucune règle d'activation ne s'applique, il est évident que l'objectif ne deviendra pas actif. Dans le même ordre d'idée, si l'objectif est actif et qu'aucune règle d'activation ne s'applique, alors l'objectif retourne à inactif. Nous avons aussi un ensemble de règles portant sur la complétude de l'objectif. Dans un premier temps, à partir d’en cours et de suspendu, il est possible que l'objectif passe à atteint lorsqu'au moins une des règles de complétude menant au succès de l'objectif est applicable. Encore une fois, l'ensemble de ces règles suit une forme normale disjonctive. Par contre, les règles de complétude ne mènent pas toutes à l'atteinte avec succès d'un objectif. En effet, il est possible que des règles de complétude mènent à l'échec d'un objectif. Si l'une de ces règles est applicable à partir d’en cours ou de suspendu, l'objectif devient non-atteint. Nous avons donc deux catégories de règles de complétude et s'il advenait que des règles des deux catégories soient applicables au même moment, il y aurait une incohérence au niveau de ces règles. Un objectif peut devenir en cours, à partir d’actif et de suspendu, lorsqu'il possède la priorité la plus élevée. De plus, lorsqu’il est suspendu, il faut qu’au moins une des règles de reprise s’applique. Un objectif en cours est un objectif que l'agent cherche à atteindre à un instant donné par l'exécution des actions de l'objectif. Le fait qu'un objectif soit actif n'implique aucunement que l'agent est en train d'essayer d'atteindre ou entreprendra cet objectif. Le fait d’être actif stipule simplement que l'agent a la possibilité d'entreprendre l'objectif lorsque ce dernier est le plus prioritaire. Lorsqu'un objectif en cours ne possède plus la priorité la plus forte, il y a deux cas possibles selon que l'objectif peut être suspendu ou non. Dans le cas où l'objectif peut être suspendu, l'objectif devient suspendu. Sinon, l'objectif devient non-atteint. Bien que le cycle de vie contient un état suspendu, les mécanismes nécessaires à sa mise en œuvre ne sont pas encore présents dans le système étant donnée la complexité qu’entraîne la suspension. Les règles de reprise ne sont donc pas considérées dans les
    • 82 algorithmes. Nous verrons à la section VI.2.4 différentes considérations et possibilités utiles pour traiter ce problème. III.4.3 – Règle Une règle est composée de préconditions. Pour qu’une règle s’applique, il faut que toutes les préconditions de celle-ci soient vérifiées et remplies. L’application d’une règle entraîne une ou plusieurs actions. Une règle est donc un ensemble de préconditions et d’actions. Quel que soit le type de règle, elles sont toutes définies formellement par la grammaire BNF suivante : Règles ::= {Règle1, …, Règlen} Règlei ::= Pré-conditions → Actions Pré-conditions ::= Pré-condition1 ∧ … ∧ Pré-conditionm Plus spécifiquement, les règles d’activation sont les règles qui sont vérifiées lorsqu’un objectif est inactif afin de faire passer celui-ci à actif. Une règle s’applique lorsque toutes ses préconditions sont remplies. Les préconditions servent, dans ce cas, à déterminer dans quelles circonstances le comportement peut être adopté par l’agent. Ces préconditions peuvent porter sur plusieurs facteurs tels que l’état d’un agent, l’état de son environnement et même le statut d’un autre objectif. Il est à noter que les sous-objectifs d’un objectif composé ne sont pas nécessairement ordonnés dans l’ordre de présentation. Les règles d’activation permettent de déterminer quels objectifs sont activables à un instant donné. Pour obtenir un ordonnancement des sous-objectifs, nous devons spécifier des règles d’activation basées sur cet ordre en utilisant des préconditions portant sur le statut des autres objectifs. Si nous reprenons l’exemple précédent, nous aurons une précondition dans une règle d’activation, pour l’objectif d’avoir cuisiné sa nourriture, portant sur le fait d’avoir atteint l’objectif d’être rendu dans sa cuisine. Bref, lorsque les préconditions sont toutes vérifiées positivement pour une des règles d’activation de l’objectif, l’objectif devient actif et les actions de la règle sont exécutées.
    • 83 Pour ce qui est des règles de complétude, elles servent à déterminer sous quelles conditions un objectif est atteint ou non-atteint. Elles fonctionnent de la même façon que les règles d’activation, sauf que les règles de complétude se basent sur les états qui permettent de déterminer si l’objectif est complété. Ces règles permettent entre autres de déterminer la nécessité d’accomplir ou non un sous-objectif pour compléter l’objectif parent. Un arbre d’objectifs n’a pas une structure fixe en terme des alternatives et des conjonctions de sous-objectifs à l’accomplissement d’un objectif. L’objectif composé possède ses propres règles de complétude qui permettent de définir les conditions nécessaires à la complétude de l’objectif. En utilisant des préconditions basées sur le statut des autres objectifs, nous avons la possibilité de définir un sous-objectif comme étant facultatif, exclusif ou nécessaire en combinaison avec d’autres sous-objectifs pour atteindre l’objectif parent. Finalement, les règles de reprise permettent de définir sous quelles conditions un objectif peut être repris lorsqu’il est suspendu. Comme nous l’avons mentionné à la section précédente, les règles de reprise ne sont pas considérées dans les algorithmes puisque le problème de la suspension n’est pas encore réglé. III.4.4 – Précondition Une précondition est une inéquation qui porte sur différentes valeurs du système. Nous verrons à la section suivante comment les éléments de formule permettent de cibler ou de contenir ces valeurs. Grâce aux préconditions, nous pouvons vérifier qu’une certaine valeur est plus petite, plus petite ou égale, égale, différente, plus grande, ou plus grande ou égale à une autre valeur. Par exemple, nous pouvons vérifier si un agent est arrêté en utilisant un élément de formule qui questionne son état de navigation pour obtenir le mode
    • 84 de navigation courant et comparer cette valeur à un autre élément de formule qui contient la valeur qui correspond à l’arrêt. Prenons un exemple simple d'un objectif élémentaire qui permet à un agent de satisfaire sa faim. Une règle d'activation possible pour cet objectif est la suivante : lorsqu’un agent a faim et qu’il possède de la nourriture, l'objectif devient actif. Cette règle est composée de deux préconditions. La première nécessite que l’état dynamique de la faim soit défini pour cet agent. Cette précondition vérifie que la valeur courante de l’état dynamique qui représente la faim est supérieure à un seuil, disons un seuil minimum, qui n’est pas très urgent, car l’agent a simplement le goût de grignoter. Si la vérification de cette précondition échoue, la règle ne s’applique pas. Sinon, nous passons à la prochaine précondition qui vérifie que l’agent possède de la nourriture. Cette précondition vérifie l’inéquation suivante : « Quantité de nourriture possédée par l’agent > 0 ». La vérification de la quantité de nourriture que possède l’agent peut se faire grâce à l'état de possession. Si cette deuxième précondition s’applique, l'objectif devient actif. L'action de cet objectif est de manger la nourriture possédée, entraînant une diminution de la faim de l’agent, ainsi que la quantité de nourriture qu’il possède. Finalement, deux règles de complétude sont définies. La première vérifie si l'agent a suffisamment mangé, auquel cas il cessera de manger et l'objectif sera atteint. La seconde règle de complétude vérifie si l'agent ne possède plus de nourriture à manger, auquel cas l'agent cessera de manger et l'objectif sera non-atteint. III.4.5 – Élément de formule Suite à la définition des préconditions, nous abordons la façon de les définir. C'est- à-dire, comment faire pour référer à tous les états d’un agent, à son profil, ses objectifs, ainsi qu’aux autres agents dans une inéquation ? La réponse est dans les éléments de formules. Ceux-ci peuvent référer tout ce qui est défini dans le système, à l’aide de plusieurs niveaux de référence. Ainsi, la vérification d'une précondition consiste à appliquer
    • 85 un opérateur d'inéquation sur deux éléments de formule et à retourner la valeur de vérité obtenue par l'application de l'opérateur. Il y a quatre types d’éléments de formule possibles. Le premier type d’élément de formule est le nombre réel. Ce dernier renferme simplement un nombre réel donné sur lequel une précondition peut être définie. La figure III.3 montre un exemple d’un élément de formule de type nombre réel qui renferme la valeur 5. Le second type d’élément de formule est la chaîne de caractères, qui, de la même manière que le premier type, stocke une chaîne de caractères qui peut être un membre d’une inéquation dans une précondition. Id : 1 Type : FLOAT_LEAF Value : 5.0 Figure III.3 : Exemple d’élément de formule de type nombre réel Le troisième type d’élément de formule est un peu plus complexe. Ce type permet de référer à une variable d’un agent. Pour atteindre la variable voulue, un système de niveau de référence sert d’index. Un élément de formule de ce type contient trois niveaux de référence qui sont utilisés pour obtenir une valeur lors de la vérification du comportement d’un agent. Cette valeur peut faire partie de l’agent en question, ou encore d’un agent externe. Dans le cas d’un agent externe, celui-ci est déterminé dynamiquement en cours de simulation. C’est le mécanisme de référence qui nous permet une telle expressivité. En bref, le mot référent est lié au même terme de la syntaxe grammaticale qui est défini comme : « ce à quoi renvoie un signe linguistique ». Ainsi, pour notre système, un référent est, par analogie, un signe linguistique qui pointe sur un agent. Le mécanisme de référence permet aux agents de raisonner sur d’autres agents en passant le référent d’un élément de formule à l’autre. Ce mécanisme est bon non seulement à l’intérieur d’une même règle, mais il s’étend aussi au niveau des objectifs. Il offre la possibilité à un agent de raisonner au sujet d'un autre agent, en lui permettant de se souvenir de quels agents il est question tout au long du déroulement d'un objectif et même de plusieurs objectifs. Par
    • 86 exemple, si un référent est déterminé au cours de la vérification d'une règle d’activation qui est utilisée pour activer l'objectif, alors ce référent peut être passé à une règle de complétude, à une action de l'objectif, ou à un autre objectif, suivant le système de référents défini. Nous traiterons plus en détail du mécanisme de référence dans le chapitre suivant. La figure III.4 montre un exemple d’élément de formule de type variable qui réfère à la faim de l’agent. Le premier niveau de référence (DYNAMIC_STATES) de cet élément de formule vise les états dynamiques. Le second niveau de référence (HUNGER) cible plus précisément l’état dynamique de faim. Le dernier niveau (CURRENT_VALUE) permet d'atteindre la valeur courante de la faim définie pour cet état dynamique. Id : 2 Type : VARIABLE_LEAF Aim : SELF RefLevels : DYNAMIC_STATES, HUNGER, CURRENT_VALUE Figure III.4 : Exemple d’élément de formule de type variable Le quatrième et dernier type d’élément de formule est le nœud. Ce type d’élément de formule permet de construire des arbres d’éléments de formule constituant des équations arithmétiques. Un nœud lie simplement deux éléments de formule par un opérateur arithmétique, ce qui permet de construire classiquement une équation arithmétique sous forme d’arbre. La figure III.5 reprend les deux éléments de formule définis précédemment pour les lier par un autre élément de formule de type nœud qui permet la soustraction des deux valeurs. Si à un instant donné la faim de l’agent vaut 7, le résultat du calcul de ce nœud donnera 2.
    • 87 Id : 5 Type : NODE op : - Id : 2 Id : 1 Type : VARIABLE_LEAF Aim : SELF Type : FLOAT_LEAF RefLevels : Value : 5.0 DYNAMIC_STATES, HUNGER, CURRENT_VALUE Figure III.5 : Exemple d’élément de formule de type nœud La figure III.6 présente un exemple d’arbre d’éléments de formule qui définit une équation arithmétique. L’élément de formule 1 contient la valeur réelle 5.0. L’élément de formule 2 cible la valeur courante de la faim de l’agent qui est l’état dynamique possédant l’identifiant 1. L’élément de formule 5 est un nœud qui soustrait 5.0 de la valeur courante de la faim de l’agent. Finalement, l’élément de formule 4 est un autre nœud qui soustrait la valeur courante de la faim d’un autre agent, ciblé par l’élément de formule 3, à la valeur obtenue par le calcul de l’élément de formule 5. Les opérateurs implantés sont l’addition, la soustraction, la multiplication, la division, la valeur absolue d’une soustraction et la génération d’un nombre aléatoire. Pour ce qui est du dernier opérateur, le nombre aléatoire est généré dans un intervalle entre un minimum et un maximum qui sont respectivement les membres de gauche et de droite de l’inéquation. En utilisant des éléments de formule pour calculer l’intervalle, nous pouvons définir un nombre aléatoire entre des nombres réels précis, entre des valeurs d’états ciblés et même entre des valeurs calculées à partir d’une équation arithmétique complexe. Cet opérateur est très important puisqu’il permet d’ajouter un facteur aléatoire dans le comportement des agents. Pour l’instant, nous avons seulement ces opérateurs, mais l’introduction de nouveaux opérateurs est très simple. Ainsi, nous pourrions facilement ajouter des opérateurs de trigonométrie, de racine et de puissance d’un nombre.
    • 88 Id : 4 Type : NODE op : - Id : 3 Id : 5 T yp e : V A RIA B L E _ L E A F Type : NODE A i m : E X T E RN Re fL e ve l s : op : - DY NA M IC_ S T A T E S , HUNG E R, CURRE NT _ V A L UE Id : 2 Id : 1 T yp e : V A RIA B L E _ L E A F Aim : SELF Type : FLOA T_LE AF Re fL e ve l s : V alue : 5.0 DY NA M IC_ S T A T E S , HUNG E R, CURRE NT _ V A L UE Figure III.6 : Exemple d’arbre d’éléments de formule Avec ces éléments de formule, nous pouvons formuler une précondition qui permet de déterminer si l’agent a beaucoup plus faim qu’un autre agent en vérifiant que la valeur retournée par le calcul de l’élément de formule 4 est plus grande que 0. Nous supposons ici que 5.0 représente une différence suffisamment grande pour considérer que l’agent a beaucoup plus faim qu’un autre agent. Il est évident que cette précondition n’est pas définie d’une façon optimale. En effet, il est possible d’enlever le nœud 5, de le remplacer par l’élément de formule 2 et de comparer avec la valeur 5.0 au lieu de 0. Par contre, l’exemple visait plutôt à montrer les possibilités qu’offrent les éléments de formule avec plusieurs nœuds. Voyons un exemple plus complexe. Nous définissons le moral comme étant un état dynamique qui représente la capacité d’un agent d’affronter ou de tolérer un antagoniste. Si nous avons un agent ayant comme profil actif « suiveur », celui-ci aura, entre autres, un objectif « Avoir perçu le leader » qui est associé à une règle qui entraîne un comportement d’augmentation du moral lorsqu’il perçoit un leader de son groupe. La première précondition demande la perception d’un agent qui est un leader. Par conséquent, il n’est pas suffisant de référer à tout ce qui est relatif à l’agent, mais il faut aussi pouvoir référer à
    • 89 ce qui est relatif aux agents externes à celui pour lequel la règle est vérifiée. Comme nous l’avons décrit, les éléments de formules sont suffisamment expressifs pour le permettre. La première précondition sert donc à trouver un leader, avant de passer à la seconde précondition. Celle-ci vérifie que le leader est celui d'un groupe spécifique dont fait partie l’agent. Si cette précondition n’est pas remplie, il faut continuer là où la vérification était rendue dans les agents perçus et trouver un autre agent leader qui est le leader du groupe de l’agent. Cet exemple nous montre l’utilité du mécanisme de référence qui est nécessaire au niveau de la règle pour permettre de savoir de quel agent il est question d’une précondition à l’autre. En bref, l’exemple visait à démontrer que certaines préconditions nécessitent d’être appliquées sur des agents externes à celui pour lequel la vérification du comportement s’effectue. Pour ces cas, il faut une source d’agents telle que la perception, la mémoire, les agents environnants, ou encore, une autre précondition. III.4.6 – Récurrence Le comportement d’êtres vivants et d’objets est souvent récurrent, c’est pourquoi les objectifs doivent offrir la possibilité d’être récurrents. Ce type de comportement revient souvent sous certaines conditions favorables ou suivant une certaine fréquence. Un objectif récurrent repasse à inactif lorsqu’il est atteint. Ainsi, lorsque les conditions nécessaires à l’activation du comportement sont présentes, l’agent peut de nouveau utiliser cet objectif. De plus, il est possible d’associer une fréquence à l’objectif pour empêcher qu'il repasse à inactif immédiatement après sa complétion. Lorsque la récurrence se fait pour un objectif composé, tous les sous-objectifs repassent aussi à inactif.
    • 90 III.5 – Motivation du comportement d'un agent Le module comportemental vise entre autres à motiver les comportements des agents. Chaque objectif a une priorité et l'agent sélectionne l’objectif prioritaire parmi tous les objectifs qu’il peut entreprendre à un instant donné. Plusieurs facteurs motivent la priorité d’un objectif, motivant par le fait même l’agent à adopter le comportement. La notion de besoin est alors essentielle pour définir la motivation du comportement d’un agent vivant [JAGER 00]. En effet, les besoins que nous ressentons en tant qu’humains font partie des facteurs qui motivent nos priorités. C’est pourquoi nous lions les objectifs d’un agent à ses besoins. De plus, l’intensité d’un besoin peut changer son importance par rapport aux autres besoins [MASLOW 54]. Un autre facteur important dans la détermination du comportement est l’ensemble des opportunités qui se présentent à un agent. Celles-ci doivent aussi jouer un rôle sur les décisions d’un agent. Finalement, le temps est un autre facteur qui influence souvent le comportement. Les sous-sections suivantes traitent de ces différents facteurs. III.5.1 – Besoins et Priorité des objectifs En premier lieu, la priorité de base d’un objectif est déterminée par le besoin qui lui est associé. Étant donné que l’importance d’un besoin peut être différente d’une personne à l’autre, chaque profil définit la priorité de base des besoins de l’agent. Ainsi, chaque agent choisira ses objectifs différemment selon ses intérêts et les rôles qu’il joue pendant la simulation. Il est même possible que la priorité de base des besoins d’un agent donné change lorsque le profil actif change. Ceci reflète bien la réalité. En effet, si par exemple nous prenons le besoin de manger versus le besoin d’étudier. Un étudiant qui étudie à la maison laissera le travail de côté plus facilement pour aller manger, qu’un étudiant qui est en classe. Bref, chaque besoin est lié à une priorité de base dépendamment du profil. De plus, nous avons un besoin spécial, que nous nommons « obligation », qui oblige l'exécution de l'objectif associé à ce besoin, dès qu'il devient actif. Un tel objectif est exécuté en même temps que ceux qui passent par le processus normal de sélection.
    • 91 Pour le comportement humain, la pyramide de Maslow [MASLOW 54] est un exemple de hiérarchisation des besoins qui permet de déterminer l’importance d’un besoin par rapport aux autres. En effet, il est possible de définir pour chaque besoin une priorité de base par rapport au niveau que ce besoin occupe dans la pyramide. Suivant cela, nous associons un besoin à chaque objectif pour définir la priorité de base de l’objectif. Par contre, la pyramide de Maslow traite surtout des besoins qui viennent d'un manque ressenti et elle laisse de côté les besoins qui sont rattachés à des motivations d’abondance comme il est mentionné dans [ROWAN 99]. Le meilleur exemple pour aider à comprendre ce concept est celui du besoin de manger. Parfois, nous mangeons parce que nous avons faim, c’est une motivation de manque. Mais, dans d’autres circonstances, nous pouvons manger par simple gourmandise, ce qui constitue une motivation d’abondance. Avec ces deux types de motivation, de manque et d’abondance, nous pouvons couvrir un grand nombre de besoins. D’autres modèles tels que celui de [MAX-NEEF 92] pourraient aussi être utilisés pour hiérarchiser les besoins d’un agent. III.5.2 – Influence de l’intensité d’un besoin sur la priorité Chez un agent, ses motivations sont représentées principalement par des états dynamiques qui évoluent en fonction du temps. Nous posons des préconditions sur ces états afin d’activer les objectifs lorsqu’un besoin se fait sentir. De plus, selon le seuil franchi par la valeur courante de l’état dynamique, nous pouvons donner plus ou moins d’importance à un objectif. L’intervalle entre les différents seuils définit donc l’intensité de la motivation à combler un besoin. Prenons de nouveau l’exemple de la faim pour clarifier la situation. Nous pouvons déterminer l’intensité du besoin de se nourrir par un état dynamique qui représente la faim d’un agent et qui augmente avec le temps. À 0, l’agent n’a pas faim du tout et plus la valeur courante de l’état augmente, plus l’agent a faim. Lorsqu’elle franchit le seuil de 3, l’agent commence à avoir suffisamment faim pour activer l’objectif qui sert à combler ce besoin. Puis lorsque le seuil de 5 est atteint, l’objectif prend un peu plus d’importance, car sa priorité est augmentée d’un facteur modificateur. Ensuite, si l’agent
    • 92 n’a pas encore satisfait sa faim alors que la valeur courante a franchi le seuil de 8, un autre modificateur sera appliqué. Nous obtenons ainsi différentes priorités selon l’intensité du besoin de se nourrir de l’agent. Le tableau III.2 résume cet exemple, lorsque la priorité de base est de 60. Tableau III.2 : Exemple de l’influence de l’intensité d’un besoin sur la priorité Objectif : Avoir satisfait sa faim Intervalle de la faim [0, 3[ [3, 5[ [5, 8[ [8, 10] Modificateur de priorité - 0 5 15 Priorité totale - 60 65 75 III.5.3 – Influence des opportunités sur la priorité Les opportunités qui se présentent influencent souvent l’importance de nos besoins. En effet, elles nous poussent fréquemment à un comportement qui est différent de celui que nous aurions adopté sans la présence de ces opportunités. L’achat de produits à rabais par un consommateur qui n’en a pas vraiment besoin est un bon exemple de l’influence de la perception d’une opportunité sur le comportement. Pour représenter ce phénomène dans notre système, nous pouvons définir une règle avec une précondition qui porte sur la perception d’une opportunité. Lorsqu’une règle comprenant l’opportunité s’applique, la priorité est augmentée d’un modificateur qui permet de donner plus d’importance à l’objectif. Ce modificateur de priorité est défini dans la règle. Le tableau III.3 ci-dessus montre l’effet de la perception d’une opportunité sur l’exemple précédent. Tableau III.3 : Exemple de l’influence de la perception d’une opportunité sur la priorité Objectif : Avoir satisfait sa faim Faim [0, 3[ [3, 5[ [5, 8[ [8, 10] Perception d’un restaurant Non Oui Non Oui Non Oui Non Oui Modificateur d'intensité - - 0 0 5 5 15 15 Modificateur d'opportunité - - 0 15 0 15 0 15 Priorité totale - - 60 75 65 80 75 90
    • 93 III.5.4 – Influence du temps sur la priorité La priorité de nos besoins peut aussi changer selon le temps. Notre système permet donc de poser des contraintes temporelles sur les objectifs d’un agent. En bref, cette méthode permet de définir des contraintes temporelles sur la sélection, la durée et la complétude d’un objectif. Pour la sélection et la complétude, il est possible de définir le temps minimum, le temps désiré et le temps maximum. Ces contraintes nous permettent de définir l’évolution de la priorité de base d’un objectif en fonction du temps. Un facteur modificateur de priorité est donc défini pour chaque contrainte temporelle définie, afin de permettre l’évolution de la priorité en interpolant l’augmentation de priorité entre les différentes contraintes. Par exemple, nous pouvons augmenter graduellement la priorité d’un objectif lorsqu’il doit être sélectionné ou complété avant un certain temps, simulant ainsi l’urgence d’entreprendre ou de compléter l’objectif et permettant une forme de planification au plus tôt et au plus tard. Le temps minimum de sélection correspond au temps minimum auquel un objectif peut devenir actif. Le temps minimum de complétude correspond au temps minimum auquel un objectif peut devenir atteint et non-atteint. Le temps maximum de sélection correspond au temps limite pour la sélection d’un objectif ou, plus précisément, au temps maximum auquel l’agent peut entreprendre cet objectif lorsqu'il est actif. Si l’objectif n’est pas entrepris avant ce temps, il tombera dans l’état non-atteint. Le temps maximum de complétude correspond au temps limite d’accomplissement d’un objectif. Si l’objectif n’est pas atteint avant ce temps, il tombera dans l’état non-atteint. Les temps désirés représentent les temps auxquels l’agent voudrait débuter et accomplir l’objectif, après ces temps, il devient plus urgent de débuter ou d’accomplir l’objectif.
    • 94 III.6 – Conclusion En somme, nous avons cinq types d’agents qui possèdent des comportements variant selon les rôles qu’ils jouent dans la simulation. Les profils renferment l’ensemble des rôles, ou arbres d’objectifs, que l’agent pourra possiblement entreprendre tout au long de la simulation. Les objectifs suivent un cycle de vie au cours duquel les transitions d’état sont déterminées par l’application de règles et par la sélection du comportement adopté. Ainsi, lorsqu’une règle d’activation d’un objectif s’applique, les actions de la règle sont exécutées, l’objectif devient actif et, par le fait même, si l’objectif est élémentaire, il devient candidat à la sélection. Quand un objectif élémentaire est sélectionné, il devient en cours et les actions de l’objectif sont exécutées par l’agent. Les actions permettent de modifier l’état d’un agent et de son environnement de façon à amener l’agent dans une situation qui est idéalement favorable à l’accomplissement de l’objectif, c’est-à-dire, dans une situation qui permet l’application d’une règle de complétude. Les règles sont composées de préconditions qui portent sur les états d’un agent, de ses objectifs et de son environnement. Une précondition pose une inéquation sur deux éléments de formule qui ciblent ou contiennent les valeurs désirées. Afin de motiver le comportement des agents, chaque objectif possède une priorité de base, variant d’un profil à l’autre, déterminée par le besoin rattaché à l’objectif et qui augmente en tenant compte des différents facteurs d’influence. La priorité permet de déterminer l’objectif le plus important à un instant donné pour un agent. Les décisions d’un agent ne sont donc pas dictées par un script, car un agent choisit son objectif prioritaire, qui est en fait le comportement le plus important pour lui à cet instant. Pour y arriver, nous associons chaque besoin à une priorité de base et chaque objectif à un besoin. Nous pouvons ainsi déterminer l’importance relative d’un objectif par rapport aux autres selon le besoin qui lui est rattaché. Le profil d’un agent, l’intensité du besoin, les opportunités qui se présentent à l’agent, ainsi que le temps qui passe sont les différents facteurs qui peuvent influencer la priorité de base d’un objectif et, par le fait même, le comportement d’un agent. [Andriamasinoro 02] indique qu’il est important qu’un agent adopte des comportements
    • 95 orientés vers la satisfaction de ses besoins. De plus, il explique qu’il est nécessaire de définir un processus de contrôle répétitif qui va déterminer en permanence le prochain besoin considéré comme le plus important. Dans notre système, les objectifs sont liés aux besoins d’un agent et nous retrouvons le processus de contrôle répétitif au niveau du modificateur de priorité lié à l’intensité qui est constamment mis à jour en fonction du besoin qui est représenté un l’état dynamique. L’évolution de l’état dynamique permet le contrôle répétitif et la mise à jour de la priorité selon la valeur courante de l’état dynamique détermine l’importance du besoin par rapport aux autres. La récurrence des objectifs permet aussi de satisfaire un besoin chaque fois qu’il se fait important.
    • Chapitre IV Le fonctionnement du module comportemental de MAGS
    • 97 IV.1 – Modules de MAGS MAGS comprend plusieurs modules que nous pouvons voir dans le diagramme de la figure IV.1. Nous avons un premier module, « Interface » qui contient les classes de l’application, son rôle est de gérer l’application en tant que telle. Le module « Initialisation » sert à initialiser l’application de façon à charger toutes les données nécessaires à la simulation. C’est ce module qui charge l’environnement, les agents, leurs comportements… Le « Display Module » permet l’affichage, en 2D ou en 3D, de l’environnement, des agents, des systèmes de particules, etc. Le « Processes Module » permet de gérer la mise à jour du système, c’est-à-dire, l’avancement des agents, la progression des systèmes de particules, la vérification et l’exécution des comportements, suivit de l’affichage suivant les données mises à jour. Le « Particule Module » permet d’avoir plusieurs systèmes de particules dans l’environnement de la simulation. Différents types de systèmes permettent de simuler la fumée et le feu. Le « Environment Module » contient toutes les données relatives à l’environnement de la simulation. Nous y retrouvons la carte de la zone simulée, la position des agents, des systèmes de particules, etc. Initialisation Display Module Interface Behaviour Module Processes Module Environment Module Agents Module States Module Particule Module Figure IV.1 : Modules de MAGS
    • 98 Les trois derniers modules, « Agents Module », « States Module » et « Behaviour Module », sont ceux qui nous intéressent dans ce mémoire. Nous avons déjà commencé notre exploration de ces modules dans le chapitre précédent. Nous avons vu les différents types d’agents, leurs états et les différents concepts du module comportemental qui permettent aux agents de raisonner. Ce chapitre vise à expliquer en détail les différents concepts introduits au chapitre précédent. Tous ces concepts sont modélisés par un ensemble de classes contenant les attributs et les méthodes nécessaires pour que le modèle défini fonctionne. Chaque agent de la simulation est représenté par une instance de la classe d'agent qui est lié à un ensemble de classes représentant ses états. En fait, ce lien entre un agent et ses états représente l’interface entre le module des agents et le module des états. L'agent est aussi lié à des profils qui contiennent ses rôles. Ce lien entre l’agent et ses profils défini l’interface entre le module des agents et le module comportemental. Vérification du comportement (Mise à jour des arbres d'objectifs) Sélection du comportement à adopter (Suivant la priorité des objectifs) Exécution du comportement (Exécution de l'objectif prioritaire et des objectifs obligatoires) Figure IV.2 : Vision globale des algorithmes du module comportemental Le module comportemental comprend trois algorithmes principaux dont l'enchaînement est présenté dans la figure IV.2. Le premier algorithme est celui de la vérification du comportement. Cet algorithme vérifie les rôles d'un agent afin de pouvoir déterminer quels comportements l'agent peut adopter et quels objectifs sont complétés. Son rôle est donc de mettre à jour les arbres d'objectifs selon la situation courante, c'est-à-dire l'état de l'agent et de son environnement. Lorsque cette mise à jour est effectuée, les objectifs qui peuvent être sélectionnés sont connus. L'algorithme de vérification fait donc
    • 99 une partie du travail de l'algorithme de sélection. En effet, les objectifs sélectionnables se retrouvent dans un monceau dont le contenu est déterminé tout au long de la vérification du comportement. Le rôle de l'algorithme de sélection se réduit ainsi à rétablir le monceau et à choisir le profil prioritaire, c'est-à-dire celui dont l'objectif à la tête du monceau possède la priorité la plus forte. Après la sélection, il ne reste plus qu'à exécuter l'objectif sélectionné. Le rôle de l'algorithme d'exécution se résume à exécuter les actions de l'objectif prioritaire, ainsi que ceux des objectifs obligatoires. D'autres algorithmes et mécanismes sont aussi nécessaires au bon fonctionnement du système. Le mécanisme de référence est particulièrement important. C'est grâce à ce mécanisme qu'un agent peut raisonner sur les autres agents de la simulation. Son rôle est de fixer les référents suivant une table de références. Ce mécanisme est présent dans les algorithmes de vérification et d'exécution des objectifs et des règles. L'algorithme d'évolution de la priorité en fonction des contraintes temporelles joue aussi un rôle important. Celui-ci permet à la priorité d'un objectif de varier dans le temps selon les contraintes qui sont définies. Ainsi, si par exemple un objectif doit être entrepris avant un certain temps, il prendra de plus en plus d'importance à mesure que le temps limite approche. Les principaux diagrammes de classes et algorithmes sont revus en détail dans ce chapitre. Dans un premier temps, nous présentons une vue d’ensemble de MAGS en expliquant brièvement le rôle des différents modules du système. Ensuite, nous continuons avec les quatre modules qui sont en rapport direct avec la partie comportement. Ces quatre modules sont le module d’agents, le module des états, le module comportemental et le module des objectifs. Puisque le découpage en modules rend les interfaces entre ceux-ci moins évidentes, nous présentons d’abord un diagramme de classes montrant les liens entre les classes des modules. Suivant cette clarification, nous présentons le module d’agents, suivi du module des états en explicitant leurs classes en termes des attributs et des méthodes importantes. Avant d’aborder le module comportemental, nous présentons le mécanisme de fixage des référents, car ce dernier est utilisé dans les algorithmes de ce module. Après avoir expliqué les classes du module comportemental, nous traitons de son
    • 100 sous-module des objectifs. En plus des objectifs et des référents, ce module comprend d’autres classes permettant le calcul de priorité et le traitement du temps. Nous voyons donc les calculs et l’algorithme implantant ces fonctionnalités. Après avoir vu ces classes, nous serons en mesure de comprendre les principaux algorithmes du module comportemental. Plus précisément, nous expliquerons les algorithmes de vérification, de sélection et d’exécution du comportement.
    • 101 IV.2 – Interface entre les modules La figure IV.3 illustre le lien entre le module d’agent, le module des états, le module comportemental et le module des objectifs. Nous voyons d'abord que chaque agent (TAgent) possède un ensemble d'états m_States de type TStates, ainsi qu'un ensemble de profils m_PossibleProfiles et m_BasicProfile de type TProfile. Le profil actif, parmi les profils possibles, est celui qui est à l’index m_ActiveProfile de la liste. Le diagramme montre aussi que ce sont les profils qui permettent à un agent d'avoir des objectifs, chaque profil pointant sur des arbres d’objectifs, m_AllRoles, ainsi que sur tous les objectifs de ces arbres, m_AllObjectives. -profiles have objective TProfile -objectives have rules TObjective -m_AllObjectives : TObjective -m_ActivationRules : TRule -m_AllRoles : TObjective * -objectives of profile -m_ResumingRules : TRule * -m_CompletionRules : TRule * -rules of objectives 1 * -profiles of agents -rules have preconditions TRule -m_Actions : TAction * TElementaryObjective * -elementary objectives have actions -m_Action : TAction -rules have actions * * -actions of elementary objectives * -preconditions of rules TAction -m_AgentParameters : TAgent -actions of the rules TPreCondition +Execute(in Sender : TAgent) * -m_FirstMember : TFormulaElement +Execute(in Sender : TAgent, in Targets : TAgent) -m_SecondMember : TFormulaElement * «call» -preconditions have a 1st member 1 -an agent has profiles * -preconditions have a 2nd member 1 -1st member of inequation 1 -2nd member of inequation TAgent -m_ActiveProfile : int «call» TFormulaElement -m_PossibleProfiles : TProfile -m_BasicProfile : TProfile -m_States : TStates +ComputeFormula(in Self : TAgent, in TargetAgent : TAgent) : float +SeekFloatValue(in ReferenceLevel1 : int, in ReferenceLevel2 : int, in ReferenceLevel3 : int) : float +ComputeFormulaString(in Self : TAgent, in TargetAgent : TAgent) : String +SeekStringValue(in ReferenceLevel1 : int, in ReferenceLevel2 : int, in ReferenceLevel3 : int) : String +ModifyValue(in Sender : TAgent, in ModifyAction : TAction) : bool 1 -set of states of agents 1 -an agent has a set of states TStates +SeekFloatStateValue(in ReferenceLevel1 : int, in ReferenceLevel2 : int, in ReferenceLevel3 : int) : float Figure IV.3 : Diagramme de classes montrant l’interface entre les modules Au niveau des objectifs, la sous-classe TElementaryObjective contient une liste d’actions m_Actions, tout comme les règles qui sont associées aux objectifs dans les listes
    • 102 m_ActivationRules, m_ResumingRules et m_CompletionRules. L’exécution d’une règle entraîne parfois un appel de fonction au niveau de l’agent par l’utilisation de pointeurs sur les agents cibles (Targets de la méthode Execute ou m_AgentsParameters) ou sur l’agent qui exécute l’action (Sender). Ceci permet donc des modifications sur les agents par l’exécution d’actions. En cours de vérification du comportement, l’algorithme de vérification présenté à la section IV.8 descend jusqu’au niveau des éléments de formule qui appelle souvent les fonctions de recherche d’une valeur (SeekFloatValue et SeekStringValue) au niveau de l’agent, qui est soit l’agent pour lequel le comportement est vérifié (Self des méthodes ComputeFormula et ComputeFormulaString) ou l’agent ciblé, un référent passé en paramètre à ces méthodes (TargetAgent). Cette interface permet de retourner au niveau de l’agent pour vérifier ses états et le statut de ses objectifs. IV.2.1 – Conventions des diagrammes de classes Afin que le lecteur soit en mesure de mieux comprendre les diagrammes de classes, les conventions suivantes sont définies. Lorsqu’une variable d’une classe est au pluriel, celle-ci contient une liste d’objets ou de pointeurs sur des objets du type affiché. La variable m_States fait exception à la règle le nom de la classe étant déjà au pluriel. Le type de lien indique si c’est l’objet ou un pointeur sur l’objet que nous retrouvons dans la variable. L’agrégation signifie que la classe contient les objets, alors que le lien binaire signifie que des pointeurs sont utilisés. Bien que les profils soient pointés par les agents, lorsqu’un agent est associé à un profil, le profil est copié dans une nouvelle instance de façon à garder l’intégrité des données du profil qui sont spécifiques à l’agent. De même pour les états, chaque agent nécessitant son propre ensemble d’états. Un lien « utilise » désigne l’utilisation d’une structure spécifique comme attribut de la classe ou de la structure utilisatrice. Un nom de classe en italique signifie que la classe est abstraite, dans la figure IV.3, la classe TAgent est abstraite.
    • 103 IV.3 – Module d’agents Le module d’agent est présenté dans la figure IV.4. Nous y retrouvons la classe TAgent qui était présente dans le diagramme précédent sous forme abrégée. C’est une classe abstraite d'agent de laquelle dérivent les classes TMobileAgent, TObjectAgent, TClusterAgent, TGroupAgent et TScenarioAgent. Chaque type d'agent du système est donc représenté par une sous-classe de TAgent, permettant de définir des méthodes et des attributs spéciaux qui dépendent du type. Tous les agents sont contenus dans un objet unique de type TAgents. Les agents mobiles ont la possibilité de faire partie de clusters (m_pClusters) lorsqu’ils se regroupent spatialement. Par conséquent, les clusters contiennent des membres (m_Members) qui sont des agents de type TMobileAgent. Nous voyons que les agents groupes sont plus génériques, car leurs membres (m_Members) sont de type TAgent. Les membres sont aussi liés aux groupes dont ils font partie (m_Groups). Pour ce qui est des méthodes de la classe TAgent, certaines sont très importantes, car elles reviennent à plusieurs niveaux dans le module comportemental et le module des états. La méthode SeekFloatValue est une de celles-ci qui permet d'obtenir une valeur d'un état ciblé ou d'un objectif donné de l'agent. Cette méthode est utilisée par les éléments de formule qui contiennent les niveaux de référence qui sont passés en paramètres à la fonction. C’est au niveau de l’agent que le premier niveau de référence est utilisé pour déterminer si c’est la méthode SeekFloatValue de TProfile ou de TStates qui doit être utilisée pour retrouver la valeur recherchée. Cette méthode peut être vue comme étant les portes vers les deux autres modules et le premier niveau de référence comme la clé qui permet d’ouvrir une de ces portes. ModifyValue est la méthode inverse qui permet de fixer ces valeurs plutôt que de les obtenir. Dans ce cas, les niveaux de référence qui permettent d’atteindre la valeur à modifier sont contenus dans les paramètres de l'action. L’action est passée en paramètre à la
    • 104 fonction ModifyValue et cette méthode agit de la même façon que la méthode SeekFloatValue pour retrouver la valeur en question. Ainsi, la méthode ModifyValue se retrouve elle aussi dans la classe TProfile et TStates de façon à se rendre à la valeur qu'il faut obtenir ou modifier. L’action contient toutes autres données permettant de modifier la valeur de la manière désirée, une fois rendue à destination, c’est-à-dire au niveau de la valeur. Ce sont donc les actions, que nous étudierons à la section IV.6.3, qui modifient les différents états de l'agent. Behaviour Module::TProfile States Module::TStates Environment Module::TEnvironment TAgent -m_Id : int TAgents -m_IsSelected : bool -m_AgentType : int -m_Scenario : TScenarioAgent -m_ActiveProfile : int -m_Agents : TAgent -contains agents -m_PossibleProfiles : TProfile TMobileAgent -m_Clusters : TClusterAgent -m_BasicProfile : TProfile -m_pClusters -m_Groups : TGroupAgent -m_States : TStates -m_NextId : int +MoveOneStep() 1 -m_pLastExecutedAction : String -m_DisplayableAgents : TAgent +SetCluster(in Cluster : TClusterAgent) -m_PrioritaryProfile : bool +UpdatePerception() +GetSize() -agents of the system -m_CurrentProfile : bool +GetAgent(in Index : int, in AgentType : int) -m_ObjectivePriorityMax : int -m_PrioritaryObjective : int * -members of clusters * -m_UpdateFrequency : int -m_Groups : TGroupAgent +SeekFloatValue(in ReferenceLevel1 : int, in ReferenceLevel2 : int, in ReferenceLevel3 : int) : float +SeekStringValue(in ReferenceLevel1 : int, in ReferenceLevel2 : int, in ReferenceLevel3 : int) : String * -clusters of agents +ModifyValue(in Sender : TAgent, in ModifyAction : TAction) : bool +CheckBehaviour() TClusterAgent +ExecuteBehaviour() +GetId() : int -m_Members : TMobileAgent +GetAgentType() : int -m_IsSorted : bool +GetStates() : TStates -m_MemberMaxDistance : double TScenarioAgent -m_NbMembers : int +IsSelected() : bool +Select() -m_pLeader : TMobileAgent +UnSelect() +AddMember(in NewAgentMember : TMobileAgent) +AddProfile(in Profile : TProfile) : bool +AddMembers(in Members : TMobileAgent) +SetBasicProfile(in Profile : TProfile) +IsMember(in IdAgent : int) +SetActiveProfile(in IdProfile : int) : bool +RemoveMember(in Agent : TAgent) +GetActiveProfile() : TProfile +UpdateMembers() +GetBasicProfile() : TProfile +GetLastExecutedAction() : String +SetLastExecutedAction(in ActionName : String) +GetCurrentProfileName() : String +GetCurrentProfile() : TProfile +SelectPrioritaryProfile() +SelectPrioritaryObjective() +AddSelectableObjective(in SelectableObjective : TObjective) TGroupAgent +RemoveUnselectableObjective(in Objective : TObjective) -m_Members : TAgent +AddMessage(in Message : TMessage) -m_AgentType : int +AddSentMessage(in Message : TMessage) -m_GroupName : String +UpdateMessages() +AddMember(in IdAgent : int, in AgentType : int) +GetRightProfile(in IdObjective) : TProfile +IsMember(in IdAgent : int) +GetActiveProfileId() : int +RemoveMember(in index : int) +Update() +AddGroupMembership(in NewGroup : TGroupAgent) : bool +GetGroups() : TGroupAgent * -groups of agents +IsMemberOfGroup(in IdGroup : int) : bool +RemGroupMembership(in Group : TGroupAgent) : bool -members of groups * Figure IV.4 : Diagramme de classes du module d'agents La méthode CheckBehaviour permet de vérifier le comportement, c'est-à-dire, mettre à jour les objectifs de l'agent dans leur cycle de vie et mettre à jour leur priorité courante. Après cette opération, la méthode ExecuteBehaviour exécute le profil actif et le profil de base de l’agent. L'objectif prioritaire (m_PrioritaryObjective), possédant la priorité
    • 105 la plus élevée (m_ObjectivePriorityMax), du profil prioritaire (m_PrioritaryProfile), est alors exécuté. Le profil prioritaire est évidemment le profil ayant l'objectif de plus forte priorité entre le profil de base et le profil actif.
    • 106 IV.4 – Module des états La classe TStates comprend l'ensemble des états d'un agent. La figure IV.5 montre ces états qui sont liés à la classe centrale TStates. Nous y retrouvons l'état de possession (m_PossessionState), d'occupation (m_OccupantsState), de mémoire et de perception (m_MemoryState), de communication (m_CommunicationState), de position (m_LocationState), de navigation (m_NavigationState), ainsi qu'une liste d'états dynamiques (m_DynamicStates) et une liste d'états statiques (m_StaticStates). TDynamicState -m_CurrentValue : float -m_InitValue : float -m_MaximumValue : float -m_Name : String -m_PerceivedValue : float -m_Type : String -m_VariationCoef : float * -m_Threshold1 : float -m_Threshold2 : float -m_Threshold3 : float +UpdateCurrentValue() +GetName() : String TPossessionState +GetType() : String +ModifyValue(in Sender : TAgent, in ModifyAction : TAction) : bool -ObjectsOwned : TList -m_WalletMoney : float TOccupantsState +Add() : int TNavigationState -m_OccupantsAgents : TAgent +Delete() : bool -m_ContainerAgent : TAgent -m_ActualDirection : double +GetWalletMoney() : float -m_ActualSpeedf : float +Add() : int +InitWalletMoney(in WalletMoney : float) -m_DeplCumulOscill : int +Delete() : bool +ReceiveMoney(in MoneyReceived : float) -m_DesiredSpeed : float +ModifyValue(in Sender : TAgent, in ModifyAction : TAction) : bool +Pay(in Cost : float) : bool -m_FAianeDest : TPoint +ModifyValue(in Sender : TAgent, in ModifyAction : TAction) : bool -m_IsFAianeDest : bool 1 -m_IsInAlert : bool 1 -m_IsInRoad : bool 1 -m_LastMoveTime 1 -m_NavigationMode : char -m_PixelsFromLastRoad : char TStates -m_ReachPos : TPoint -m_SeuilMaxOscill : int -m_DynamicStates : TDynamicState -m_Shift : double -m_StaticStates : TStaticState -m_Stone : TPoint -m_NavigationState : TNavigationState -m_TargetAgent : TAgent -m_CommunicationState : TCommunicationState -m_TargetDirection : double -m_PossessionState : TPossessionState MemoryModule -m_TargetTheme : String -m_OccupantsState : TOccupantsState -m_LocationState : TLocationState +Avoid(in Agent : TBasicAgent) 1 -m_MemoryState : TMemoryState +ChangeDesiredSpeed(in ChangePercent : float) +Follow(in Theme : String) +SeekFloatStateValue(in ReferenceLevel1 : int, in ReferenceLevel2 : int, in ReferenceLevel3 : int) : float +Follow(in Agent : TBasicAgent) +UpdateDynamicStates() 1 +Goto(in X : int, in Y : int) +GetCommunicationState() : TCommunicationState +Walk() +GetLocationState() : TLocationState +Stop() +GetPossessionState() : TPossessionState +MoveOneStep() +GetMemoryState() : TMemoryState 1 +MoveOneStepCluster() +GetOccupantsState() : TOccupantsState +ModifyValue(in Sender : TAgent, in ModifyAction : TAction) : bool +GetNavigationState() : TNavigationState +GetStaticState(in Id : int) : TStaticState +GetDynamicStates(in Id : int) : TDynamicState +CreateCommunicationState() TLocationState Agents Module::TAgent +CreateNavigationState(in Owner : TBasicAgent) -m_Position : TPoint +CreateOccupantsState() 1 -m_XPosition : float +CreateMemoryState(in Owner : TBasicAgent) -m_YPosition : float TMessage +CreatePossessionState() -m_XDim : int -Id : int +CreateStaticState(in Name : String, in Id : int) -m_YDim : int -Message : int +CreateDynamicState(in Name : String, in Id : int) -m_Height : int +Sender : TAgent +CreateLocationState(in Owner : TBasicAgent) 1 -m_Owner : TAgent -ReceptionCode : int +Move(in Direction : int, in Pixels : float) -LifeTime : int * +GetNbAgentsAround(in Radius : int, in PreConditionToCount : TPreCondition) : int 1 1 -Target : TAgent +GetAgentsAround(in Radius : int, in PreConditionToCount : TPreCondition) : TAgent +GetNbAgentsAround(in Radius : int, in StateDef : int) : int 1 1 +GetAgentsAround(in Radius : int) : TAgent +GetHeight() : int +GetXDim() : int TCommunicationState * +GetYDim() : int -m_MessageList : TMessage +GetPosition() : <unspecified> -m_MessagesSent : TMessage TStaticState +GetFloatPosX() : float +GetFloatPosY() : float +AddMessage(in Message : TMessage) : bool -m_Name : String +SetHeight(in Height : int) +AddSentMessage(in Message : TMessage) : bool -m_Type : int +SetXDim(in XDim : int) +IsMessageInList(in Message : int) : bool -m_Bool : bool +SetYDim(in YDim : int) +IsMessageInList(in Message : int, in Sender : TAgent) : bool +SetBool(in Bool : bool) +SetPosition(in X : float, in Y : float) +GetMessage(in Message : int) : TMessage +GetBool() : bool +InitPosition(in X : int, in Y : int) +GetMessage(in Message : int, in Sender : TAgent) : TMessage +ModifyValue(in Sender : TAgent, in ModifyAction : TAction) : bool +RemovePosition(in X : int, in Y : int) +UpdateMessages() +ModifyValue(in Sender : TAgent, in ModifyAction : TAction) : bool +ModifyValue(in Sender : TAgent, in ModifyAction : TAccessState) : bool Figure IV.5 : Diagramme de classes du module des états
    • 107 Comme nous l’avons mentionné à la section précédente, la méthode SeekFloatValue est aussi dans la classe TStates. Elle est appelée après avoir été appelé au niveau de l'agent, lorsque le premier niveau de référence cible un état de l'agent. À ce niveau, les deux autres niveaux de référence sont utilisés pour retrouver le bon état et, finalement, la valeur ciblée dans cet état. La méthode ModifyValue se retrouve dans chacun des états, étant donné que les états gèrent eux-mêmes les modifications. Voici une brève description de chacun des états. La classe TPossessionState comprend les possessions de l'agent. Nous y retrouvons, pour l’instant, l'argent qu'un agent transporte dans son portefeuille (m_WalletMoney). Si nous avons besoin de définir un comportement qui dépend de la quantité d'argent que possède l'agent, nous pouvons le faire grâce à un élément de formule qui réfère à une variable de cet état. De même, les effets d'une action sur les possessions de l'agent sont gérés par cet état. Ainsi, lorsque l'agent paye un produit, cela entraîne une diminution de l’argent de l'agent. La classe TOccupationState permet de représenter les occupants (m_OccupantsAgents) d'un agent (m_ContainerAgent), c'est-à-dire les agents qui se trouvent dans un autre agent. Par exemple, si nous voulons savoir si une salle n’est pas pleine, deux éléments de formule serviront à aller chercher le nombre d'occupants courant et le nombre d'occupants maximum. Ayant obtenu c'est deux valeurs, une précondition permettra de vérifier si la première valeur est plus petite que la seconde. Une réponse négative de la vérification de cette précondition indique évidemment que la salle est pleine. Ainsi, si un agent désire entrer dans la salle, il le pourra seulement si elle n’est pas déjà pleine, auquel cas il sera ajouté à la liste des occupants et le nombre d'occupants sera incrémenté. Le module de mémoire représente la perception et la mémoire d'un agent. Les filtres en place permettent de conserver en mémoire les agents perçus qui possèdent certaines caractéristiques [Perron 2003]. Par exemple, si un agent a faim, le module comportemental
    • 108 ajoute un filtre qui permet à l'agent de se souvenir des restaurants perçus. Ainsi, lors de la vérification des objectifs servant à satisfaire la faim d’un agent, la mémoire sert de source de référents fournissant différents choix de restaurants à l’agent. Plus de détails sur cette partie se trouvent à la section IV.5. La classe TCommunicationState contient les différents messages qu'un agent a reçus et envoyés. Un message est composé d’un identifiant (Id), du message en tant que tel (Message), d’un pointeur vers celui qui a transmis le message (Sender), d’un code de réception permettant de savoir le type de transmission (ReceptionCode), d’une durée de vie (LifeTime) et d’un pointeur vers l’agent dont il est question dans le message (Target). Comme le montre le diagramme, le message est un simple entier qui est un code utilisé pour reconnaître ce dernier. Le code de réception permet de savoir si le message a été envoyé à un groupe, à un agent en particulier, ou à tous les agents dans un certain rayon. L’agent dont il est question dans le message n’est pas le destinataire. Ce pointeur peut être utilisé comme source de référent. Par exemple, si un agent demande à un agent d’en suivre un autre, celui-ci sera en mesure de savoir de quel agent il est question. La classe TLocationState concerne le positionnement de l'agent dans son environnement. Nous y retrouvons la position de l'agent (m_Position) ainsi que sa dimension (m_Xdim, m_Ydim, m_Height). Grâce à cet état, il est possible d'accéder à la carte de l'environnement qui comprend des pointeurs sur les agents positionnés dans l'environnement géographique virtuel. Cet état nous permet entre autres de vérifier si un agent se trouve près d'un autre agent (GetAgentsAround) ou de vérifier si un ou plusieurs agents possédant une certaine caractéristique se trouve près de l'agent (GetNbAgentsAround). La classe TNavigationState s'occupe de la gestion des déplacements de l'agent au bas niveau. Il ne s'agit pas de prendre des décisions sur la destination d'un agent, car c'est le module comportemental qui s'occupe du haut niveau. Cet état s'occupe plutôt d'éviter les collisions et de contourner les obstacles afin que l'agent soit en mesure de se rendre d'un point à l'autre. Plusieurs modes de navigation sont possibles. L’agent peut, par exemple,
    • 109 marcher sans but précis ou vers une destination donnée, suivre un autre agent ou fuir un agent. La classe TDynamicState représente des variables qui évoluent dynamiquement. Un état dynamique comprend une valeur courante (m_CurrentValue) qui est constamment mise à jour suivant le coefficient de variation (m_VariationCoef) à chaque cycle du simulateur. Les seuils (m_Threshold1, m_Threshold2 et m_Threshold3) sont aussi définis à l'intérieur même de l'état. Pour en revenir aux niveaux de référence des éléments de formule, nous avons besoin ici de deux niveaux supplémentaires pour atteindre une valeur de ce type d’état. Le premier ciblait les états dynamiques en général. Le second niveau de référence cible un état dynamique par son identifiant, parmi tous les états dynamiques de l’agent. Puis, le troisième niveau de référence cible l’attribut désiré, par exemple, la valeur courante. La classe TStaticState est prévue pour ajouter différents types d’états à l’agent. Pour l’instant, nous avons défini la possibilité de contenir une valeur booléenne (m_Bool). Mais, plusieurs autres types de donnés (m_Type) pourraient être ajoutés. Par exemple, un état statique pourrait contenir le sexe ou l’âge d’un agent, ou encore, la disponibilité d’un objet quelconque. Il est à noter que les trois niveaux ne sont pas toujours tous nécessaires pour atteindre la valeur désirée. Pour les états dynamiques, ils le sont tous, car il y a plusieurs états dynamiques. Mais, si nous prenons la navigation, deux niveaux de référence suffisent puisqu’il y a seulement un état de navigation pour un agent. Ainsi, si nous voulons savoir si l’agent est mode « marche », le premier niveau de référence cible l’état de navigation. Le second niveau de référence cible la fonction qui retourne le mode de navigation courante. Le retour de cette fonction peut ensuite être comparé à la valeur correspondant au mode « marche ». Cette valeur est contenue dans un élément de formule de type nombre réel.
    • 110 IV.5 – Mécanisme de fixage des référents Le mécanisme de fixage des référents est impliqué à plusieurs niveaux dans le modèle, c’est pourquoi cette section est nécessaire afin de résumer et expliquer davantage son fonctionnement. La figure IV.6 présente les possibilités de fixage de référents que le mécanisme nous offre, en suivant une certaine séquence. La flèche numéro 1 de la séquence nous montre qu’il faut d’abord une ou plusieurs sources externes pour fixer un ou plusieurs référents à l’intérieur des différentes règles d’activation d’un objectif. Pour la majorité des cas, les sources externes sont déterminées au niveau des tables de fixage des référents provenant d’une source externe de chacune de ces règles. La cible est alors un des référents d’une précondition de la règle d’activation, chaque précondition ayant deux référents possibles. Une précondition nécessite un référent lorsqu’au moins un de ses éléments de formule, à gauche ou à droite de l’opérateur d’inéquation, fait référence à une variable externe à l’agent pour lequel le comportement est vérifié. La source externe de référent est interrogée une ou plusieurs fois au cours de la vérification de la règle afin de déterminer si la source peut fournir un référent qui remplit la ou les préconditions nécessaires à l’application de la règle. Lorsque la source externe est un objectif, c’est l’objectif en question qui est responsable de fixer le référent. Dans ce cas, il n’y a pas d’entrée dans la table de référents de la règle d’activation pour ce référent, car il se fait fixer passivement et est simplement utilisé à la vérification. La flèche numéro 2 montre que si plusieurs préconditions sont posées par une même règle, sur le même référent, la règle se charge, en cours de vérification, de passer le référent d’une précondition à l’autre. La règle utilise alors la table de fixage des référents d’une précondition source à une précondition cible lorsque la précondition vérifiée sert à fixer un référent. Si la précondition vérifiée retourne faux et que celle-ci peut être vérifiée plusieurs fois, la source sera interrogée à plusieurs reprises.
    • 111 La flèche numéro 3 montre qu’un référent provenant d’une précondition peut être utilisé par une action. Étant donné qu’il est inutile de fixer un référent pour une action qui ne sera pas utilisée, cette étape de la séquence se produit seulement à l’instant précédent l’exécution des actions de la règle. Objectif 1 Sources externes de référents Règles d’activation 3 2 Règle 1 prcs actions Mémoire perceptuelle Règle 2 prcs actions ... Mémoire à long terme Règle n prcs actions 4 4 Entourage de l’agent Actions Action 1 Action 2 4 5 ... Message Action n 6 Règles de complétude 7 3 2 Règle 1 prcs actions Objectif externe Règle 2 prcs actions ... Possibilités futurs Règle n prcs actions Figure IV.6 : Mécanisme de fixage des référents La première partie de la séquence nous montrait le mécanisme de fixage des référents qui est en action au cours de la vérification du comportement, avant qu’un objectif devienne actif. Les flèches numéro 4 se produisent à l’exécution de l’objectif, au moment
    • 112 où il devient en cours, juste avant l’exécution de ses actions. Ces trois flèches nous montrent que les référents fixés pour une règle d’activation, celle qui a servi spécifiquement à l’activation de l’objectif, peuvent servir pour les actions de l’objectif, pour les règles de complétude ou pour des objectifs externes. Le mécanisme utilise la table de fixage des référents de l’objectif et vérifie que la source est la règle d’activation en question, pour fixer les différents référents de la table, que ce soit pour l’objectif même ou pour un autre objectif. La flèche numéro 5 nous montre que des référents des actions d’un objectif peuvent être fixés par un objectif externe. La flèche numéro 6 montre que les règles de complétude peuvent elles aussi utiliser des sources externes de référents. Les référents sont fixés avant ou pendant la vérification des règles, qui peuvent passer ces référents d’une précondition à l’autre ou d’une précondition à une action, de la même façon que pour les règles d’activation. Finalement, la flèche numéro 7 correspond à l’instant suivant la complétude de l’objectif. La table de fixage des référents de l’objectif est de nouveau utilisée pour fixer les référents dont la source est la règle qui a servi à la complétude de l’objectif. Puisque l’objectif est atteint ou non-atteint, il ne sera plus utilisé et, par conséquent, la cible est nécessairement un objectif externe. La source et la cible sont identifiées par une table de fixage des référents. Au niveau des règles, les tables de fixage des référents sont composées d’objets de type TInternalReferent. Comme nous le verrons à la section IV.6.4, il y a trois tables qui permettent de savoir de quel type de fixage il s’agit. Ce sont les flèches numéro 1, 2, 3 et 6. Au niveau des objectifs, une seule table permet d’identifier les sources et les cibles. Cette table est composée d’objets de la classe TInternalObjectiveReferent, présentée à la section IV.7.3, qui est légèrement plus complexe que la classe TInternalReferent. Cette table contient des éléments qui concernent les flèches numéro 1, 4, 5, 6 et 7. La différence entre les éléments qui correspondent aux flèches numéro 1 et 6 pour les deux niveaux est que la
    • 113 source externe doit être un objectif au niveau des objectifs, ce qui n’est pas possible au niveau des règles. Tous les référents sont stockés au niveau de l’objectif, car c’est à ce niveau que nous retrouvons les données spécifiques à un agent. La section IV.7.2 présente la classe TObjectiveReferents qui sert de conteneur pour les référents. Tous les référents fixés par les tables de fixage des référents se retrouvent à ce niveau. Les algorithmes s’occupent de retrouver l’ensemble des référents correspondant à une règle ou à une action, en cours de vérification et d’exécution pour pouvoir utiliser et fixer les référents. Un pointeur sur l’ensemble des référents correspondant est donc passé en paramètre à différentes méthodes pour la vérification des règles, l’exécution de leurs actions et des actions de l’objectif. Lorsqu’un fixage de référent est effectué, les index permettant d’obtenir le référent de la source sont utilisés pour retrouver le bon pointeur. Ce pointeur est le référent qui est passé en paramètre à la méthode de fixage au niveau des objectifs avec les index permettant de fixer la bonne cible.
    • 114 IV.6 – Module Comportemental La figure IV.7 présente le diagramme de classes du module comportemental. Nous y retrouvons toutes les classes du module sauf les objectifs et quelques classes rattachées aux objectifs qui sont contenus dans le module des objectifs présenté à la section IV.7. Ce diagramme ne présente pas les attributs et les méthodes des classes pour des raisons de lisibilité. Les classes seront donc reprises dans des figures comprennent les attributs et les méthodes, à mesure qu’elles sont présentées. La classe TBehaviourBase n’est pas présentée en détail puisqu’elle son rôle est d’initialiser et de contenir les classes du module. * -priority nodes of the profile «type» PriorityNode Agents Module::TAgent TInternalReferent 1 TProfile Objective 1 -a profile contains priority nodes Module -internal referents of a rule * -a profile contains priority need -rule has internal referents 1 * -priority needs of the profile TRule «type» -rules have actions FormulaNode «type» PriorityNeed «utilise» * TAction -actions of the rules * -rules have preconditions «utility» * -preconditions of rules «utilise» FormulaVariableReference * «utility» float * TPreCondition {OU} Agents Module::TAgent «utilise» -preconditions have a 1st member «union» «utilise» «utilise» Element * -preconditions have a 2nd member «utility» FormulaString Interface::TMagsApp TBehaviourBase 1 -2nd member of inequation -1st member of inequation TFormulaElement 1 This class is the container for all objects of the behaviour module. The initialisation fonctions for the classes of this module are in this class. Agents Module::TAgent The links aren't shown in this diagram because it is linked to almost every classes. Figure IV.7 : Diagramme de classes du module comportemental
    • 115 IV.6.1 – Classe TProfile La figure IV.8 contient la classe TProfile qui est un point d’entrée du module comportemental par son lien avec l’agent. Chaque agent possède sa propre instance de profil, c'est-à-dire que les données ne sont pas partagées entre les agents. Dans cette classe, nous retrouvons les rôles (m_AllRoles), les objectifs (m_AllObjectives) de ces rôles et les besoins associés à une priorité (m_PrioritiesNeeds). De plus, un monceau (m_PriorityHeap) permet de gérer la sélection des objectifs en classant les objectifs sélectionnables par ordre de priorité. Un noeud de ce monceau est constitué d'un élément de type PriorityNode. Cette structure contient un pointeur sur un objectif (SelectableObjective) et sa priorité courante (Priority). Les objectifs obligatoires sélectionnables ne se retrouvent pas dans le monceau. Ceux-ci sont ajoutés à la liste des obligations (m_ExecutableObligations) qui est entièrement exécutée à chaque exécution du comportement d'un agent. La classe TProfile comporte bien sûr les différentes méthodes d'initialisation et de gestion du monceau (AddSelectableObjective, RemoveUnselectableObjective, UpdatePriority, MakeHeap, SiftDown, Percolate, Exchange, UpdatePriorityHeap, CheckHeapProperties, GetPriorityMax & GetPrioritaryObjective). Nous retrouvons aussi à ce niveau la fonction de vérification du comportement (CheckBehaviour), celle de l'exécution (Execute), ainsi que les méthodes d'accès et de modification de valeurs. Un autre aspect important de cette classe est qu'elle contient les index des données spécifiques d'un agent (m_AgentSpecificDataIndex) pour chacun des rôles du profil. L'index de données spécifique à un agent permet de référer à un ensemble de données spécifique à un agent pour un rôle donné. La structure générale d'un objectif est partagée par un ensemble d'agents. Par contre, un agent possède ses propres données au sein de cette structure et l'index permet de contrôler l'objectif de façon à ce qu'il considère le bon ensemble de données. Les données spécifiques à un agent se situent au même index pour tous les objectifs d'un rôle. Le fait d’avoir un index par rôle restreint les objectifs à faire partie d’un seul rôle, mais facilite grandement le traitement des ensembles de données. Ainsi, pour qu’un même objectif fasse partie de plusieurs rôles il faut qu’il soit dupliqué. Plus d’explications sur les index de données spécifiques sont données à la section IV.7.
    • 116 TProfile -m_Id : int -m_Name : String -m_CurrentRole : int -m_AllObjectives : TObjective -m_AllRoles : TObjective -m_PriorityHeap -m_ExecutableObligations : TObjective -m_AgentSpecificDataIndex : int -m_PrioritiesNeeds : PriorityNeed -m_LastSelectedRoleId : int +GetId() : int +GetName() : String +AddRole(in NewRole : TObjective) +GetRole(in IdRole : int) : TObjective +GetObjective(in IdObjective : TObjective) : TObjective +SetPriorityNeed(in IdNeed : int, in Priority : int) Agents Module::TAgent +CreateAgentSpecificDataSet(in IdRole : int) +CreateAgentSpecificDataSet() +GetAgentSpecificDataSet(in IdRole : int) : int +CheckBehaviour(in Agent : TBasicAgent) +AddSelectableObjective(in SelectableObjective : TObjective, in Priority : int) +RemoveUnselectableObjective(in Objective : TObjective) +UpdatePriority(in Id : int, in Priority : int) +MakeHeap() +SiftDown(in Index : int) +Percolate(in Index : int) +Exchange(in j : int, in k : int) +UpdatePriorityHeap() +CheckHeapProperties() +GetPriorityMax() +GetPrioritaryObjective() +Execute(in IdObjective : int, in Self : TAgent) +SeekFloatValue(in ReferenceLevel1 : int, in ReferenceLevel2 : int, in ReferenceLevel3 : int) : float +ModifyValue(in Sender : TAgent, in ModifyAction : TAction) : bool +GetPriorityOfNeed(in IdNeed : int) : int 1 -a profile contains priority nodes 1 -a profile contains priority need * -priority nodes of the profile * -priority needs of the profile «type» «type» PriorityNode PriorityNeed -SelectableObjective : TObjective -Need : int -Priority : int -Priority : int Figure IV.8 : Classe TProfile et structures contenues dans la classe Afin que la priorité des objectifs soit personnalisée pour un agent, cette classe renferme une liste de besoins associés à leur priorité respective (m_PrioritiesNeeds). Les éléments de cette liste sont de type PriorityNeed. Le besoin (Need) est codé par un entier et sa priorité (Priority) est aussi un entier. En gardant la priorité des besoins au niveau du profil, nous pouvons non seulement personnaliser le comportement d'un agent selon son profil, mais aussi selon le profil qui contient un objectif donné. Par exemple, un agent peut
    • 117 avoir le besoin de manger dans son profil de base et dans son profil actif et la priorité de ce besoin peut être différente pour ces deux profils. IV.6.2 – Classe TRule Les profils font lien avec les objectifs qui se servent des règles pour gérer une grande partie de leur cycle de vie. La figure IV.7 nous montre bien ces liens, la classe TProfile utilisant le module des objectifs qui utilise à son tour la classe TRule, présentée plus en détail dans la figure IV.9. Celle-ci contient tout simplement un ensemble de préconditions (m_PreConditions) et d'actions (m_Actions). La méthode CheckAllPreConditions est appelée au cours de la vérification des objectifs afin de déterminer si l'objectif devient actif, inactif, atteint ou non-atteint, dépendamment du type de règle vérifié. La méthode PassiveCheck est appelée lorsque le fixage de référent doit être ignoré. Par exemple, si un objectif devient actif lorsque l'agent perçoit un agent ayant certaines caractéristiques et que cet objectif n'est pas sélectionné pour l'exécution, la méthode PassiveCheck sera appelée pour vérifier si l'objectif reste actif. De cette façon, l'agent vérifie si l'agent qu'il percevait au cours de l'activation de l'objectif est toujours perçu, plutôt que de chercher un nouvel agent qui possède les caractéristiques requises. La méthode ExecuteActions sert évidemment à exécuter les actions de la règle. Celle-ci doit être appelée seulement lorsque toutes les préconditions de la règle sont remplies. Nous voyons aussi dans le diagramme qu'une règle possède certains attributs qui sont relatifs à la priorité. Le nombre entier servant de référence pour l'intensité (m_IntensityReference) réfère à un état dynamique. C'est donc à ce niveau que le modificateur de priorité relié à l'intensité du besoin (m_IntensityPriorityModifier) est déterminé. La valeur est déterminée dynamiquement en cours de vérification et lorsque la règle s'applique, le modificateur de priorité est appliqué à la priorité de l'objectif. De plus, la règle possède aussi un modificateur de priorité d'opportunité (m_OpportunityPriorityModifier) fixe. Si la règle représente une opportunité pour l'agent, la valeur de ce modificateur sera non nulle. De ce fait, l'agent aura plus de chance d'être
    • 118 attiré par des opportunités lorsqu'une telle règle s'applique puisque le modificateur de priorité d'opportunité augmentera la priorité de l'objectif. Il est à noter que ces valeurs servent seulement pour les règles d'activation. En effet, lorsqu'une règle de complétude s'applique il est inutile de calculer la priorité d'un objectif puisqu'il est déjà atteint ou non- atteint et, par conséquent, il n'est plus considéré pour la sélection. TRule -m_Id : int -m_PreConditions : TList -m_Actions : TList -m_IntensityReference : int -m_IntensityPriorityModifier : int -m_OpportunityPriorityModifier : int -m_PrCSourceInternalReferents -m_PrCInternalReferents -m_ActionInternalReferents +Init(in id : int) +Init(in id : int, in IntensityReference : int) +Init(in id : int, in IntensityReference : int, in OpportunityPriorityModifier : int) +AddPrCSourceInternalReferent() +AddPrCInternalReferent() +AddActionInternalReferent() +AddPreCondition(in NewPreCondition : TPreCondition, in Index : int) +AddAction(in action : TAction, in index : int) +GetId() : int +GetPreConditions() : TPreCondition +GetPreCondition(in Index : int) : TPreCondition +GetNbPreConditions() : int +CheckAllPreConditions(in Self : TAgent, in TargetAgent : TAgent) : boolean +PassiveCheck(in Self : TAgent, in TargetAgent : TAgent) : boolean +ExecuteActions(in Self : TAgent, in TargetAgents : TAgent) +GetIntensityPriorityModifier() : int +GetIntensityPriorityModifier(in Self : TAgent) : int +GetOpportunityPriorityModifier() : int +ResetPriorityModifier() +GetPrCSourceInternalReferents() : TInternalReferent Figure IV.9 : Classe TRule Une règle est aussi liée à des actions qui s'exécutent à l'application de la règle. Ces actions sont exécutées lorsqu'un objectif passe à l'état actif et lorsqu'il passe à l'état atteint ou non-atteint, suivant l'application des règles. Le passage à l'état actif se fait automatiquement par l'algorithme à l'exécution d'une règle. Par contre, le passage à l'état atteint ou non-atteint dépend de la règle appliquée. C'est donc une action de la règle de complétude appliquée qui permet le passage à l'état désiré.
    • 119 IV.6.3 – Classe TAction TAction Action Codes : -m_Id : int MODIFY_VALUE 0 -m_ActionCode : int CREATE_MOBILE_AGENT 1 -m_Name : String DESTROY_MOBILE_AGENT 2 -m_IntParameters : int CREATE_OBJECT_AGENT 3 -m_FloatParameters : float DESTROY_OBJECT_AGENT 4 -m_AgentParameters : TAgent CREATE_CLUSTER_AGENT 5 +Init(in ActionCode : int, in ActionName : String) DESTROY_CLUSTER_AGENT 6 +Init(in Id : int, in ActionCode : int, in ActionName : String) CREATE_GROUP_AGENT 7 +GetId() : int DESTROY_GROUP_AGENT 8 +AddParameter(in Parameter : int) CHOOSE_DESTINATION 9 +AddParameter(in Parameter : float) MOVE 10 +AddParameter(in Parameter : TAgent) MODIFY_EXTERN_VALUE 11 +SetReferent(in Index : int, in Referent : TAgent) SEND_MESSAGE 12 +GetIntParameter(in Index : int) : int BIDON 13 +GetFloatParameter(in Index : int) : float PAY 14 +GetAgentParameter(in Index : int) : TAgent ACTIVATE_PROFILE 15 +Execute(in Sender : TAgent) +Execute(in Sender : TAgent, in Targets : TAgent) +GetName() : String Agents Module::TAgent Figure IV.10 : Classe TAction La classe TAction, présentée dans la figure IV.10, permet de représenter une action qu’elle soit au niveau des objectifs ou des règles. En effet, comme le montre le diagramme de classe du module comportemental de la figure IV.7, le module des objectifs se sert des mêmes actions que les règles. Une action possède un code d’action (m_ActionCode) qui peut prendre une valeur parmi celles énumérées dans la liste des codes d’actions rattachées à la classe TAction de la figure IV.10. Suivant ce code, différents paramètres sont considérés par l’action. Les actions qui sont présentement définies dans le système sont décrites dans l’appendice Y. Une action peut comprendre des paramètres de type entier, réel ou pointeur d’agent. Les paramètres de type entier et réel sont majoritairement fixés à l’initialisation des actions. Par contre, les pointeurs d’agents sont déterminés dynamiquement par les objectifs et les règles qui fixent ceux-ci dans l’action grâce au mécanisme de référence. Lors de l’exécution de l’action, le code d’action permet de déterminer les paramètres définis pour l’action, ainsi que les appels de fonctions qui sont
    • 120 nécessaires pour que l’action donne l’effet désiré. Une action est partagée par tous les agents qui partagent la ou les règles ou objectifs liés à l’action. C’est pourquoi les paramètres spécifiques à un agent, tel que les référents ou d’autres paramètres qui dépendent des états de l’agent, doivent être fixés juste avant l’exécution de l’action. Voici un exemple d’action que nous retrouvons souvent dans le système. L’action en question permet de rendre un objectif atteint. L’action se définit comme suit : Action : L'objectif X est atteint. Code d’action MODIFY_VALUE Paramètre entier 1 OBJECTIVES Paramètre entier 2 X Paramètre entier 3 LIFE_CYCLE Paramètre entier 4 CompletedWithSuccess Chaque paramètre de cette action est utilisé à différent niveau du système pour appeler les bonnes fonctions. Le code d’action est d’abord traité par l’action qui comprendra qu’elle doit modifier une valeur, la fonction de modification (ModifyValue) est alors appelée pour cet agent (TAgent). Cette dernière analyse le premier paramètre pour savoir la direction à prendre entre les profils et les états de l’agent. Étant donné que l’action cible les objectifs, la fonction trouve, entre le profil de base et le profil actif, celui qui contient l’objectif X (GetRightProfile). La fonction de modification est alors appelée au niveau du profil qui fixe l’index de données spécifique à l’agent pour l’objectif et appelle la fonction de modification pour l’objectif X. Finalement, la fonction au niveau de l’objectif analyse le paramètre 3 pour conclure que la valeur à modifier est le cycle de vie, qui est fixé à la valeur du dernier paramètre. IV.6.4 – Classe TInternalReferent Une règle est aussi liée à des référents internes, de la classe TInternalReferent définie dans la figure IV.11. Comme nous l’avons vue dans la figure IV.9, il y a trois types de référents internes dans une règle qui sont ceux provenant d'une source et fixant un
    • 121 référent d'une précondition (m_PrCSourceInternalReferents), ceux provenant d'une précondition et fixant un référent d'une autre précondition (m_PrCInternalReferents) et ceux provenant d'une précondition et fixant le référent pour une action (m_ActionInternalReferents). La classe TInternalReferent permet simplement d'identifier la source et la cible de référent pour être en mesure d'obtenir et de fixer les référents pendant la vérification. Le référent en tant que tel ne se retrouve pas dans cette classe, puisque les règles sont partagées par tous les agents et peuvent se retrouver dans plusieurs objectifs. Le référent est donc situé dans l'objectif qui contient les ensembles de données spécifiques aux agents. En utilisant un système de référence interne aux règles et en stockant le référent au niveau de l'objectif, nous arrivons à dissocier la structure générale partagée par plusieurs agents des données spécifiques qui se situent dans l'objectif. Le lien entre ces deux éléments reste quand même présent, car durant la vérification des objectifs le bon ensemble de données spécifique est utilisé et les bons référents peuvent être transmis au niveau de la règle vérifiée. TInternalReferent -m_SourcePrCIndex : int -m_SourceReferentIndex : int -m_TargetPrCOrActionIndex : int -m_TargetReferentIndex : int +Init(in SourcePrCIndex : int, in SourceReferentIndex : int, in TargetPrCOrActionIndex : int, in TargetReferentIndex : int) +GetSourcePrCIndex() : int +GetSourceReferentIndex() : int +GetTargetPrCOrActionIndex() : int +GetTargetReferentIndex() : int +SetSourceReferentIndex(in Index : int) Figure IV.11 : Classe TInternalReferent Ainsi, lorsque la source est une précondition, la cible est soit une précondition, soit une action de la même règle. Les attributs de la classe TInternalReferent permettent de connaître la source et la cible à l’aide d’index. Nous y retrouvons l'index de la précondition source (m_SourcePrCIndex), l'index du référent source (m_SourceReferentIndex), l'index de la précondition ou de l'action cible (m_TargetPrCOrActionIndex) et l'index du référent cible (m_TargetReferentIndex). Avec ces quatre index nous identifions la source et la cible et dépendamment du type de référent interne au niveau de la règle, l'algorithme peut savoir
    • 122 qu'il doit fixer un référent d'une précondition ou d'une action. L’utilisation d’index à la place des identifiants des éléments référés permet une référence directe, sans avoir à chercher le bon élément. Lorsque la source n'est pas une précondition, les quatre mêmes index sont utilisés sauf que seulement les préconditions peuvent être ciblées. Pour ce qui est de la source, nous utilisons le premier index pour identifier les différents types de source externe. Les index présentement définis sont l'index 0 qui correspond à la perception, l'index 1 à la mémoire, l'index 2 à la perception et à la mémoire en même temps et l'index 3 à l’expéditeur d’un message, l’index 4 à l'entourage immédiat de l'agent et l’index 5 à la cible d’un message. Le second index est réservé pour l’identifiant du filtre ou pour l’identifiant du message lorsque la source est un message. Les référents internes forment ainsi une table de fixage de référents qui sont utilisés par le mécanisme de référence pour fixer les référents à l’intérieur d’une même règle, pour les différentes préconditions et actions en jeu. IV.6.5 – Classe TPreCondition TPreCondition -m_Id : int -m_FirstMember : TFormulaElement -m_SecondMember : TFormulaElement -m_OperatorType : int -m_IsReferentFixer : bool -m_IsMultipleCheck : bool +Init(in Id : int, in OperatorType : int, in FirstElement : TFormulaElement, in SecondElement : TFormulaElement, in IsReferentFixer : boolean, in IsMultipleCheck : boolean) +GetOperatorType() : int +CheckPreCondition(in Self : TAgent, in TargetAgent1 : TAgent, in TargetAgent2 : TAgent) : boolean +SetFirstMember(in FirstMember : TFormulaElement) +GetFirstMember() : TFormulaElement +SetSecondMember(in SecondMember : TFormulaElement) +GetSecondMember() : TFormulaElement +GetId() : int +GetIsReferentFixer() : boolean +GetIsMultipleCheck() : boolean Figure IV.12 : Classe TPreCondition La classe TPreCondition de la figure IV.12 contient une inéquation qui est constituée de deux éléments de formule (m_FirstMember & m_SecondMember) et d'un opérateur (m_OperatorType). Lorsqu'une règle est vérifiée, toutes les préconditions composant cette règle sont évaluées. La méthode CheckPreCondition applique tout
    • 123 simplement l'opérateur d'inéquation aux deux membres de l'inéquation. Cette méthode prend en paramètres deux pointeurs d'agents qui sont en fait les référents pour chacun des membres de l'inéquation. Chaque membre de l'inéquation a son propre référent. La valeur déterminant si la précondition fixe un référent (m_IsReferentFixer) indique que la précondition sert à fixer un référent à l'intérieur de la règle dont elle fait partie. C'est-à-dire que cette valeur doit être à vrai si la règle renferme un référent interne qui utilise cette précondition comme source de référent. L'autre valeur booléenne indique si la précondition peut éventuellement être vérifiée à plusieurs reprises (m_IsMultipleCheck) au cours de la même vérification, avec différents référents. Si cette valeur est à vrai et que la vérification de la précondition est négative avec un premier référent, l'algorithme reprend la vérification de la règle au début avec un nouveau référent. Par exemple, nous pouvons avoir une première précondition qui vérifie si un agent qui fait partie d'un certain groupe est perçu. Dans ce cas, la source de référents qui est la perception peut fournir un ensemble d'agents qui sont des référents potentiels. À la vérification de la première précondition, la perception fournit un premier référent. Si ce référent ne satisfait pas la précondition, la vérification reprendra cette précondition avec un nouveau référent fourni par la perception. Une vérification positive de la première précondition et le fait que celle-ci serve à fixer un référent, nous indiquent que nous avons trouvé un référent pour la cible qui sera, pour cet exemple, la deuxième précondition de la règle. La table de fixage des référents de la règle est alors utilisée par le mécanisme de référence pour déterminer et fixer la précondition cible. Ensuite, la seconde précondition vérifie une autre caractéristique de l'agent perçu. Si le référent satisfait la première précondition, mais qu'il ne satisfait pas la deuxième, la vérification recommence à la première précondition avec un nouveau référent. La vérification continue ainsi jusqu'à ce qu'un agent de la source de référents remplisse toutes les préconditions ou que la source de référents soit épuisée. Dans cet exemple, les deux préconditions peuvent être vérifiées plusieurs fois et la première fixe un référent. IV.6.6 – Classe TFormulaElement
    • 124 TFormulaElement -m_id : int -m_Type : int -m_Element : Element +Init(in Id : int, in NodeOperator : int) +Init(in Id : int, in ReferenceLevel1 : int, in ReferenceLevel2 : int, in ReferenceLevel3 : int) +Init(in Id : int, in StringValue : String) Agents Module::TAgent +Init(in Id : int, in FloatValue : float) +SetRightMember(in RightMember : TFormulaElement) +SetLeftMember(in LeftMember : TFormulaElement) +GetId() : int +GetType() : int +GetNodeOperator() : int +ComputeFormula(in Self : TAgent, in TargetAgent : TAgent) : float +ComputeFormulaString(in Self : TAgent, in TargetAgent : TAgent) : String «type» «utilise» FormulaNode -m_NodeOperator : int «utilise» -m_pLeftMember : TFormulaElement -m_pRightMember : TFormulaElement «utility» «union» FormulaVariableReference Element «utilise» -m_AgentType : int {OU} -m_ReferenceLevel1 : int -m_ReferenceLevel2 : int -m_ReferenceLevel3 : int «utilise» «utility» float -m_FloatLeaf : float «utilise» «utility» FormulaString -m_String : String Figure IV.13 : Classe TFormulaElement et union utilisée L’inéquation d’une précondition est composée de deux éléments de formule de la classe TFormulaElement, ce qui explique les deux liens entre ces classes de la figure IV.7. La classe TFormulaElement est détaillée dans la figure IV.13. Un élément de formule (m_Element) d’un type (m_Type) défini est en fait une union (Element) qui peut être soit un FormulaNode, FormulaVariableReference, FormulaString ou nombre réel. Le noeud (FormulaNode) permet de construire des équations en liant deux éléments de formule (m_pLeftMember & m_pRightMember) à un opérateur arithmétique (m_NodeOperator). Un élément de formule de type FormulaString contient une chaîne de caractères (m_String). Un élément de type FormulaReference permet de référer à une valeur ciblée
    • 125 chez un agent qui est soit l'agent pour lequel la vérification s'effectue ou le référent passé en paramètre à la méthode ComputeFormula. La variable codant le type d'agent (m_AgentType) permet de déterminer si l'élément de formule réfère à l'agent lui-même (SELF) ou à un agent externe (EXTERN). La méthode ComputeFormula fait le calcul de l'élément de formule et retourne la valeur obtenue. Le référent qui est passé en paramètre à un élément de formule de type FormulaNode se transmet jusqu'aux feuilles de l'arbre. Cet automatisme nous permet d'éviter de devoir cibler un élément de formule précis pour un référent et impose la contrainte très acceptable de deux référents possibles par précondition. Les pointeurs de type TAgent passés en paramètre à la fonction ComputeFormula permettent un retour au niveau de l’agent, spécifiant ainsi l’interface. La section IV.6 nous a présenté plusieurs classes du module comportemental. Plusieurs de celles-ci sont utilisées plus ou moins directement par les objectifs, tout au long de leur cycle de vie. Maintenant que nous connaissons leur composition, nous sommes prêts à étudier les autres classes du module comportemental qui font partie du sous-module des objectifs
    • 126 IV.7 – Module des objectifs La figure IV.14 présente le diagramme de classe du module des objectifs. Les classes TCompositeObjective et TElementaryObjective, qui représentent respectivement les objectifs composés et élémentaires, dérivent de la classe abstraite TObjective. Les objectifs composés sont les noeuds des arbres d'objectifs, ils contiennent un ensemble de sous- objectifs (m_SubObjectives) qui permettent la composition des arbres. Les objectifs élémentaires ont comme caractéristique spécifique de contenir un ensemble d'actions (m_Actions), ce sont les feuilles des arbres. C'est donc au niveau des feuilles que se situe le comportement que l'agent exécute. Il est a noter que les actions liées aux règles sont des objets de la même classe que les actions liées aux objectifs, c’est pourquoi elles ne seront pas traitées dans cette section. Comme il est mentionné dans la note rattachée à la classe TObjective du diagramme de la figure IV.14, un objectif peut être partagé par plusieurs agents, mais chaque agent possède ses propres données en ce qui concerne les temps, la priorité, le cycle de vie, la fréquence et les référents. Toutes ces données qui sont spécifiques à un agent se retrouvent dans des listes qui font partie de la même structure partagée par tous les agents. Lorsqu'un agent est associé à un profil (AddProfile & SetBasicProfile de TAgent de la figure IV.4), des ensembles de données sont créés (CreateAgentSpecificDataSet de TProfile de la figure IV.8) et stocké dans le profil de l'agent (m_AgentSpecificDataIndex) pour chaque rôle. Ainsi, pour un agent précis nous savons à quel index des listes d'un rôle les données de l'agent peuvent être retrouvées. Cet index est appelé l'index de données spécifique. Ceci implique qu'un objectif donné doit être associé à un seul rôle. La figure IV.15 présente un exemple fictif du fonctionnement de l'index de données spécifique à un agent. Nous avons les agents X et Y qui possèdent un certain profil contenant les rôles 1, 2 et 3. Pour le rôle 1, l'agent X est associé aux données qui sont à l'index 15 et l'agent Y aux données retrouvées à l'index 1. Les données des référents et des temps et priorités ne sont pas décrites puisque les éléments de ces listes sont contenus dans des objets.
    • 127 Behaviour Module::TAction Behaviour Module::TProfile TObjective -m_Id : int -m_Role : int -m_Type : int -m_IsComposite -m_PrioritiesTimes : TPrioritiesTimes -m_LifeCycles : LifeCycle -m_ActivationRules : TRule -m_IsSuspendable : bool -m_ResumingRules : TRule TInternalObjectiveReferent «enumeration» -m_CompletionRules : TRule -m_CurrentPriorities : int -m_SourceRuleType : int LifeCycle -m_SourceRuleIndex : int -m_Referents : TObjectiveReferents +Inactive -m_FrequencyCounts : int -m_SourcePrCIndex : int * 1 +Active -m_FrequencyCount : int -m_SourceReferentIndex : int +Ongoing -m_IsEnabled : boolean -m_TargetObjectiveId : int +Suspended -m_CurrentDataIndex : int -m_TargetType : int 1 * +CompletedWithSuccess -m_InternalObjectiveReferents : TInternalObjectiveReferent -m_TargetRuleIndex : int +CompletedWithoutSuccess -m_ActivationRuleIndex : int -m_TargetPrCIndex : int -m_SuperObjective : TObjective -m_TargetReferentIndex : int -m_IsRecurrent : bool -m_IsPerceptionFilterForSelectionAdded : bool -m_IsPerceptionFilterForCompletionAdded : bool TPrioritiesTimes The objective is the same for each +InitDefaultDataSet() -m_CurrentPriority agent who shares it. m_ObjectiveTimes, +SetId(in Id : int) -m_ActivationTime m_LifeCycles, m_ObjectivePriorities, +GetId() : int -m_LastingTime m_FrequencyCounts and m_Referents +SetType(in Type) -m_IntensityPriorityModifier are lists. So each agent linked to the +GetType() : <unspecified> -m_OpportunityPriorityModifier objective has its own private part of the +SetIsComposite(in IsComposite : bool) -m_TimePriorityModifier objective.The agents is linked to an +IsComposite() : bool -m_RelatedNeed : int objective by a pointer and an index. +InitPrioritiesTimes() -m_NeedBasePriority This index is passed in parameter when +SetPrioritiesTimesValue(in ValueIndex : int, in Value : int) -m_ParentPriorityModifiers the agent needs to interact with an +GetPrioritiesTimesValue(in ValueIndex : int) : int 1 * -m_SelectionTime objective. This way the objective knows +InitLifeCycle() -m_ElapsedTime which priorities, times and referents it +SetLifeCycle(in CurrentState : LifeCycle) -m_LastSuspensionTime needs to refere to for this agent. +GetLifeCycle() : LifeCycle -m_TotalSuspensionTime +AddRule(in RuleType : int, in Rule : TRule) -m_MaxSuspensionTime +SetIsSuspendable(in IsSuspendable : bool) -m_ExecutionTime +GetIsSuspendable() : bool +InitCurrentPriority() +SetCurrentPriority(in Priority : int) +UpdateCurrentPriority() +GetCurrentPriority() : int TObjectiveReferents +SetCurrentDataIndex(in CurrentDataIndex : int) 1 +InitFrequencyCount() -m_ActivationReferents * +SetFrequencyCount(in FrequencyCount : int) -m_ActionReferents +SetGlobalFrequencyCount(in FrequencyCount : int) Behaviour Module::TRule -m_ResumingReferents +DecrementFrequencyCount() -m_CompletionReferents +GetFrequencyCount() : int +InitIsEnable() TConstrainedPrioritiesTimes +SetIsEnable(in IsEnabled : bool) +GetIsEnable() : bool -m_TemporalConstraints +SetSuperObjective(in SuperObjective : TObjective) -m_Priorities : int +GetSuperObjective() : TObjective -m_Slopes : float +GetCurrentReferents() : TObjectiveReferents -m_Bs : float +SetActivationRuleIndex(in Index : int) -m_CurrentRange : int +GetActivationRuleIndex() : int -m_NextTemporalConstraint : int +AddInternalObjectiveReferent(in InternalObjectiveReferent : TInternalObjectiveReferent) +SetIsRecurrent(in IsRecurrent : bool) +InitReferents() +ModifyValue(in Sender : TAgent, in ModifyAction : TAction) +IsObligatory() : bool 1 * TCompositeObjective TElementaryObjective -m_SubObjectives : TObjective -m_Action : TAction Figure IV.14 : Diagramme de classes du module des objectifs
    • 128 IV.7.1 – Classe TObjective Dans la figure IV.14, nous voyons de nouveau le lien entre les objectifs et les règles. En effet, la classe TObjective contient trois listes de règles qui sont des instances de la classe TRule. Ces listes expliquent l'interface entre les règles du module comportemental et les objectifs. Nous avons une première liste de règles d’activation (m_ActivationRules) qui sont vérifiées par l’algorithme de vérification pour déterminer le passage d’un objectif d’inactif à actif, ou vice-versa. La seconde liste est celle contenant les règles de complétude (m_CompletionRules) qui définissent sous quelles conditions l’objectif en cours ou suspendu passe à atteint ou non-atteint. La troisième liste est celle des règles de reprise qui est prévue pour le mécanisme de suspension qui n'est pas encore implanté. Ces listes de règles font partie de la structure commune à tous les agents partageant l’objectif en question. Index de données spécifique pour les rôles d'un profil de l'agent X Rôle 1 2 3 Index de données spécifique 15 18 15 Index de données spécifique pour les rôles d'un profil de l'agent Y Rôle 1 2 3 Index de données spécifique 1 1 5 Listes de données spécifiques de l'objectif Z du rôle 1 Index de données 0 1 2 3 ... 15 ... Cycle de vie actif atteint en cours inactif ... actif ... Référents classe classe classe classe ... classe ... Temps & priorités classe classe classe classe ... classe ... Fréquence 0 1 0 0 ... 0 ... Priorité courante 60 - 75 60 ... 75 ... ... ... ... ... ... ... ... ... Figure IV.15 : Exemple décrivant les index de données spécifique à un agent L’état courant du cycle de vie d’un objectif est contenu dans la liste contenant des éléments de type LifeCycle (m_LifeCycles). Cette liste contient un élément par agent
    • 129 associé à l’objectif. L’index de données spécifique d’un agent, contenu dans son profil, est nécessaire pour que les algorithmes puissent obtenir la donnée correspondant à l’agent en cours. L'attribut m_IsSuspendable permet de définir si l'objectif peut être suspendu ou non. Cet attribut n'est pas utilisé présentement puisque la suspension n'est pas implantée. L’attribut m_IsEnabled est spécifique à chaque agent. Lorsque cet attribut est fixé à vrai, l’agent considère cet objectif dans sa vérification du comportement. Par contre, si la valeur est faux, l’objectif est ignoré par l’algorithme de vérification. Ainsi, il est possible de désactiver un comportement de l’agent lorsque cela est nécessaire. Par exemple, si nous créons un agent qui n’est pas actif au début de la simulation, ses objectifs seront désactivés à sa création. Puis lorsque cet agent entre en jeu, ses objectifs seront activés. TCompositeObjective -m_SubObjectives : TObjective +InitDefaultDataSet() +AddNewDataSet() : int +CheckBehaviour(in Agent : TAgent, in DataIndex : int) +AddSubObjective(in SourceObjective : TObjective) +GetSubObjectives() : TObjective +CheckCompletionRules(in Self : TAgent) : bool +CheckCompletionRulesUpTree(in Self : TAgent) : bool +Execute(in Self : TAgent) +SetReferent(in TargetType : int, in TargetRuleIndex : int, in TargetPrCIndex : int, in TargetReferentIndex : int, in Agent : TAgent) +ResetObjective(in DataIndex : int) +SetRole(in IdRole : int) +RemoveSelectionPerceptionFilters(in Self : TAgent) +RemoveSelectionPerceptionFiltersDownToLeaves(in Self : TAgent) +RemovePerceptionFiltersDownToLeaves(in Self : TAgent) +MakeInactiveDownToLeaves(in Self : TAgent) +RemoveElementaryObjectivesFromSelection(in Self : TAgent) TElementaryObjective -m_Action : TAction +CheckBehaviour(in Agent : TAgent, in DataIndex : int) +InitDefaultDataSet() +AddNewDataSet() : int +CheckCompletionRules(in Self : TAgent) : bool +SetReferent(in TargetType : int, in TargetRuleIndex : int, in TargetPrCIndex : int, in TargetReferentIndex : int, in Agent : TAgent) +Execute(in Self : TAgent) +AddAction(in Action : TAction, in Index : int) +ResetObjective(in DataIndex : int) +RemoveSelectionPerceptionFilters(in Self : TAgent) +RemovePerceptionFilters(in Self : TAgent) +MakeInactive(in Self : TAgent) +RemoveFromSelection(in Self : TAgent)
    • 130 Figure IV.16 : Classe TCompositeObjective et TElementaryObjective L’attribut m_FrequencyCounts est lui aussi spécifique à un agent, mais la valeur de m_FrequencyCount est partagée pour tous les agents. Ces deux attributs servent pour la récurrence d’un objectif. Lorsqu’un agent complète un objectif, celui-ci devient atteint ou non-atteint et la valeur de m_FrequencyCounts à l’index de données de cet agent prend la valeur de m_FrequencyCount lorsque m_IsRecurrent vaut vrai. Ensuite, à chaque vérification, la valeur spécifique à l’agent est décrémentée jusqu’à ce qu’elle atteigne zéro. L’algorithme de vérification réagit à cette valeur qui lui indique que la récurrence doit s’effectuer et l’objectif ainsi que ses sous-objectifs sont réinitialisés, c’est-à-dire qu’ils redeviennent inactifs. La liste m_CurrentPriorities contient la priorité courante de l’objectif qui est calculée pour chaque agent à partir de la liste m_PrioritiesTimes de type TPrioritiesTimes qui contient la priorité de base ainsi que les modificateurs à appliquer sur la priorité. Dépendamment de la valeur de m_IsComposite, l’objectif est composé ou élémentaire. La figure IV.16 montre en détail les classes TCompositeObjective et TElementaryObjective. C’est à ce niveau que se situent les fonctions permettant de vérifier (CheckBehaviour, CheckCompletionRules) et d’exécuter (Execute) les objectifs. IV.7.2 – Classe TObjectiveReferents La classe TObjectiveReferents est le conteneur pour les référents de l’objectif utilisés au niveau des règles et des actions. Puisque nous avons un système de partage des structures entre les agents et que les données spécifiques se retrouvent au niveau des objectifs, c’est à ce niveau que doivent se retrouver les référents. L'objectif contient une liste d'objets TObjectiveReferents (m_Referents), c'est-à-dire un élément par agent, qui est retrouvable grâce à l'index de données spécifique. Chaque objet TObjectiveReferents renferme des listes de pointeurs sur des agents. Il y a une première liste pour les règles
    • 131 d'activation (m_ActivationReferents), une deuxième pour les règles de complétude (m_CompletionReferents), une troisième liste prévue pour les règles de reprise (m_ResumingReferents) et une quatrième pour les actions (m_ActionReferents). Ces listes sont en fait des listes de listes puisque nous avons plusieurs règles de chaque type et plusieurs actions, en plus d'avoir plusieurs référents pour chacun de ces éléments. Ces listes contiennent une liste de référents par élément, c’est-à-dire, une liste de référents par règle d’activation, de complétude, de reprise ou par action. Étant donné que nous avons la possibilité de deux référents par précondition, une liste pour une règle contient un nombre de référents égal à deux fois le nombre de préconditions de la règle. Ces référents sont à index fixe, c’est-à-dire que les référents de la première précondition sont les deux premiers de la liste, ceux de la deuxième sont les deux suivants, etc. L’index fixe permet un accès direct et par conséquent le système est plus efficace. En compromis, cette structure prend évidemment plus d’espace mémoire, car plusieurs éléments de la liste ne servent pas, puisque ce n’est pas toutes les préconditions qui ont besoin de deux référents. Pour chaque action, nous pouvons aussi avoir plusieurs référents, donc autant de pointeurs. Pour retrouver une liste de référents, il faut avoir le type de référent, c'est-à-dire une des quatre listes de listes et l'index de la liste à retrouver parmi les listes de cette liste, qui est l'index de la règle ou de l'action. Par exemple, lors de la vérification du comportement d'un objectif inactif, chaque règle d'activation est vérifiée par la méthode CheckBehaviour. Cette méthode prend en paramètre la liste des référents spécifique à l'agent pour lequel la vérification s'effectue. Pour retrouver la bonne liste, nous ciblons la liste du même index que la règle vérifiée dans la liste des référents d'activation. La classe possède simplement les méthodes permettant d’initialiser et d’obtenir une de ces listes. IV.7.3 – Classe TInternalObjectiveReferent La classe TInternalObjectiveReferent du module des objectifs, de la figure IV.14, suit la même philosophie que la classe TInternalReferent pour les règles. Cette classe contient une table d’index permettant de fixer les référents entre les différents composants
    • 132 d’un objectif ainsi que pour ceux d’un autre objectif. Au niveau des objectifs, il faut seulement quelques attributs supplémentaires pour permettre de trouver la source du référent et la cible à fixer. Cette classe renferme les paramètres m_SourcePrCIndex, m_SourceReferentIndex, m_TargetPrCIndex et m_TargetReferentIndex que nous retrouvions au niveau des règles. En plus, il faut identifier le type de règle de la source (m_SourceRuleType) qui indique la liste de règles qui doit servir de source et l’index de cette règle dans la liste (m_SourceRuleIndex). Pour la cible, le paramètre m_TargetObjectiveId identifie l’objectif cible, m_TargetType indique si la cible est une des listes de règles ou une des actions et m_TargetRuleIndex l’index de la règle ou de l’action ciblé dans la liste. Le paramètre m_TargetPrCIndex ne sert pas lorsque m_TargetType cible une action. Les méthodes de cette classe ne sont pas dans le diagramme pour des raisons d’espace. Ces méthodes servent simplement à initialiser et obtenir les attributs. IV.7.4 – Classe TPrioritiesTimes Chaque objectif est associé à un ensemble de données concernant la priorité et le temps (m_PrioritiesTimes). La classe TPrioritiesTimes contient et gère ces données. Dans un premier temps, nous avons une classe simplifiée qui contient seulement une contrainte sur la durée (m_LastingTime) d’un objectif. La durée est gérée au niveau des règles de complétude. Ainsi, si par exemple, nous voulons que l’objectif soit atteint après une certaine durée, il faut utiliser une précondition qui vérifie que le temps écoulé (m_ElapsedTime) est plus grand que la durée. Nous avons aussi d’autres temps en rapport avec l’objectif. Il y a le temps auquel l’activation de l’objectif a eu lieu (m_ActivationTime) et le temps auquel l’objectif a été sélectionné (m_SelectionTime). Les temps m_LastSuspensionTime, m_TotalSuspensionTime et m_MaxSuspensionTime sont prévus pour la suspension, mais ils ne sont pas utilisés présentement. Nous retrouvons aussi le besoin relié à l’objectif (m_RelatedNeed), la priorité de base (m_NeedBasePriority), ainsi que les différents facteurs modificateurs de priorité (m_IntensityPriorityModifier, m_OpportunityPriorityModifier, m_TimePriorityModifier et
    • 133 m_ParentPriorityModifiers). Tous ces éléments ont été discutés dans le chapitre précédent sauf pour le modificateur de priorité relié au temps et les modificateurs du parent. m_IntensityPriorityModifier et m_OpportunityPriorityModifier permettent de modifier la priorité de base suivant l’intensité du besoin relié et les opportunités perçus. m_TimePriorityModifier permet de modifier la priorité en fonction du temps. Ce modificateur est déterminé suivant la méthode définie dans la section IV.7.5. Les modificateurs du parent permettent de transférer l’importance des objectifs parents aux sous-objectifs. Nous y retrouvons les trois plus grands modificateurs des ancêtres de l’objectif. IV.7.5 – Classe TConstrainedPrioritiesTimes Le modificateur de priorité relié au temps est déterminé selon les contraintes temporelles et le temps. Les contraintes temporelles ne sont pas pour tous les objectifs. Lorsqu’elles sont définies, nous avons un ensemble de possibilités qui permettent de contrôler le modificateur de priorité relié au temps grâce à la classe TConstrainedPrioritiesTimes. Nous avons un maximum de six contraintes temporelles (m_TemporalConstraints) qui sont chacune reliée à un facteur modificateur de priorité (m_Priorities). La priorité évolue linéairement suivant les pentes (m_Slopes) et les ordonnées à l’origine (m_Bs) définis selon les formules de la section IV.7.5.3. À l’aide de ces données un algorithme, décrit à la section IV.7.5.5, permet de calculer le modificateur de priorité courant, selon l’intervalle de contraintes (m_CurrentRange) dans lequel se situe le temps courant. L'évolution de la priorité en fonction des contraintes temporelles permettra, entre autres, de simuler l’urgence d’une action lorsqu'il reste peu de temps à un agent pour l’entreprendre ou l'accomplir. Les contraintes sur le temps seront prises en compte, lors de la sélection de l'objectif à exécuter, par leur effet sur la priorité. Par exemple, si un agent a pour objectif « Être rendu dans un parc », il pourrait avoir différentes contraintes sur l’heure de départ ou d'arrivée au parc. Il pourrait vouloir commencer à s’y rendre pour une
    • 134 certaine heure minimum, désirée ou encore maximum. L’action en question, se rendre au parc, dure un certain temps. Il se peut aussi que l'agent doive accomplir cet objectif suivant des contraintes de temps minimum, désiré ou maximum. IV.7.5.1 – Contraintes temporelles et priorités associées Dans un premier temps, les différentes contraintes temporelles (m_TemporalConstraints) et priorités (m_Priorities) qu’il est possible de définir pour un objectif seront présentées. Ensuite, nous verrons plus en détail l’interprétation des contraintes afin de mieux les comprendre. priorité prmaxc prdc prbc prmaxs prds prbs temps tmins tds tmaxs tminc tdc tmaxc Figure IV.17 : Évolution de la priorité en fonction du temps La priorité associée à un objectif évolue en fonction du temps selon les contraintes temporelles et les modificateurs de priorité définis. Nous devons explorer toutes les possibilités d'évolution de la priorité selon les contraintes temporelles définies. La figure IV.17 présente un graphique de l’évolution de la priorité lorsque toutes les contraintes
    • 135 temporelles sont définies. Pour ce qui est des priorités, nous avons prbs qui représente la priorité de base de sélection, prds la priorité désirée de sélection, prmaxs la priorité maximum de sélection, prbc la priorité de base de complétude, prdc la priorité désirée de complétude et prmaxc la priorité maximum de complétude. Ces priorités se retrouvent dans la liste m_Priorities de TConstrainedPrioritiesTimes. Les contraintes temporelles sont les suivantes, tmins le temps minimum de sélection, tds le temps désiré de sélection, tmaxs le temps maximum de sélection, tminc le temps minimum de complétude, tdc le temps désiré de complétude et tmaxc le temps maximum de complétude. Ces temps se retrouvent dans la liste de contraintes temporelles m_TemporalConstraints de TConstrainedPrioritiesTimes. Nous considérons dans cette section que la priorité utilisée est la priorité de base de l’objectif augmentée du modificateur de priorité défini pour chaque temps. Par contre, dans le système, ce sont seulement des modificateurs de priorité qui sont contenus dans m_Priorities. Ceci ne change rien dans la nature des calculs qui sont effectués, car la courbe est tout simplement décalée vers le bas, suivant la priorité de base. IV.7.5.2 – Interprétation des contraintes temporelles Afin de mieux comprendre l’impact des contraintes temporelles, nous allons expliciter celles-ci plus en détail. Tout d’abord, nous avons tmins, cette contrainte permet d’empêcher que l’objectif soit actif avant ce temps minimum de sélection. L’objectif pourra ainsi seulement devenir actif lorsqu’une règle s’applique et que le temps courant (tc) est plus grand ou égal à tmins. Si tmins n’est pas défini, l’objectif sera actif dès qu’une règle d’activation s’applique. La contrainte tds permet simplement de mettre l’emphase sur le temps désiré de sélection dans le calcul de priorité. À cet instant, la priorité atteint prds, ce qui indique qu’il devient important d’entreprendre l’objectif avant qu’il soit trop tard. L’atteinte de cette contrainte marque donc un changement dans la courbe d’évolution de la priorité. La contrainte tmaxs permet de mettre une contrainte sur le passage d’actif à en cours d’un objectif. Cette contrainte peut servir à représenter le fait qu’il est inutile d’entreprendre un objectif après ce temps, soit parce qu’il s’avère impossible de l’atteindre
    • 136 dans le temps restant, soit pour fixer le temps auquel nous désirons que l’objectif atteigne sa priorité maximum de sélection, ou pour toutes autres bonnes raisons. Nous allons maintenant expliciter les contraintes temporelles de complétude. Nous avons une contrainte sur le temps minimum auquel un objectif peut être atteint ou non- atteint, tminc. Cette contrainte indique qu’il est impossible d’accomplir l’objectif avant ce temps et cela même lorsque l’action associée est complétée avant ce temps. La contrainte sur le temps désiré de complétude, tdc est similaire à celle d’activation. Elle permet d'atteindre la priorité désirée de complétude de l'objectif au temps auquel l'agent désire que l’objectif s’accomplisse. Finalement, il y a une dernière contrainte sur la complétude qui porte sur le temps maximum de complétude, tmaxc. Cette contrainte indique le temps maximum pour accomplir l’objectif, qui tombera à l’état non-atteint à l’instant suivant. En résumé, un objectif ne peut pas passer à l'état actif avant tmins, il passera donc à l'état actif seulement à l'instant précis ou après tmins, lorsqu'une règle d'activation s'applique. Ensuite, l'objectif peut passer à l'état en cours à partir de l'état actif jusqu'à l'atteinte de la contrainte tmaxs. Si l'objectif ne passe pas à l'état en cours dans l'intervalle de temps [tmins, tmaxs], il tombera dans l'état non-atteint. Sinon, après avoir passé à l'état en cours, l'objectif ne peut pas être complété avant le temps tminc. Après tminc et avant tmaxc, l'objectif peut devenir atteint ou non-atteint si une règle de complétude s'applique. IV.7.5.3 – Calcul du modificateur de priorité relatif au temps Cette section présente l’évolution de la priorité en fonction des contraintes temporelles. Nous verrons les calculs nécessaires pour déterminer le modificateur de priorité relatif au temps courant pour chaque intervalle de temps délimité par les contraintes. La figure IV.17 présentait l’évolution de la priorité en fonction du temps. Nous expliquerons d’abord le cas du calcul du modificateur lorsque toutes les contraintes temporelles sont définies. Ensuite, nous verrons ce qui arrive lorsque certaines contraintes ne sont pas définies.
    • 137 Avant tmins, l'objectif n'est pas actif, c'est pourquoi aucune priorité n'est définie à ce moment. Entre tmins et tds, le modificateur de priorité suit la droite de la formule 1, de pente p1 et d'ordonnée à l'origine b1, entre tmins et tds : prc = p1 * tc + b1 où : p1 = (prds - prbs) / (tds - tmins) et : b1 = prds - (p1 * tds) Formule 1 : Calcul du modificateur de priorité entre tmins et tds Le calcul est semblable entre tds et tmaxs. Nous avons la pente p2 et l'ordonnée à l'origine b2 (entre tds et tmaxs). Le modificateur de priorité suit dans cet intervalle de temps la droite décrite par la formule 2 : prc = p2 * tc + b2 où : p2 = (prmaxs - prds) / (tmaxs - tds) et : b2 = prmaxs - (p2 * tmaxs) Formule 2 : Calcul du modificateur de priorité entre tds et tmaxs La formule 3 présente l'équation pour le calcul du modificateur de priorité qui suit encore une droite dans l'intervalle de temps [tmaxs, tminc] : prc = p3 * tc + b3 où : p3 = (prminc - prmaxs) / (tminc - tmaxs) et : b3 = prminc - (p3 * tminc) Formule 3 : Calcul du modificateur de priorité entre tmaxs et tminc La formule 4 sert au calcul du modificateur de priorité dans l'intervalle de temps [tminc, tdc] :
    • 138 prc = p4 * tc + b4 où : p4 = (prdc - prbc) / (tdc - tminc) et : b4 = prdc - (p4 * tdc) Formule 4 : Calcul du modificateur de priorité entre tminc et tdc Finalement, le modificateur de priorité suit toujours une droite pour le dernier intervalle de temps entre [tdc, tmaxc]. La formule 5 suivante présente cette droite : prc = p5 * tc + b5 où : p5 = (prmaxc - prdc) / (tmaxc - tdc) et : b5 = prmaxc - (p5 * tmaxc) Formule 5 : Calcul du modificateur de priorité entre tdc et tmaxc IV.7.5.4 – Calcul lorsque des contraintes temporelles sont indéfinies Comme nous l’avons mentionné précédemment, toutes ces contraintes ne seront pas définies pour tous les objectifs. En effet, il faut définir seulement les contraintes dont nous avons besoin selon le contexte de l’objectif. La prochaine section porte sur l’évolution du modificateur de priorité lorsque certaines contraintes temporelles ne sont pas définies. Nous définissons donc de nouvelles formules pour calculer le modificateur d’un objectif dans les intervalles de temps des contraintes définies. Lorsque la contrainte tmins n'est pas définie, l'objectif est actif dès qu'une de ses règles d'activation est validée. Le modificateur est donc nul avant l'atteinte de la première contrainte temporelle définie. Dans tous les cas pour lesquels une contrainte temporelle autre que tmins et tmaxc n'est pas définie, il suffit de calculer l'équation de la droite avec les points disponibles. Par exemple, si la contrainte tds n'est pas définie, les formules 1 et 2 sont remplacées par une seule formule qui est celle de la droite passant par (tmins, prmins) et (tmaxs, prmaxs). S'il advient que la contrainte tmaxs n'est pas définie, il suffit de prendre le point suivant pour calculer l'équation de calcul du modificateur de priorité.
    • 139 Finalement, dans le cas où tmaxc n'est pas défini, le modificateur de priorité cesse d'évoluer après la dernière contrainte temporelle définie. Le modificateur de priorité prendra donc la valeur de la priorité associée à la dernière contrainte temporelle définie. Il est à noter que dans ce cas, l'objectif ne tombera pas dans l'état non-atteint après un certain temps étant donné qu'il n'y a pas de limite de temps pour compléter l'objectif. Seules les règles de complétude permettent de compléter un tel objectif. IV.7.5.5 – Algorithme de mise à jour du modificateur de priorité La mise à jour du modificateur de priorité du temps est définie selon l’algorithme IV.1. Comme nous l’avons vue au début de la section IV.7.5, il y a une liste de six contraintes et leur priorité associée. Lorsqu’une de ces contraintes n’est pas définie, son espace réservé dans la liste est initialisé à la valeur –1, ainsi que la valeur de priorité. La pente qui permet normalement de calculer la priorité à partir de cette contrainte jusqu’à la suivante est aussi initialisée à la valeur –1. En tout temps, il faut maintenir la valeur de l’index de la prochaine contrainte temporelle définie ainsi que l’intervalle courant déterminant la dernière contrainte temporelle dépassée par le temps courant, la priorité, la pente et l’ordonnée à l’origine qui sont associées pour l’intervalle d’évolution de la priorité. Lorsque l’objectif passe à en cours, il faut vérifier si au moins une des contraintes de complétude est dépassée. Si c’est le cas, nous passons à l’intervalle de la dernière contrainte dépassée. Sinon, la priorité continue d’évoluer suivant l’intervalle courant. Lorsque l’objectif est en cours, il faut vérifier ainsi pour le dépassement des contraintes de complétude. Cette opération, qui n’est pas dans l’algorithme qui suit, permet le chevauchement entre les contraintes de sélection et de complétude. Algorithme IV.1 : Mise à jour de la priorité avec contraintes temporelles //Mettre à jour l’intervalle temporel courant en fonction de la prochaine contrainte temporelle définie. Si ((ProchaineContrainteTemporelle < 6) && (TempsCourant >= ConstraintsTemporelles[ProchaineContrainteTemporelle]))
    • 140 { IntervalleCourant = IntervalleCourant + 1; //Trouve la prochaine pente définie. //Tant que l’intervalle courant est valide et que la pente courante n’est pas définie. Tant que ((IntervalleCourant < 5) && (m[IntervalleCourant] == -1)) { IntervalleCourant = IntervalleCourant + 1; } //Met à jour ProchaineContrainteTemporelle. //Si l’index de la prochaine contrainte temporelle est égal à l’intervalle courant, il faut mettre à jour l’index. Si (ProchaineContrainteTemporelle == IntervalleCourant) { ProchaineContrainteTemporelle = ProchaineContrainteTemporelle + 1; //Trouve la prochaine contrainte temporelle définie. Tant que ((ProchaineContrainteTemporelle < 6) && (m_TemporalConstraints[ProchaineContrainteTemporelle] == -1)) { ProchaineContrainteTemporelle = ProchaineContrainteTemporelle + 1; } } } //Calcul de la priorité courante. Si ((IntervalleCourant < 5) && (TempsCourant >= m_TemporalConstraints[IntervalleCourant])) { PrioritéCourante = (m[IntervalleCourant] * TempsCourant) + b[IntervalleCourant]; }
    • 141 IV.8 – Algorithme de vérification du comportement Maintenant que nous avons fait le tour des classes du système, nous possédons les connaissances nécessaires pour comprendre son fonctionnement. Un des algorithmes les plus importants du système sert à la vérification du comportement. La vérification consiste à mettre à jour les données d’un agent pour que son comportement soit cohérent avec ses changements d’états ainsi qu’avec ceux de son environnement, qui évoluent à mesure que la simulation se déroule. La vérification s'effectue d'abord au niveau d'un agent en vérifiant le comportement pour le profil de base et le profil actif de l'agent. Au niveau des profils, chaque rôle est mis à jour, ce qui correspond à vérifier chaque arbre d'objectifs. C’est à cette étape que s’effectuent entre autres les transitions dans le cycle de vie d’un objectif. L’algorithme effectue aussi la vérification de règles d’activation et de complétude. Comme nous l’avons vue auparavant, la vérification d’une règle impose la vérification de préconditions. Les préconditions posent des inéquations sur des variables liées à un agent et à son environnement. Ceci nous amène au calcul d’éléments de formule qui permettent de référer aux différents éléments liés à un agent et à son environnement. Comme nous l’avons indiqué, les objectifs sont composés de plusieurs variables définissant l’état de l’objectif. Ces variables doivent évoluer suivant plusieurs mécanismes et interactions qui surviennent lors de la vérification du comportement. Il faut gérer l’évolution de la priorité, le cycle de vie, les référents, etc. Mais, avant tout, il faut définir l’ordre dans lequel s’effectuent ces mécanismes lors de la vérification du comportement d’un agent. La figure IV.18 montre un exemple de vérification d'un arbre d'objectifs en mettant l'emphase sur l’ordre dans lequel sont vérifiés les objectifs. Suivant cette figure, la vérification des arbres d’objectifs se fait en profondeur d’abord. Nous commençons donc par vérifier l’état de l’objectif à la racine, s’il est inactif et qu’une règle d’activation s’applique, il devient actif. Si l’objectif est actif, en cours ou suspendu sa priorité est mise à jour, et s’il est composé, il faut vérifier ses objectifs fils. Après la vérification des sous- objectifs, lorsque l'objectif est en cours ou suspendu, nous vérifions si l’objectif peut
    • 142 devenir atteint ou non-atteint par l’application d’une règle de complétude. Ensuite, si l’objectif n’est pas complété nous calculons sa priorité. 1 Objective 1 2 5 6 Objective 2 Objective 3 Objective 4 3 7 4 8 9 Objective 5 Objective 6 Objective 7 Objective 8 Objective 9 Objective 10 Objective 11 This is a fictive update example : 1- The objective 1 is verified, it is active and its priority is updated. 2- The objective 2 is verified, it is active and its priority is updated. 3- The objective 5 is verified, it is inactive, no activation rules can be applied and its priority and its children aren't updated. 4- The objective 6 is verified, it is inactive. This means that no elementary objective is active in the sub-tree of the objective 2. 5- The objective 3 is verified, it is active, its priority is updated and it can be selected for execution because it is an elementary objective. 6- The objective 4 is verified, it is active and the priority is updated. 7-8-9- The objective 7, 8 & 9 are verified, they are all active, their priority is updated and they can be selected for execution. Figure IV.18 : Ordre de mise à jour des objectifs IV.8.1 – Vérification du comportement au niveau de l’agent Maintenant que nous avons vu globalement l'algorithme de vérification, nous recommençons la boucle par la première partie de la vérification au niveau de l'agent. Cette partie est présentée dans l'algorithme IV.2 qui suit. Comme nous l'avons décrit ci- dessus, cet algorithme vérifie simplement le comportement pour le profil actif et le profil de base lorsqu'ils sont définis pour un agent. Nous voyons que le pointeur sur l’agent pour lequel le comportement est vérifié est transmis au niveau du profil de façon à permettre le partage des structures de rôle.
    • 143 Algorithme IV.2 : Vérification du comportement au niveau de l'agent VérificationComportement() { Si (un profil actif est défini) { ProfilActif VérificationComportement(ptrAgent) } Si (un profil de base est défini) { ProfilDeBase VérificationComportement(ptrAgent) } } IV.8.2 – Vérification du comportement au niveau du profil La fonction de vérification est, par la suite, appelée au niveau du profil. L'algorithme IV.3 présente comment s'effectue la vérification du comportement à ce niveau. Il s'agit tout simplement de vérifier le comportement de chaque rôle, c'est-à-dire de chaque objectif à la tête d'un arbre d'objectif. Le pointeur sur l’agent est passé en paramètre à la fonction de vérification des objectifs. De plus, l’index de données spécifique contenu dans le profil est aussi passé en paramètre de façon à ce que l’objectif considère le bon ensemble de données. Algorithme IV.3 : Vérification du comportement au niveau du profil VérificationComportement(ptrAgent) { Objectif = Obtenir premier rôle Tant que (Objectif est défini) { Objectif VérificationComportement(ptrAgent, IndexDonnées) Objectif = Obtenir prochain rôle } }
    • 144 IV.8.3 – Vérification du comportement au niveau d’un objectif La vérification du comportement au niveau du profil nous amène à la vérification au niveau d'un objectif. L’algorithme IV.4 commence par vérifier si l’objectif est désactivé. La désactivation d’un objectif n’a rien à voir avec son cycle de vie, c’est plutôt un moyen d’ignorer un objectif dans tout le processus du comportement. Ainsi, l’algorithme termine immédiatement lorsque l’objectif est désactivé. Sinon, l’algorithme continue en vérifiant si la récurrence doit être effectuée. Lorsque la récurrence se fait, l'objectif récurrent, qui était atteint ou non-atteint, retourne à l'état inactif et dans le cas d'un objectif composé, les sous- objectifs deviennent aussi inactif jusqu'au bas de l'arbre. Lorsque le compteur de fréquence est supérieur à 0, il est décrémenté et l'algorithme termine. Dans le cas contraire, si l’objectif est inactif les filtres pour la perception sont ajoutés. Les filtres de perception sont des préconditions qui servent à filtrer les agents perçus selon des critères. Lorsque l'agent perçoit, il utilise les filtres pour déterminer quels agents resteront dans sa mémoire. Ainsi, les filtres permettent à l'agent de considérer seulement les agents qui ont un certain intérêt pour lui, selon les objectifs pertinents à un moment donné. Les filtres sont détaillés dans [Perron 2003]. Ensuite, les règles d’activation sont vérifiées de façon à déterminer si l’objectif doit être activé dans la situation courante du système. À la vérification de chaque règle, l'ensemble des référents pour la règle vérifiée est passé en paramètre de façon à permettre sa mise à jour et son utilisation au niveau des règles, lorsque des référents sont fixés ou utilisés. Nous verrons dans l’algorithme IV.5 comment s’effectue la vérification d’une règle. Dans le cas où une des règles s’applique, les actions de cette règle sont exécutées et l’objectif devient actif. De plus, si l'objectif est élémentaire, il est ajouté pour la sélection, soit dans le monceau prioritaire ou dans la liste des objectifs obligatoires, dépendamment de l'objectif. Les objectifs composés ne sont pas ajoutés pour la sélection, car il est inutile de sélectionner un objectif qui ne possède pas d'action. Il est à noter que la règle qui est appliquée est la première règle applicable trouvée. Nous verrons l’exécution d’une règle dans la section IV.9.4. Dans le cas où aucune règle ne s'applique, l'algorithme termine.
    • 145 Ensuite, l’algorithme vérifie si l’objectif est actif, en cours ou suspendu. Dans le cas où l’objectif est actif et qu’il ne vient pas juste de devenir actif au début de la vérification, l’algorithme vérifie passivement la règle d’activation qui fût utilisée pour activer l’objectif. La vérification passive utilise les référents déterminés à l'activation et vérifie que ceux-ci sont toujours présents dans la source et qu'ils remplissent les préconditions de la règle. Par exemple, si un agent a faim et qu'il détermine dans sa règle d'activation qu'il va manger à un restaurant précis, il gardera le même choix de restaurant tant que l'objectif ne redevient pas inactif. Si la règle ne s’applique plus, l'objectif devient inactif et la priorité est ajustée pour enlever les modificateurs et l'algorithme termine. De plus, avant que l'algorithme termine, si l'objectif est composé, les filtres de perception des sous-objectifs sont enlevés, puisque ceux-ci ne servent plus, étant donné qu'ils deviennent eux aussi inactif. La priorité des sous-objectifs est aussi ajustée pour enlever les modificateurs de la règle d'activation. De plus, tous les objectifs élémentaires touchés par cette opération sont enlevés de la sélection. Par exemple, si l'agent sait qu'il est rendu trop tard et que le restaurant a eu le temps de fermer avant que l'agent décide d'entreprendre l'objectif, ce dernier deviendra inactif. L'agent pourra alors déterminer un nouveau restaurant en tentant de réactiver l'objectif. Lorsque l’algorithme continue, l'objectif est alors actif et sa priorité est mise à jour selon les modificateurs déterminés par la règle. Rendus à ce point, nous sommes certains que l’objectif ne redeviendra pas inactif. La priorité de l'objectif est mise à jour suivant les contraintes temporelles et les autres facteurs modificateurs. Si l’objectif est composé, c’est le temps de vérifier tous les sous- objectifs, en suivant le même algorithme. Par contre, si l’objectif est élémentaire, cette étape est tout simplement absente de l’algorithme. Suivant la vérification des sous- objectifs, il est possible que des sous-objectifs soient devenus atteint ou non-atteint, ce qui pourrait rendre l’objectif atteint ou non-atteint, selon les règles de complétude. Les règles de complétude sont alors vérifiées si l'objectif n'est pas actif et si une de ses règles s’applique, ses actions sont exécutées, entraînant par le fait même la complétude de l’objectif qui devient atteint ou non-atteint. Si l'objectif est élémentaire, il est enlevé de la sélection. Finalement, l’algorithme termine.
    • 146 Algorithme IV.4 : Vérification d’un arbre d’objectifs VérificationComportement(ptrAgent, IndexDonnées) //IndexDonnées est utilisé pour relier l’agent à ses données { // pour l’objectif en question. Si (l’objectif n’est pas désactivé par l’usager) { Si (la fréquence est 0 ou -1) //La récurrence peut être faite (le compteur à atteint 0) { //ou la fréquence est ignorée (-1) Si (l'objectif est atteint ou non-atteint) { Si (l'objectif est récurrent) { Appliquer la récurrence } } estActivéCeTour = faux Si (l’objectif est inactif ) { Si (les filtres n'ont pas été ajoutés) { Ajouter les filtres pour la perception } Vérifier les règles d’activation Si (au moins une règle s’applique) { estActivéCeTour = vrai Exécuter les actions de la règle L’objectif devient actif Si (l'objectif est élémentaire) { Ajouter l'objectif dans la sélection } } Sinon { Retour }
    • 147 } Si (l’objectif est actif ou en cours ou suspendu) { Si ((l’objectif est actif) ET (estActivéCeTour == faux)) { Si (Vérifier passivement la règle d’activation == faux) { Si (l'objectif est composé) { Rendre l'objectif et ses sous-objectifs inactif Modifier la priorité de l'objectif et de ses sous- objectifs pour enlever les modificateur de la règle Enlever les filtres de perception des sous-objectifs } Si (l'objectif est élémentaire) { L'objectif devient inactif Modifier la priorité de l'objectif pour enlever les modificateurs de la règle } Retour } } Mettre à jour la priorité en fonction de la règle utilisée pour l'activation Mettre à jour la priorité //Les modificateurs sont additionnés pour donner la priorité totale Si (l’objectif est composé) //Polymorphisme : cette condition montre en fait que { // cette partie de l’algorithme n’est pas présent dans // la fonction de vérification des objectifs // élémentaires. Pour chaque sous-objectif de l’objectif courant { Obj VérificationComportement() }
    • 148 } Si (l'objectif n'est pas actif) { Si (Vérifier les règles de complétude == vrai) { Si (l'objectif est élémentaire) { Enlever l'objectif de la sélection } Retour } } Retour } } Sinon //La fréquence est > 0 la récurrence a été effectuée. { Décrémenter la fréquence } } Retour } IV.8.4 – Vérification du comportement au niveau d’une règle Nous avons vu que la vérification d’un objectif impliquait la vérification de règles d’activation et de complétude. Peu importe le type de règle, la vérification s’effectue suivant le même algorithme. L’algorithme IV.5 présente la vérification des règles. Premièrement, il est évident qu'une règle sans précondition n'a besoin d'aucune condition à son application. Pour suivre ce raisonnement, l'algorithme retourne vrai immédiatement si une règle qui ne comporte aucune précondition est vérifiée. Avant de commencer à vérifier les précondition, il faut fixer les éventuels référents qui sont nécessaires à la vérification des préconditions. Ces référents sont déterminés par la table de référence qui permet de fixer les référents pour les préconditions qui nécessitent une source de référents externe.
    • 149 Pour chaque élément de la table de référence, l'algorithme vérifie la source de référents qui peut être la perception, la mémoire, un message ou l'entourage de l'agent. Selon la source, nous obtenons un référent potentiel de différentes façons. Pour la perception et la mémoire, nous obtenons un référent directement de la mémoire de perception ou de la mémoire à long terme en utilisant un filtre. Lorsque la source est un message, nous obtenons le message par son identifiant et le référent est l'expéditeur ou un agent qui est concerné par le message. Dans le cas où la source est l'entourage de l'agent, une précondition est utilisée pour filtrer les agents entourant l'agent dans un certain rayon via l'état de localisation. Les agents passant ce filtre sont les référents potentiels. Si la source ne peut pas fournir de référent, la vérification retourne faux puisqu'il n'y a pas de référent qui peut permettre la vérification de la précondition qui nécessite un référent. Après avoir fixé les référents, l'algorithme peut passer à la vérification des préconditions. Lorsque la vérification d'une précondition est positive et que la précondition vérifiée sert à fixer un référent, il faut fixer les référents dont la précondition vérifiée est la source. Ainsi, un référent est fixé pour chaque élément de la table de référence permettant de passer le référent de la précondition vérifiée à une autre. Par contre, si la vérification d'une précondition est négative et que cette précondition ne peut pas être vérifiée à plusieurs reprises, l'algorithme retourne faux. Sinon, si la précondition peut être vérifiée plusieurs fois, cela signifie qu'il faut obtenir un nouveau référent et vérifier l'ensemble des préconditions de nouveau. La table de référence provenant d'une source est alors parcourue de nouveau pour déterminer ces référents. Suivant cet algorithme, lorsqu'une précondition nécessite un référent d'une source ou d'une précondition et que la vérification est négative, l'ensemble des préconditions est revérifié si la précondition dont la vérification est négative peut être vérifiée à plusieurs reprises. Pour être vérifiées à plusieurs reprises, les préconditions d'une règle utilisant les référents doivent être à vérifications multiples. Cela suppose que les préconditions peuvent obtenir un ou plusieurs référents à chaque vérification. C'est-à-dire qu'il y a au moins une source externe pour alimenter l'algorithme en référents. Algorithme IV.5 : Vérification d’une règle
    • 150 VérifierToutesPréConditions(ptrAgent, ListeDeRéférents) { Si (Le nombre de préconditions > 0) { indexRéférentCourant = 0 Si (La table de référence provenant d’une source n’est pas vide) { Pour chaque élément de la table de référence provenant d’une source { Si (La source de référent est la perception) { référentPotentiel = Obtenir référent à indexRéférentCourant de la perception Si (référentPotentiel est nul) { Retour faux } Fixer le référent suivant les index de l’élément de la table à référentPotentiel } Sinon si (La source de référent est un message) { message = Obtenir le message source Si (message n’est pas nul) { Fixer le référent suivant les index de l’élément de la table à message->Expéditeur ou message->Cible //selon l’index de la source } Sinon { Retour faux } } Sinon si (La source de référent est l’environnement immédiat de l’agent) {
    • 151 référentsPotentiels = Obtenir les agents environnant qui remplisse la précondition filtre Si (la liste référentsPotentiels n’est pas vide) { Fixer le référent suivant les index de l’élément de la table à RéférentsPotentiels- >Élément(indexRéférentCourant) } Sinon { Retour faux } } } } Pour chaque precondition { Si (precondition->VérifierPréCondition(ptrAgent, Référent1, Référent2) == faux) { indexRéférentCourant++ Si (precondition n’est pas à vérifier plusieurs fois) { Retour faux } Sinon { Si (la table de référence provenant d’une source est vide) { Retour faux } Pour chaque élément de la table de référence provenant d’une source { Si (La source de référent est la perception) { référentPotentiel = Obtenir référent à indexRéférentCourant de la perception Si (référentPotentiel est nul)
    • 152 { Retour faux } Fixer le référent suivant les index de l’élément de la table à référentPotentiel } Sinon si (La source de référent est l’environnement immédiat de l’agent) { référentsPotentiels = Obtenir les agents environnant qui remplisse la précondition filtre Si (la liste référentsPotentiels n’est pas vide) { Fixer le référent suivant les index de l’élément de la table à RéférentsPotentiels-> Élément(indexRéférentCourant) } Sinon { Retour faux } } } Recommencer la vérification des préconditions au début (Pour chaque) } } Sinon si (précondition sert à fixer un référent) { Pour chaque élément de la table référence de précondition à précondition { Si (la source est la précondition courante) { Fixer le référent suivant les index de l’élément de la table } } } }
    • 153 Si (la référence pour le modificateur d’intensité est fixé) { Obtenir le modificateur d’intensité de l’état dynamique référé pour l’agent ptrAgent } Retour vrai } Sinon //Il n’y a pas de precondition à vérifier pour appliquer la règle. { Retour vrai } } IV.8.5 – Vérification du comportement au niveau d’une précondition Après la vérification des règles, nous descendons au niveau d’une précondition. La vérification d’une précondition est très simple. L’algorithme IV.6 montre que l’inéquation entre les deux membres de la précondition, les éléments de formule, s’effectue suivant l’opérateur défini. Les opérateurs définis sont : égal, différent, plus grand, plus grand ou égal, plus petit, plus petit ou égal, égal pour la chaîne de caractères et différent pour la chaîne de caractères. Algorithme IV.6 : Vérification du comportement au niveau d’une précondition VérifierPreCondition(ptrAgent, Referent1, Referent2) { Si (Opérateur est égal) { Retour (PremierMembre->CalculerFormule() == DeuxièmeMembre->CalculerFormule()) } Sinon si (Opérateur est différent) { Retour (PremierMembre->CalculerFormule() != DeuxièmeMembre->CalculerFormule()) } Sinon si (Opérateur est plus grand) { Retour (PremierMembre->CalculerFormule() > DeuxièmeMembre->CalculerFormule()) } Sinon si (Opérateur est plus grand ou égal)
    • 154 { Retour (PremierMembre->CalculerFormule() >= DeuxièmeMembre->CalculerFormule()) } Sinon si (Opérateur est plus petit) { Retour (PremierMembre->CalculerFormule() < DeuxièmeMembre->CalculerFormule()) } Sinon si (Opérateur est plus petit ou égal) { Retour (PremierMembre->CalculerFormule() <= DeuxièmeMembre->CalculerFormule()) } Sinon si (Opérateur est égal chaîne de caractère) { Retour (PremierMembre->CalculerFormuleChaine() == DeuxièmeMembre- >CalculerFormuleChaine()) } Sinon si (Opérateur est différent chaîne de caractère) { Retour (PremierMembre->CalculerFormuleChaine() != DeuxièmeMembre->CalculerFormuleChaine()) } } IV.8.6 – Calcul d’un élément de formule Ceci nous amène à l’algorithme IV.7 qui se situe au dernier niveau de la vérification, dans les éléments de formule. L’algorithme commence par vérifier le type d’élément de formule pour savoir ce qu’il doit faire. Lorsque l’élément de formule est de type variable, l’algorithme vérifie si l’élément de formule cible l’agent pour lequel se fait le calcul ou un référent et appelle la fonction permettant d’obtenir la valeur référée pour le bon agent. Cette fonction se comporte différemment suivant les niveaux de référence passés en paramètres. Au niveau de l’agent, la fonction détermine si elle doit atteindre un état de l’agent ou encore une variable liée au profil ou aux objectifs, comme la valeur courante du cycle de vie. Lorsque l’élément de formule est de type nombre réel, il n’est pas nécessaire d’obtenir une valeur chez un agent puisque la valeur retournée est contenue directement dans l’élément de formule. Pour un élément de formule de type nœud, les deux éléments de formule membres du nœud sont calculés en appelant la même fonction récursivement jusqu’à l’atteinte des feuilles de l’arbre d’éléments de formule. Après le calcul des feuilles, l’algorithme applique l’opérateur du nœud aux résultats des deux calculs. Un nœud dont l’opérateur est « générer
    • 155 un nombre aléatoire » permet d’obtenir un nombre pseudo-aléatoire entre un minimum et un maximum qui sont respectivement le membre de gauche et le membre de droite. Cette possibilité est très intéressante puisqu’elle permet d’introduire un facteur aléatoire dans le comportement des agents. De plus, le fait que des éléments de formule définissent les bornes du nombre aléatoire nous permet d’obtenir un nombre aléatoire suivant les états de l’agent ou de simples nombres réels. Algorithme IV.7 : Calcul des éléments de formule CalculerFormule(ptrAgent, Référent) { Si (Type est feuille variable) { Si (TypeAgent est soi-même) { Retour ptrAgent->ObtenirValeur(NiveauRéférence1, NiveauRéférence2, NiveauRéférence3) } Sinon si (Référent n’est pas nul) { Retour Référent->ObtenirValeur(NiveauRéférence1, NiveauRéférence2, NiveauRéférence3) } } Sinon si (Type est feuille nombre réel) { Retour NombreRéel } Sinon si (Type est nœud) { membreGauche = MembreGauche->CalculerFormule(ptrAgent, Référent) membreDroite = MembreDroite->CalculerFormule(ptrAgent, Référent) Si (Opérateur est +) { résultat = membreGauche + membreDroite } Sinon si (Opérateur est -) { résultat = membreGauche - membreDroite } Sinon si (Opérateur est *) { résultat = membreGauche * membreDroite } Sinon si (Opérateur est /) { résultat = membreGauche / membreDroite } Sinon si (Opérateur est |-|)
    • 156 { résultat = |membreGauche - membreDroite| } Sinon si (Opérateur est générer un nombre aléatoire) { résultat = GénérerNombreAléatoire(membreGauche, membreDroite) //membreGauche est le minimum et membreDroite est le maximum. } Retour résultat } }
    • 157 IV.9 – Sélection et d’exécution du comportement Suivant la vérification du comportement, un agent est en mesure de choisir et d’adopter un comportement selon les objectifs possibles. La sélection d’un objectif fait passer celui-ci d’actif à en cours. Les parents de cet objectif passent aussi à en cours. La priorité représente l’importance pour un agent d’entreprendre ou de continuer un objectif à un instant donné. La priorité est donc le facteur déterminant qui permet de choisir le comportement d’un agent à un instant donné. L’objectif sélectionné à un instant donné de la simulation est celui parmi les objectifs sélectionnables dont la priorité est la plus élevée. Les objectifs nécessitent l’exclusivité d’exécution, nous pouvons en exécuter qu’un seul à la fois, sauf pour les objectifs obligatoires. S’il advient que plusieurs objectifs aient la plus forte priorité, un seul d’entre eux est choisi. IV.9.1 – Sélection et exécution au niveau de l’agent L'algorithme IV.8 permet la sélection de l’objectif prioritaire en utilisant un monceau prioritaire. Il commence par mettre à jour le monceau prioritaire des profils de l'agent. Après la vérification, la priorité des objectifs élémentaires sélectionnables a été mise à jour, ce qui rend nécessaire la mise à jour des monceaux afin de sélectionner l'objectif qui est prioritaire à cet instant précis. Ensuite, l’objectif prioritaire du profil prioritaire est sélectionné et exécuté en plus des objectifs obligatoires des deux profils. Algorithme IV.8 : Exécution du comportement au niveau de l'agent ExécuteComportement() { Mettre à jour le monceau prioritaire du profil actif et du profil de base. Sélectionner du profil prioritaire Sélectionner de l'objectif prioritaire du profil prioritaire Si (le profil prioritaire est le profil de base) { //Exécuter l'objectif prioritaire et les objectifs obligatoires du profil de base. ProfilDeBase Exécute(IdObjectif, ptrAgent) //IdObjectif est le id de l'objectif prioritaire
    • 158 //ptrAgent pointe sur l'agent pour lequel le comportement est vérifié. Si (le profil actif est défini) { //Exécuter les objectifs obligatoires du profil actif. ProfilActif Exécute(-1, ptrAgent) } } Sinon si (le profil actif est défini) { //Exécuter l'objectif prioritaire et les objectifs obligatoires du profil actif ProfilActif Exécute(IdObjectif, ptrAgent) Si (le profil de base est défini) { //Exécuter les objectifs obligatoires du profil de base ProfilDeBase Exécute(-1, ptrAgent) } } } IV.9.2 – Exécution au niveau du profil L'algorithme IV.9 montre que si l'identifiant de l'objectif passé en paramètre est défini, cet objectif est exécuté pour l'agent pour lequel s'effectue l'exécution, avec son propre ensemble de données spécifiques dont l'index est fixé avant l'exécution. Ensuite, les objectifs obligatoires sont tous exécutés. Algorithme IV.9 : Exécution du comportement au niveau du profil Exécute(IdObjective, ptrAgent) { Si (IdObjectif != -1) { Objectif = Obtenir l'objectif avec l'identifiant IdObjectif Objectif FixerIndexDonnéesSpécifiques(Obtenir l'index de données spécifique pour le rôle de l'objectif) Objectif Exécute(ptrAgent) } //Exécuter tous les objectifs obligatoires. Objectif = Obtenir premier objectif obligatoire Tant que (Objectif est défini) { Objectif FixerIndexDonnéesSpécifiques(Obtenir l'index de données spécifique pour le rôle de l'objectif) Objectif Exécute(ptrAgent) Objectif = Obtenir prochain objectif }
    • 159 } IV.9.3 – Exécution au niveau d’un objectif L’exécution d’un objectif est beaucoup plus simple que sa vérification. L’algorithme IV.10 montre que l’exécution, contrairement à la vérification, commence au niveau des feuilles d’un l’arbre d’objectifs. L’algorithme commence par vérifier si l’objectif est vraiment exécutable, en vérifiant que l’objectif est actif. En effet, un objectif sera exécuté seulement lorsqu’il est actif. L’objectif actif devient en cours lors de son exécution et les actions doivent être exécutées une seule fois, au moment de ce changement, ce qui explique pourquoi l’objectif en cours n’est pas exécuté. Si l’objectif est actif, nous obtenons l’index de la règle qui fut utilisée à l’activation afin de fixer les référents relatifs à cette règle. Ces référents serviront pour les actions de l’objectif, les règles de complétude, ou encore pour des objectifs externes. Si l’objectif possède un parent, son index de données spécifique est fixé et l’objectif parent est exécuté. L’exécution se continue jusqu’à la racine. L’exécution d’un objectif composé n’exécutera pas d’action, car il n’y en a pas pour ce type d’objectif. Par conséquent, pour les objectifs composés, l’algorithme fixe simplement les référents. Au retour de l’exécution des parents jusqu’à la racine, les filtres de perception sont enlevés et ceux utilisés pour la complétude de l’objectif sont ajoutés. L’objectif devient alors en cours et le temps de sélection est fixé. Puis, les actions de l’objectif sont exécutées avec leurs référents. Après l’exécution des actions qui modifient les états de l’agent et de son environnement, il se peut que l’agent ait instantanément complété l’objectif en remplissant les préconditions nécessaires aux règles de complétude. Celles-ci sont donc vérifiées et si une d’elle s’applique, l’objectif devient soit atteint ou non-atteint, selon l’action de la règle. Par conséquent, l’objectif est enlevé de la sélection. Après l’exécution des actions et la complétude potentielle de l’objectif, il est possible qu’un des parents de l’objectif soit complété. L’index de données spécifique est fixé pour le parent, puis les règles de complétude de celui-ci sont vérifiées, ainsi que celles des ancêtres de l’objectif jusqu’à la racine de l’arbre d’objectifs. Si un des parents est atteint, l’objectif est enlevé de la sélection.
    • 160 Algorithme IV.10 : Exécution du comportement au niveau d’un objectif Exécute(ptrAgent) { Si (l’objectif est actif) { Obtenir l’index de la règle d’activation //Celle qui a servit à l’activation. Pour chaque élément de la table de référence de l’objectif { Si (la source est la règle d’activation) { Obtenir l’identifiant de l’objectif cible. Si (l’identifiant == l’identifiant de l’objectif courant) { Obtenir le référent de la source et fixer la cible } Sinon { Obtenir l’objectif cible du bon profil Fixer l’index de données de l’objectif cible Obtenir le référent de la source et fixer la cible dans l’objectif cible } } } Si (l’objectif possède un objectif parent) { Fixer l’index de données de l’objectif parent Exécute l’objectif parent } Enlever les filtres de perception Ajouter les filtres de perception pour la complétion L’objectif devient en cours Fixer le temps de sélection Pour chaque action de l’objectif { Exécuter l’action avec ses référents } Si (la vérification des règles de complétude == vrai) { Enlever l’objectif de la selection } Si (l’objectif possède un objectif parent) { Fixer l’index de données de l’objectif parent Si (Vérifier les règles de complétude du parent jusqu’à la racine == vrai) { Enlever l’objectif et ses sous-objectifs de la sélection } } } }
    • 161 IV.9.4 – Exécution d’une règle L’exécution d’une règle ne survient pas au cours de l’exécution d’un objectif à moins que la vérification des règles de complétude nous amène à trouver une règle qui s’applique, auquel cas elle sera exécutée. Sinon, l’exécution d’une règle se produit à la vérification du comportement lorsque l’objectif passe de actif à en cours, pour les règles d’activation, ou lorsque l’objectif doit passer à atteint ou non-atteint. L’exécution d’une règle se résume à fixer les référents pour l’action à partir de la table de fixage des référents pour les actions de la règle et à l’exécution des actions de la règle.
    • 162 IV.10 – Conclusion Pour conclure, nous avons exploré les quatre modules de MAGS qui contiennent les classes définissant les agents, leurs états et leurs comportements. Nous avons étudié comment les objectifs liés aux profils des agents leur permettent d’adopter différents comportements suivant leurs états et leur environnement. Nous avons étudié comment les référents et le mécanisme de référence permettent à l’agent de réfléchir à propos des autres agents de l’environnement. Aussi, nous avons vu qu’il est possible de définir des contraintes temporelles pour certains objectifs, ce qui permet de faire évoluer sa priorité dans le temps. Après avoir examiné les différentes classes, nous nous sommes intéressés à leur implication au niveau de la vérification, de la sélection et de l’exécution du comportement. Avec toutes ces notions, nous sommes en mesure de mieux comprendre le modèle de comportement et d’apprécier un exemple concret. Cet exemple de scénario porte sur un phénomène de foule qui a été défini et simulé avec le modèle implanté. Le chapitre V présente cet exemple en détail.
    • Chapitre V Application à un phénomène de foule
    • 165 V.1 – Mise en situation Ce chapitre décrit un exemple d’application à un phénomène de foule du modèle implanté. Le phénomène simulé par cette application est celui des amuseurs publics qui donnent des spectacles de rue et les attroupements de la foule qui observent ces spectacles. Nous avons donc le profil d’amuseur public et celui du spectateur. L’environnement utilisé pour la simulation est une portion de la ville de Québec dans laquelle nous avons identifié différentes zones contenant des points de présentation où les amuseurs publics présentent leurs spectacles. Un profil de base vient aussi s’ajouter aux deux autres afin de permettre aux agents de se déplacer dans la ville. Afin de démontrer les possibilités qu'offre MAGS, nous allons détailler les rôles de chaque profil. Nous commençons par définir les données nécessaires à la simulation. En second lieu, nous spécifions les objectifs pour chacun des rôles des agents. Ensuite, nous donnons les détails techniques des objectifs suivant un modèle de spécification pour montrer comment les comportements décrits se traduisent dans le système. Puis, nous présentons le déroulement de la simulation pour présenter les résultats obtenus pour cette première application du modèle développé.
    • 166 V.2 – Données nécessaires Tout d’abord, les agents doivent avoir différents états dynamiques afin de leur permettre d’adopter les comportements définis, suivant leurs besoins dont l’intensité augmente avec le temps. Pour cet exemple, il y a trois états dynamiques qui agissent sur le comportement des agents. Nous avons le besoin de se déplacer, le besoin d’argent et le besoin de se divertir. Le premier est associé au comportement de base des agents qui se déplacent dans la ville lorsque ce besoin se fait sentir. Nous pouvons voir le besoin de se déplacer comment étant l’ensemble des besoins qui poussent un agent à se déplacer pour différentes raisons. C’est en quelque sorte une façon de simplifier la simulation pour ne pas avoir à simuler chacun des besoins et des endroits et des moyens pour satisfaire ces besoins. Le besoin d’argent est utilisé chez les amuseurs publics pour déterminer quand ils donneront leur spectacle. Le dernier besoin permet aux agents d’assister à un spectacle lorsqu’ils ressentent le besoin de se divertir. Comme nous l’avons mentionné précédemment, nous avons identifié des zones ainsi que des points de présentation où les amuseurs publics présentent leurs spectacles. Pour que nos agents puissent reconnaître et utiliser ces éléments, ceux-ci doivent aussi être des agents. Une zone est un agent objet simple, qui possède comme caractéristique spécifique de faire partie du groupe des zones et qui couvre une certaine surface. Un point de présentation est un agent objet qui fait partie du groupe des points de présentation et qui possède une variable statique permettant de savoir s’il est disponible ou non. Maintenant que ces données sont définies, nous pouvons passer à la définition des objectifs des agents.
    • 167 V.3 – Description des objectifs La figure V.1 présente le premier rôle, l’objectif 1, permettant aux agents de se déplacer d’une façon simple et aléatoire. L’objectif 1 rassemble simplement les deux sous objectifs afin de former le rôle. L’objectif 1.1 permet aux agents de choisir une nouvelle destination lorsque le besoin de se déplacer est plus grand qu’un certain seuil. Pour des fins de simplification, cet objectif est utilisé pour éviter d’avoir à modéliser chaque déplacement des agents en fonction de chacun de leurs besoins. En d’autres mots, nous considérons qu’un agent peut avoir envie de se déplacer pour diverses raisons qui dépassent les limites de cette simulation. Ainsi, lorsque l’agent n’a pas de destination de fixée et qu’il a envie de se déplacer, l’objectif 1.1 devient actif. Puis, s’il est sélectionné, l’agent choisit une destination et s’y déplace. L’objectif est tout de suite atteint ou non-atteint suivant qu’une destination est fixée ou non. Il est à noter que le déplacement entre la position courante de l’agent et le point choisi est entièrement contrôlé par la couche de navigation. Objectif 1 : S'être déplacé vers une destination Règle d'activation : Aucune précondition, toujours actif. Règle de complétude : Jamais complété. Objectif 1.1 : Avoir choisi une destination Objectif 1.2 : Avoir géré l'envie de se Règle d'activation : Si la destination n'est pas déplacer fixée & que le besoin de se déplacer > seuil 1. Règle d'activation : Si la destination est fixée Action : Choisir une destination. (l'agent est en mouvement). Règles de complétude : Si la destination est Action : Réduire le besoin de se déplacer. fixée, alors l'objectif 1.1 est atteint. Règle de complétude : Aucune précondition, OU l'objectif 1.2 est atteint. Si la destination n'est pas fixée, alors l'objectif Est_Récurrent suivant une fréquence 1.1 est non-atteint. Est_Récurrent suivant une fréquence Figure V.1 : Résumé du rôle qui permet aux agents de se déplacer L’objectif 1.2 sert à gérer l’envie de se déplacer d’un agent. Cet objectif est une obligation, c’est-à-dire qu’il ne passe pas par le processus de sélection avant son exécution, car il s’exécute obligatoirement indépendamment des autres objectifs. En effet, pour être
    • 168 cohérent, l’objectif doit permettre de réduire la valeur courante du besoin de se déplacer de l’agent indépendamment de la raison pour laquelle il se déplace. Un agent qui reste sur place finira donc par avoir une forte envie de se déplacer, car le besoin de se déplacer augmente avec le temps. Par la suite, lorsque l’agent se déplace son besoin diminuera avec la distance qu’il aura parcourue. Objectif 2 : Avoir donné un spectacle de rue Règle d'activation : Si le besoin d'argent > seuil 1. Règle de complétude : Si l'objectif 2.4 est atteint, alors choisir une destination et l'objectif 2 est atteint. Est_Récurrent suivant une fréquence Objectif 2.1 : Avoir fixé la destination de la Objectif 2.2 : Avoir attiré des spectateurs présentation Règle d'activation : Si l'objectif 2.1 est atteint Règle d'activation : Aucune précondition, & l'agent est suffisamment près de la l'objectif devient actif à l'activation de l'objectif destination de la présentation X & que 2. l’objectif 2.3 n’est pas actif, en cours ou Action : Explorer une zone de présentation. atteint. Règle de complétude : Si l'agent perçoit un Actions : Envoyer un message pour attirer des point de présentation X libre, alors se rendre au passants près du point de présentation X. point de présentation X, mettre le point de Règles de complétude : Si l'agent n'est pas présentation X non-disponible et l'objectif 2.1 suffisamment entouré de spectateurs, alors est atteint. l'objectif 2.2 est non-atteint. OU Objectif 2.3 : Avoir terminé le spectacle Si l'agent est suffisamment entouré de Règle d'activation : Si l'objectif 2.2 est atteint. spectateurs, alors l'objectif 2.2 est atteint. Action : Donner le spectacle. Est_Récurrent suivant une fréquence et une Durée : 15 minutes limite de temps Règle de complétude : Si le temps écoulé est plus grand ou égal à la durée de l'objectif, alors l'objectif 2.3 est atteint. Objectif 2.4 : Avoir ramassé de l'argent Règle d'activation : Si l'objectif 2.3 est atteint. Action : Envoyer un message qui demande de payer pour le spectacle aux agents spectateurs. Mettre le point de présentation X disponible. Règle de complétude : Si l'agent n'est pas suffisamment entouré de spectateurs, alors le besoin d'argent diminue et l'objectif 2.4 est atteint. Figure V.2 : Résumé du rôle qui permet à un amuseur public de donner un spectacle Le prochain rôle fut inspiré de l’environnement urbain du Vieux Québec où nous pouvons souvent assister à des spectacles de rue qui sont donnés par des amuseurs publics. Ce type d’événement est intéressant comme exemple, puisqu’il permet de traiter d’un
    • 169 exemple d’attroupement. La figure V.2 présente les objectifs d’un amuseur public. L’objectif 2 s’active lorsque l’amuseur public a besoin d’argent. Pour éviter des comportements trop complexes sur la dépense d’argent, nous associerons le besoin d’argent à un état dynamique dont la valeur courante augmente avec le temps. L’objectif 2.1 commence par l’exploration d’une zone de présentation, permettant ainsi à un amuseur public de trouver un point de présentation libre. Ensuite, suivant l’objectif 2.2, l’amuseur public tente d’attirer des passants qui sont près de lui, en leur envoyant des messages tant qu’il ne commence pas son spectacle. Lorsque l’agent est entouré de suffisamment de spectateurs, l’objectif 2.2 devient atteint ce qui permet d’arrêter la récurrence de ce dernier par l’activation de l’objectif 2.3. L’agent présente alors son spectacle qui dure 15 minutes. Finalement, l’objectif 2.4 lui permet de demander aux spectateurs de le payer. Suite à la définition du rôle d’amuseur public, il faut définir le rôle de spectateur. La figure V.3 résume les objectifs de ce rôle qui permet aux agents d’assister à un spectacle. L’objectif 3 sera actif si l’agent a envie de se divertir. Advenant cette éventualité, l’agent se rendra dans une zone de présentation, à la recherche d’un amuseur public. L’agent peut alors être attiré par un spectacle qui est déjà commencé ou par un message qu’il reçoit d’un amuseur public, entraînant ainsi l’activation de l’objectif 3.1. Il s’approchera du spectacle et l’observera jusqu’à la complétude de l’objectif 3.2 ou jusqu’à ce qu’il ait autre chose de plus important à faire. L’objectif 3.3 permet de faire descendre la valeur du besoin de se divertir à mesure que le spectacle se déroule, de façon à simuler l’appréciation du spectateur. À la fin, l’objectif 3.4 permet à l’agent de payer le spectacle s’il s’est bien diverti et qu’il possède assez d’argent. Nous remarquons que l’objectif 3 possède plusieurs règles de complétudes. Celles-ci sont nécessaires afin de rendre le paiement facultatif. Sans ces précautions, l’objectif 3 ne serait jamais atteint lorsque l’objectif 3.2 est atteint et que l’agent ne désire pas payer.
    • 170 Objectif 3 : Avoir assisté à un spectacle de rue Règle d'activation : Si le besoin de se divertir > seuil 1. Règles de complétude : Si l'objectif 3.4 est atteint, alors choisir une destination et l'objectif 3 est atteint. OU Si l'objectif 3.2 est non-atteint, alors choisir une destination et l'objectif 3 est non-atteint. OU Si l'objectif 3.2 est atteint & le besoin de se divertir >= seuil 2, alors choisir une destination et l'objectif 3 est atteint. OU Si l'objectif 3.2 est atteint & que l’agent ne possède pas assez d’argent, alors choisir une destination et l'objectif 3 est atteint. Est_Récurrent suivant un fréquence Objectif 3.1 : Être attiré par un amuseur Objectif 3.2 : Avoir observé le spectacle public assez longtemps Règles d’activation : Si un message d’un Règle d'activation : Si l’objectif 3.1 est agent qui demande d'assister à un spectacle à atteint. un point de présentation X est reçu. Actions : Observer le spectacle. OU Règles de complétude : Si le point de Si l'agent perçoit un point de présentation X présentation X est libre & que le temps occupé. d’exécution de l’objectif 3.2 est plus grand que Action : Fixer la destination au point de 5 minutes, alors l'objectif 3.2 est atteint. présentation X. OU Règle de complétude : Aucune précondition, Si le point de présentation X est libre & que le l'objectif 3.1 est atteint. temps d’exécution de l’objectif 3.2 est plus petit que 5 minutes, alors l'objectif 3.2 est non- atteint. Objectif 3.3 : Avoir géré le besoin de se divertir Objectif 3.4 : Payer un spectacle Règle d'activation : Si l’objectif 3.2 est en Règle d'activation : Si l'agent reçoit un cours. message d’un agent X demandant de payer Action : Diminuer le besoin de se divertir. pour le spectacle & que le besoin de se divertir Règle de complétude : Aucune précondition, < seuil 2 & que l'agent possède assez d'argent. l'objectif 3.3 est atteint après l'exécution de Action : Payer pour le spectacle à l’agent X. l’action. Règle de complétude : Aucune précondition, Est_Récurrent suivant une fréquence l'objectif 3.4 est atteint. Figure V.3 : Résumé du rôle du spectateur Maintenant que tous les objectifs sont décrits textuellement, nous sommes en mesure d’aborder une description technique de ceux-ci qui nous permettra de mieux comprendre le fonctionnement du système. La section suivante donne cette description. Le rôle du spectateur est disponible en annexe afin d’écourter ce chapitre.
    • 171 V.4 – Description technique des objectifs Cette section présente une description technique des objectifs ainsi que des données nécessaires à la simulation. Il est fortement recommandé de bien comprendre les différents concepts du module comportemental avant d’entreprendre la lecture de cette section. V.4.1 – États dynamiques Dans un premier temps, nous avons les trois états dynamiques qui sont le besoin de bouger, le besoin de se divertir et le besoin d'argent. Ces trois états seront présents chez tous nos agents humains. Ils varieront entre [0, 10], le premier augmentera de 0.1 par cycle de simulation, le second de 0.05 par cycle et le troisième de 0.02 par cycle. Ces valeurs sont arbitraires et peuvent devoir être ajustées selon les résultats. Pour ces trois états, les seuils seront 3, 5 et 8. Chaque état dynamique est référé par son identifiant entier dans les comportements. 0 - Besoin de se déplacer 1 - Besoin de se divertir 2 - Besoin d'argent V.4.2 – Modèle de présentation Pour chaque objectif, nous présentons une figure résumant l’objectif qui sera suivie d’une section sur les règles d’activation, d’une section sur les actions pour les objectifs élémentaires, d’une section sur les règles de complétude et d’une section sur la composition de l’objectif. Les règles, d’activation ou de complétude sont présentés selon le modèle suivant.
    • 172 La première ligne identifie la règle par son nom et un identifiant Rx, permettant de retracer la règle, où x est un nombre entier. Par exemple, la règle R1 est décrite ainsi : Règle R1 : Si la destination n'est pas fixée & que le besoin de se déplacer > seuil 1. La ligne suivante identifie une précondition de la règle par son nom et un identifiant Py, où y est un nombre entier. Par exemple, la précondition P1 de la règle R1 est décrite ainsi : Précondition P1 : La destination n'est pas fixée. Suivant cette définition, nous retrouvons la définition de l’inéquation composant cette précondition. Tout d’abord, nous avons l’élément de formule de gauche défini par son identifiant EFz, où z est un nombre entier, suivi d’un tableau contenant les valeurs attribuées à l’élément de formule. Ensuite, nous avons l’opérateur de l’inéquation, suivi de l’élément de formule de droite qui est défini selon le même modèle que celui de gauche. Par exemple, voici les éléments de formule de la précondition P1 ainsi que son opérateur : Élément de formule de gauche EF1 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 NAVIGATION_STATE Niveau de référence 2 DESTINATION Niveau de référence 3 IS_FIXED Opérateur : = Élément de formule de droite EF2 : Type FLOAT_LEAF Nombre 0.0 Nous voyons que l’indentation permet de repérer et comprendre facilement que les éléments définis font partie de la précondition. Après la définition des éléments de formule, nous retrouvons la valeur que prennent les deux booléens, relatifs au mécanisme de référence, de la précondition. Si la valeur du premier booléen est « false », cela signifie que la précondition ne fixe pas de référent pour les autres préconditions de la règle. Sinon, la précondition fixe un référent pour une autre précondition de la règle. Dans les deux cas, il se peut qu’un référent soit nécessaire. Si le second booléen est « false », cela signifie que la
    • 173 précondition ne doit être vérifiée qu'une seule fois. Sinon, la vérification peut être effectuée à plusieurs reprises tant que la source de référents peut fournir de nouveaux référents ou qu’un référent permet l’application de la règle. Par exemple, voici les valeurs pour la précondition P1 : Fixe un référent de la même règle : false Vérifications multiples : false Suite à ces deux valeurs, nous retrouvons l’inéquation de la précondition qui est définie par les identifiants de la précondition et des éléments de formule ainsi que par l’opérateur liant les éléments de formule. De plus, une description permet d’expliquer l’inéquation. Dans cet exemple d’application, il n’y a aucun élément de formule de type « NODE », mais il est aussi possible de les représenter par l’équation arithmétique formée par le nœud. Par exemple, voici l’inéquation définissant la précondition P1 et une autre inéquation définissant une précondition arbitraire Pa : P1 : EF1 = EF2 Description : L’état de navigation est interrogé pour savoir si l’agent a une destination (EF1). L’agent n’a pas de destination lorsqu’il est arrêté ou en exploration. La valeur est comparée à la valeur de vérité 0.0 (EF2), qui représente faux dans le système. Pa : (EFb EFc.+ EFd) = EFe Description : La valeur de EFb est additionnée (EFc) à la valeur EFd pour vérifier si elle est égale à la valeur EFe. Ici, EFc précède le plus, car c’est l’élément de formule de type nœud qui contient l’opérateur et lie les deux autres éléments de formule. Suivant ce modèle, toutes les préconditions de la règle sont définies une à la suite de l’autre. Ensuite, nous retrouvons les actions de la règle qui possèdent elles aussi un identifiant Ai, où i est un nombre entier, et un nom. Cette définition est suivie d’un tableau comprenant le code d’action et les différents paramètres de l’action. Une description permet de comprendre la règle lorsqu’elle nécessite une clarification. Par exemple, voici l’action A2 de la règle R2 :
    • 174 Action A2 : L'objectif 1.1 est atteint. Code d’action MODIFY_VALUE Paramètre entier 1 OBJECTIVES Paramètre entier 2 11 Paramètre entier 3 LIFE_CYCLE Paramètre entier 4 CompletedWithSuccess Description : Tout d’abord, le code d’action permet de définir que celle-ci modifie une valeur. Nous avons un premier paramètre qui permet de référer de façon générale aux objectifs de l’agent. Le second réfère à l’objectif lui-même par son identifiant. Le troisième permet de cibler le cycle de vie de l’objectif. Finalement, nous avons la valeur que doit prendre le cycle de vie, atteint. À ce point, nous avons tout défini ce qui permet de définir l’équation de la règle en tant que telle. Celle-ci prend la forme générale suivante : Ra : Pa & Pb & … & Pk Ax & Ay & … & Az La partie avant la flèche est définie comme étant « true » en l’absence de précondition. Ceci traduit le fait que la règle s’applique tout le temps. De plus, s’il n’y a pas l’action, nous retrouvons l’ensemble vide après la flèche. La règle R0 montre ces deux cas particuliers. R0 : true Ø Après cette équation, nous retrouvons l’état dynamique qui est relié à la règle si celle-ci a besoin d’un modificateur d’intensité pour la priorité de l’objectif. Par exemple, la règle R1 est reliée à l’état dynamique qui représente le besoin de se déplacer : État dynamique relié : Besoin de se déplacer. Ici, nous avons un lien qui se fait avec l’état dynamique qui représente le besoin de bouger. Le lien au niveau de la règle permet d’apporter un modificateur d’intensité sur la priorité de base qui varie suivant la valeur courante de l’état dynamique. Pour ce faire, nous lions ce besoin à des facteurs modificateurs de priorité qui changent suivant l’état dynamique du besoin de se déplacer de l’agent qui augmente avec le temps, le tableau IV.1
    • 175 ci-dessous donne un exemple du modificateur de priorité déterminé selon la valeur courante de l’état dynamique. Tableau IV.1 : Modificateur de priorité d’un état dynamique selon la valeur courante Valeur courante [0, 3[ [3, 5[ [5, 8[ [8, 10] Modificateur de priorité - 0 5 15 Ensuite, lorsqu’un référent est utilisé dans une règle, nous retrouvons la définition des sources et des fixages de référents relatifs à la règle. Par exemple, pour la règle R8 nous avons la source et les fixages de référents suivants. Source de référents : Perception.P6 P6.EF10 Fixages du référent : P6.EF10 P7.EF11 P6.EF10 A8 P6.EF10 A9 La source Perception.P6 indique que le référent provient de la perception qui utilise la précondition P6 comme filtre. Suivant la flèche, nous retrouvons l’emplacement où le référent est stocké. Dans ce cas-ci, l’emplacement est celui qui correspond à l’élément de formule EF10 de la précondition P6. Le référent est fixé par la suite pour l’élément de formule EF11 de la précondition P7, ainsi que pour les actions A8 et A9. Les règles d’activation sont définies une à la suite de l’autre selon le modèle présenté et une section sur les actions de l’objectif suit celle-ci lorsque l’objectif est élémentaire. Les actions de l’objectif sont présentées une après l’autre, de la même manière que pour les actions des règles. Ensuite, nous retrouvons une section sur la complétude de l’objectif qui contient elle aussi des règles définies de la même manière que dans la section sur l’activation. Une seule différence se situe au niveau de l’état dynamique relié à une règle qui est absent dans tous les cas, puisque le modificateur d’intensité est inutile pour les règles de complétude, la priorité étant utilisée pour la sélection.
    • 176 La section suivante décrit la formule de l’objectif en tant que tel. Cette formule prend une des formes suivantes selon que l’objectif est élémentaire ou composé : Oa : (Ra || … || Rc) (Aa & Ab & … & Ac) (Rx || Ry || … || Rz) Besoin relié : i Durée : x secondes Fréquence de récurrence : j Oa : (Ra || … || Rc) (Ob & Oc & … & Od) (Rx || Ry || … || Rz) Besoin relié : i Durée : x secondes Fréquence de récurrence : j Nous retrouvons l’identifiant de l’objectif suivi de deux point, de l’ensemble des règles pouvant servir à l’activation de l’objectif, d’une flèche indiquant la sélection, des actions ou des sous-objectifs de l’objectif, d’une flèche indiquant la complétude et de l’ensemble des règles pouvant mener à la complétude de l’objectif. Puis, si ces éléments sont définis pour l’objectif, nous retrouvons les caractéristiques concernant le besoin relié, la durée de l’objectif et la fréquence de récurrence de l’objectif. Par exemple, les objectifs 1.1 et 1.0 sont définis ainsi : O11 : R1 A1 (R2 || R3) Besoin relié : 0 Fréquence de récurrence : 1 O10 : R0 (O11, O12) Ø Besoin relié : 0 Nous avons aussi un mécanisme de fixage de référent au niveau des objectifs, c’est pourquoi nous retrouvons les sources et les fixages de référents suivant la définition de l’objectif. Par exemple, l’objectif 3.4 comprend la source et le fixage suivant. Fixage du référent : O34.R29.P32.EF36 O34.A29 Source du référent : O34.R29.P32.EF36 O34.A29 La source est à gauche de la flèche et la cible à droite. Dans ce cas, la source correspond à l’élément de formule EF36 de la précondition P32 de la règle R29 de l’objectif 3.4 et la cible à l’action A29 de l’objectif 3.4. Le fait de présenter la source en plus du fixage permet de retracer comment le mécanisme fonctionne dans la définition de la source et de la cible. Le cas de l’objectif 3.4 est spécial puisque la source et la cible font
    • 177 partie du même objectif. C’est pourquoi nous retrouvons le fixage et la source dans le même objectif par souci de cohérence. V.4.3 – Objectif 2.1 : Avoir fixé la destination de la présentation La figure V.4 rappelle l’objectif 2.1 qui permet à l’amuseur public de trouver un endroit libre pour donner un spectacle. Nous présentons cet objectif dans ce chapitre puisqu’il comporte plusieurs éléments importants. Les autres objectifs des amuseurs publics et du profil de base sont présentés dans l’annexe I. Cet endroit est un des points de présentation que l’agent trouvera dans une zone de spectacle. L’objectif se complète lorsque l’agent a trouvé un point de présentation disponible. Objectif 2.1 : Avoir fixé la destination de la présentation Règle d'activation : Aucune précondition, l'objectif devient actif à l'activation de l'objectif 2. Action : Explorer une zone de présentation. Règle de complétude : Si l'agent perçoit un point de présentation X libre, alors se rendre au du point de présentation X, mettre le point de présentation X non-disponible et l'objectif 2.1 est atteint. Figure V.4 : Objectif 2.1 V.4.3.1 – Activation de l’objectif 2.1 Nous trouvons de nouveau la règle vide R0 à l’activation de l’objectif 2.1, car l’agent a déjà décidé de donner un spectacle, il lui faut donc trouver l’endroit pour le présenter. Règle R0 : Aucune précondition, l'objectif devient actif à l'activation de l'objectif 2.
    • 178 Précondition : Aucune Action : Aucune R0 : true Ø V.4.3.2 – Action de l’objectif 2.1 L’agent part à l’exploration d’une zone de présentation qu’il choisit au hasard parmi toutes les zones qui font partie du groupe des zones de présentation. Action A7 : Explorer une zone de présentation. Code d’action MOVE Paramètre entier 1 MOVE_INSIDE_OBJECT Paramètre entier 2 X = -1 Paramètre entier 3 Y = -1 Paramètre entier 4 RADIUS = -1 Paramètre entier 5 2 Description : Cette action permet d’explorer une zone de présentation choisie aléatoirement parmi toutes les zones qui font partie du groupe d’identifiant 2. Les paramètres entiers 2, 3, 4 sont initialisés à –1 de façon à utiliser les paramètres de l’objet. V.4.3.3 – Complétude de l’objectif 2.1 Vu que l’agent explore à la recherche d’un point de présentation, l’objectif 2.1 devient atteint lorsque l’agent trouve un point de présentation libre. L’agent rend alors le point non disponible pour que les autres amuseurs publics ne puissent pas l’utiliser. Règle R8 : Si l'agent perçoit un point de présentation X libre, alors se rendre au point de présentation X, mettre le point de présentation X non-disponible et l'objectif 2.1 est atteint. Précondition P6 : L'agent perçoit un point de présentation X.
    • 179 Élément de formule de gauche EF10 : Type VARIABLE_LEAF Type d’agent OBJECT_AGENT Niveau de référence 1 GROUP Niveau de référence 2 IS_MEMBER Niveau de référence 3 3 Opérateur : = Élément de formule de droite EF5 : Type FLOAT_LEAF Nombre 1.0 Fixe un référent de la même règle : true Vérifications multiples : true P6 : EF10 = EF5 Description : Un agent externe de type OBJECT_AGENT est interrogé à savoir s’il fait partie du groupe 3 (EF10). S’il en fait partie, la valeur retournée est égale à 1.0 (EF5). Cette précondition fixe un référent pour la précondition P7 de la même règle. Si l’agent perçu qui est présentement traité ne fait pas partie du groupe 3, la vérification multiple permet de passer à un autre agent perçu tant qu’il en reste ou que la précondition soit satisfaite. Précondition P7 : L'agent perçoit un point de présentation X libre. Élément de formule de gauche EF11 : Type VARIABLE_LEAF Type d’agent OBJECT_AGENT Niveau de référence 1 STATIC_STATES Niveau de référence 2 0 Niveau de référence 3 IS_TRUE Opérateur : = Élément de formule de droite EF5 : Type FLOAT_LEAF Nombre 1.0 Fixe un référent de la même règle : false Vérifications multiples : true P7 : EF11 = EF5
    • 180 Description : L’agent externe qui a satisfait la précondition EF10 est interrogé à nouveau pour savoir s’il est disponible, c’est-à-dire, si son état statique représentant sa disponibilité, référé par l’identifiant 0, vaut vrai. S’il est disponible, la valeur retournée est égale à 1.0 (EF5). La vérification multiple permet de retourner à la précondition P6, si l’objet interrogé n’est pas disponible, afin de vérifier les autres objets perçus. Action A8 : Se promener autour d’un point de présentation. Code d’action MOVE Paramètre entier 1 MOVE_INSIDE_DISC Paramètre entier 2 X = -1 Paramètre entier 3 Y = -1 Paramètre entier 4 9 Paramètre agent 1 Obtenu de R8.P6.EF10 Description : L’agent se promène autour de l’agent contenu dans le paramètre agent 1. Les paramètres entiers 2 et 3 sont initialisés à –1 de façon à utiliser les coordonnés mêmes du point de présentation. Le rayon de déplacement autour du point est de 9. Action A9 : Mettre le point non-disponible. Code d’action MODIFY_EXTERN_VALUE Paramètre entier 1 STATIC_STATES Paramètre entier 2 0 Paramètre entier 3 TOGGLE Paramètre agent 1 Obtenu de R8.P6.EF10 Description : L’agent rend le point non disponible en effectuant inversion de la valeur de l’état statique représentant la disponibilité du point de présentation. Action A10 : l'objectif 2.1 est atteint. Code d’action MODIFY_VALUE Paramètre entier 1 OBJECTIVES Paramètre entier 2 21 Paramètre entier 3 LIFE_CYCLE Paramètre entier 4 CompletedWithSuccess Description : Le cycle de vie de l’objectif 2.1 prend la valeur atteint. R8 : P6 & P7 A8 & A9 & A10
    • 181 La règle nécessite un référent qui provient de la perception de l’agent qui utilise la précondition P6 comme filtre. À la vérification de la règle, les référents sont obtenus de la perception pour fixer le référent de l’élément de formule EF10 de la précondition P6. Ensuite, ce référent est passé à l’élément de formule EF11 de la précondition P7. Puis, à l’application de la règle, le référent est passé de nouveau aux actions A8 et A9 de la règle. Source de référents : Perception.P6 P6.EF10 Fixages du référent : P6.EF10 P7.EF11 P6.EF10 A8 P6.EF10 A9 V.4.3.4 – Composition de l'objectif 2.1 L’objectif 2.1 devient actif dès que son objectif parent devient actif, grâce à la règle vide R0. L’agent a alors la possibilité de partir à l’exploration d’une zone de présentation de façon à trouver un point de présentation libre. Comme pour son objectif parent, celui-ci est lié au besoin d’argent. O21 : R0 A7 R8 Besoin relié : 2 Le point de présentation sera utilisé ultérieurement par l’action de l’objectif 2.2 et par une action de l’objectif 2.4. Il faut donc fixer le référent de l’action A11 de l’objectif 2.2 et l’action A17 de l’objectif 2.4 à partir de l’élément de formule EF10 de la précondition P6 de la règle R8. Fixages du référent : O21.R8.P6.EF10 O22.A11 O21.R8.P6.EF10 O24.A17 Voici le résumé étendu de cet objectif :
    • 182 O21 : R0 : true Ø A7 : Explorer une zone de présentation. R8 : P6 : EF10 : Type VARIABLE_LEAF Type d’agent OBJECT_AGENT Niveau de référence 1 GROUP Niveau de référence 2 IS_MEMBER Niveau de référence 3 3 = EF5 : Type FLOAT_LEAF Nombre 1.0 Fixe un référent de la même règle : true Vérifications multiples : true & P7 : EF11 : Type VARIABLE_LEAF Type d’agent OBJECT_AGENT Niveau de référence 1 STATIC_STATES Niveau de référence 2 0 Niveau de référence 3 IS_TRUE = EF5 : Type FLOAT_LEAF Nombre 1.0 Vérifications multiples : true A8 : Se promener autour d’un point de présentation. & A9 : Mettre le point de présentation X non-disponible. & A10 : L'objectif 2.1 est atteint. Source de référents : Perception.P6 P6.EF10 Fixages du référent : P6.EF10 P7.EF11 P6.EF10 A8 P6.EF10 A9 Besoin relié : 2 Fixage du référent : O21.R8.P6.EF10 O22.A11 Fixage du référent : O21.R8.P6.EF10 O24.A17
    • 183 V.5 – Conclusion sur le déroulement de la simulation Après avoir spécifié ces comportements, nous avons effectué quelques simulations avec des populations d’agents amuseurs publics et spectateurs. Les résultats furent assez convaincants pour faire valoir la viabilité du module comportemental dans un contexte de simulation multi-agent en temps réel. Les agents, amuseurs publics et spectateurs, possédaient un profil de base comportant l’objectif 1, leur permettant de satisfaire leur besoin de se déplacer. Ceux-ci se déplaçaient lorsque leur besoin de se déplacer se faisait sentir. Évidemment, les amuseurs publics avaient un profil actif qui était constitué du rôle leur permettant de donner des spectacles et les spectateurs avaient un profil actif leur permettant d’assister à des spectacles. Le déroulement de la simulation s’est passé comme prévu. Un amuseur public se rend dans une zone à la recherche d’un point de présentation lorsqu’il a besoin d’argent, suivant les objectifs 2 et 2.1. Il choisit alors un point de présentation libre lorsqu’il en perçoit un. Suite à cela, les spectateurs qui ont envie de se divertir cherchent un point de présentation occupé pour assister à un spectacle, suivant les objectifs 3 et 3.1. Les spectateurs peuvent aussi être attirés par le message qu’envoie un amuseur public une fois qu’il a trouvé son point de présentation, lorsqu’il exécute l’objectif 2.2. Bref, un ensemble de spectateurs sont attirés autour de l’amuseur public. Une fois qu’il y a suffisamment d’agents spectateurs autour d’un amuseur public, celui-ci commence son spectacle qui dure un temps prédéfini, suivant l’objectif 2.3. Selon le temps d’assistance, les spectateurs sont satisfaits ou non, ceux qui ne le sont pas quittent le spectacle lorsque le point de présentation est libéré, à l’exécution de l’objectif 2.4 par l’amuseur public. Ce dernier envoie, par le fait même, un message demandant aux spectateurs de payer. Les spectateurs décident alors de payer ou non, ce qui s’en suit de la complétude de l’objectif 3. Lorsque les spectateurs ont quitté, l’amuseur complète l’objectif 2 et quitte à son tour.
    • 184 V.5.1 – Problèmes rencontrés et solutions possibles La première grande difficulté est de calibrer les différents paramètres définissant la priorité des besoins et l’évolution des états dynamiques représentant ces besoins. Dans certaines simulations, le besoin d’argent de l’amuseur public augmentait tellement rapidement qu’il donnait ses spectacles un à la suite de l’autre. Il faudrait définir les valeurs des priorités des besoins et faire des graphiques en tenant compte des différents modificateurs possibles pour bien balancer l’exécution des objectifs lorsque plusieurs comportements sont en jeux. De plus, maintenant que nous avons un temps de simulation standard de défini, nous pourrions faire des tests pour déterminer des graphiques d’évolution de la valeur courante d’un état dynamique en fonction du temps, selon différents coefficients de variation. Ainsi, lorsque nous définissons un état dynamique nous serons en mesure de mieux choisir le coefficient de variation selon le type de besoin. Le choix d’activer les objectifs par le besoin d’argent est une simplification de la réalité, qui n’est pas vraiment la meilleure solution. Un amuseur public suit habituellement un horaire ou donne des spectacles dans ses temps libres. Nous pourrions définir un horaire pour chaque amuseur public et fixer le prochain temps minimum de sélection lorsque l’objectif 2 est atteint. Tout dépend en fait des autres rôles de l’agent et de la plage de temps sur laquelle la simulation est effectuée. Les agents semblent avoir un problème à trouver un point de présentation, ils explorent parfois longtemps une zone avant de finalement percevoir le point. Le problème s’amplifie lorsque la zone est très grande puisque les chances d’un agent de regarder dans la direction d’un point diminuent. Il faudrait aussi vérifier que la perception du point de présentation n’est pas empêchée par les agents qui se trouvent autour du point. Pour améliorer la situation, il faudrait changer la stratégie de recherche d’un point de présentation. Une première solution serait de diminuer la grandeur des zones. Une meilleure solution serait de définir un objectif récurrent dans lequel l’agent se rend directement à un point de présentation sans explorer une zone. Ainsi, un amuseur public pourrait passer d’un point à l’autre tant qu’il n’en trouve pas un de libre. Les spectateurs
    • 185 pourraient utiliser la même stratégie pour trouver un point de présentation occupé. L’agent pourrait choisir le point de présentation le plus près. Dans ce cas, il faudrait mémoriser, pour un certain temps, les points de présentation visités qui ne satisfont pas ses exigences, afin que l’agent ne retourne pas toujours au même point. Une autre stratégie, pour les amuseurs publics, serait d’assigner un point de présentation fixe à chacun d’eux. Tel que défini, les spectateurs explorent la zone pendant tant qu’ils ne trouvent pas de spectacle. Pour résoudre ce problème, il faudrait définir un temps de recherche et des conditions de complétude pour que l’objectif soit complété et réinitialisé lorsque l’agent ne réussit pas à trouver un spectacle. Il arrive assez souvent qu’un agent qui explore la zone traverse en plein milieu d’un spectacle, sans même s’en rendre compte, à cause du problème précédent. Le fait de traverser en plein milieu n’est pas très réaliste. Par contre, ce n’est pas vraiment un problème de comportement, mais plutôt un problème de définition de l’environnement. En effet, lorsque le point de présentation devient occupé, la zone l’entourant devrait être considérée comme un obstacle, sauf pour l’amuseur public. Nous pourrions utiliser une stratégie semblable à celle utilisée dans la navigation pour l’évitement des collisions. L’état de navigation contient un attribut définissant la bulle personnelle d’un agent, c’est-à-dire, la distance qu’il désire garder par rapport aux autres agents. Dans notre cas, la bulle serait efficace pour un type d’agent précis. Un problème considérable est au niveau des comportements qui utilisent l’état de localisation. En effet, la vérification de ce type de comportement est très coûteuse, suffisamment pour empêcher la possibilité du temps réel lorsque le rayon de vérification est trop grand. Il faut donc être très prudent dans l’utilisation de comportements de ce type. Une solution se trouve dans l’utilisation des clusters. Au lieu de compter les spectateurs autour de lui, un amuseur public pourrait être associé à un cluster de spectateurs qu’il interrogerait pour avoir le compte des agents.
    • 186 Le message qu’envoie un amuseur public pour être payé devrait être ciblé sur son public. En effet, de la façon dont les objectifs sont spécifiés, si deux points de présentation sont près l’un de l’autre, les agents qui observent un spectacle pourraient payer pour un autre qui est près à la réception du message. La solution pour le problème précédent pourrait être utilisée pour régler ce problème. En effet, l’amuseur public pourrait envoyer le message à son cluster de spectateurs, qui s’occuperait de transférer le message à ses membres. Le dernier problème se situe au niveau de la libération du point de présentation. S’il advient qu’un autre amuseur public arrive avant que les spectateurs de l’autre amuseur soient partis, le premier amuseur public croira que c’est toujours des agents de son public et ne quittera pas. Pour résoudre ce problème, nous pourrions mettre une limite de temps sur l’exécution de l’objectif 2.4. Une autre solution est une fois de plus dans l’utilisation des clusters. Grâce au cluster, un amuseur public peut reconnaître son propre public, car ses spectateurs se retrouvent dans son propre cluster.
    • 187 V.6 – Conclusion sur l’exemple d’application En conclusion, nous avons spécifié deux types d’agents, des amuseurs publics et des spectateurs. Ces deux types d’agents ont la possibilité de se déplacer dans l’environnement. Les amuseurs publics peuvent donner des spectacles et les spectateurs peuvent les observer. Nous avons effectué des simulations de cet exemple d’application et nous avons rencontré quelques problèmes mineurs qui sont facilement résolubles. Ces problèmes ne nécessitent pas de modifications majeures dans le système, ce qui montre la polyvalence de MAGS.
    • Chapitre VI Conclusion
    • 189 VI.1 – Résumé En somme, nous avons étudié les différents concepts relatifs au module comportemental, ainsi que son fonctionnement, que nous avons clarifié grâce à un exemple d’application. Nous avons vu qu’il y a différents types d’agents pouvant représenter des êtres vivants, des objets, des groupes et même le scénario d’une simulation. Ces agents possèdent des états qui les définissent et différents profils leur sont attribués, permettant d’associer un agent à ses comportements. Les arbres d’objectifs dont les nœuds sont des objectifs composés, sans actions, et les feuilles sont des objectifs élémentaires, avec actions, forment les rôles d’un agent qui lui sont attribués par l’association entre l’agent et ses profils. Les objectifs d’un profil sont à la base des comportements et ils se servent de règles et d’actions pour permettre la dynamique d’atteinte d’objectifs. Les règles sont composées d’inéquations, définies par les préconditions, dont les membres sont des éléments de formule. Ces éléments de formule permettent de contenir ou d’obtenir les valeurs nécessaires en appelant des fonctions au niveau des états de l’agent, de ses profils ou de ses objectifs, ou encore, en appelant ces fonctions pour un agent externe qui est le référent. Lorsque les inéquations sont toutes vérifiées positivement, la règle s’applique et les actions associées à la règle sont exécutées. Les sources externes de référents et les différentes manières de passer un référent à l’intérieur d’une règle permettent à l’agent de savoir de quel agent externe il est question lors de la vérification de chaque inéquation et de passer le référent aux actions. Il est aussi possible de vérifier une règle pour plusieurs référents, jusqu’à la découverte d’un agent qui satisfait toutes les préconditions définies pour une règle. À partir de la définition des règles, nous avons vu comment il était possible de définir des objectifs, qui suivent un cycle de vie dont les transitions sont gérées par l’application de différents types de règles. La vérification des objectifs commence à la racine d’un arbre et se fait en préordre et en profondeur d’abord. Les objectifs peuvent passer d’inactif à actif lorsqu’une règle d’activation s’applique. Ensuite, si l’objectif est élémentaire, il peut être sélectionné pour être exécuté s’il est prioritaire, dans ce cas ses
    • 190 actions seront exécutées. Seuls les objectifs obligatoires passent par dessus le processus de sélection prioritaire. Ceux-ci sont exécutés suivant leur activation. Il ne faut pas confondre les actions des règles d’activation avec celles des objectifs. Les actions d’une règle d’activation s’exécutent à l’application de la règle quand l’objectif devient actif, alors que les actions de l’objectif s’exécutent à l’exécution de l’objectif, lorsqu’il est sélectionné et devient en cours. Si, par contre, l’objectif n’est pas sélectionné et que la règle qui a servi à son activation ne s’applique plus, l’objectif redevient inactif. Après avoir été sélectionné et exécuté, les règles de complétude permettent de vérifier si l’objectif devient atteint ou non- atteint ou s’il reste en cours, dans le cas ou aucune règle ne s’applique. Comme pour les règles, nous avons étudié comment les référents pouvaient être transmis d’un élément à un autre de l’objectif ou même d’un objectif externe. De plus, nous avons étudié comment la priorité d’un objectif est définie. La priorité de base est déterminée par le besoin relié à l’objectif et différents facteurs modificateurs permettent de changer cette priorité. Le premier facteur représente l’intensité du besoin qui est déterminée grâce à l’état dynamique qui représente le besoin. Le second facteur permet de refléter une opportunité que l’agent peut saisir. Par exemple, la perception d’un magasin qu’un agent désire visiter peut être considérée comme une opportunité, augmentant ainsi l’importance d’un objectif par rapport aux autres, étant donné que l’agent sera potentiellement plus loin de ce magasin plus tard dans la simulation. Le troisième facteur représente le temps et son évolution dépend des contraintes temporelles spécifiées. En tout, il est possible de définir six contraintes temporelles pour un objectif. Il y a le temps minimum de sélection, le temps désiré de sélection, le temps maximum de sélection, le temps minimum de complétude, le temps désiré de complétude et le temps maximum de complétude. Les facteurs modificateurs de priorité associés à chacun de ces temps permettent de contrôler l’augmentation de la priorité en fonction du temps en interpolant la valeur courante grâce à la courbe formée entre les points (temps, facteur modificateur de priorité). L’objectif ayant la priorité totale la plus grande est sélectionné et exécuté. VI.1.2 – MAGS comparé aux théories étudiées
    • 191 Le modèle de comportements que nous avons développé pour le système MAGS avait pour but de se rapprocher autant que possible du comportement humain, afin de pouvoir simuler des comportements d’individu, de groupe et de foule. Dans cette section, nous tentons de comparer notre modèle aux théories étudiées au chapitre II. VI.1.2.1 – Expérience quotidienne de foule Le contexte d’expérience quotidienne de foule nécessite la modélisation d’une quantité considérable de comportements afin arriver à simuler une foule crédible. Pour une simulation, il est nécessaire de réduire le nombre de comportements au minimum de manière à diminuer la tâche de définition. Par contre, une simulation doit comporter une population avec des comportements suffisamment diversifiés pour être crédibles. La quantité de comportements dépend de l’environnement simulé et de sa complexité inhérente. Il faut donc cerner le contexte de l’application, c’est-à-dire, l’environnement, la population et les comportements habituellement observés dans ce contexte, afin de focaliser une étude spécifique plus précisément. La population est crédible si les comportements sont tirés d’analyses réelles sur la population de l’environnement à simuler et que ces comportements sont distribués selon les statistiques tirées des analyses. L’exemple d’application avec des amuseurs publics ne visait pas réellement ce but, mais plutôt de démontrer les fonctionnalités du système. Par contre, des études plus sérieuses, qui par exemple pourraient servir dans un contexte d’aide à la décision, devraient comporter une définition plus précise de l’environnement simulée, des objets modélisés, de la population et des comportements adoptés dans ce contexte précis. Nous avons vu au chapitre II à la section II.2.1.2 que les concepts de densité sociale, de densité spatiale et de distance interindividuelle occupent un rôle important dans le comportement humain. Dans notre système, il est possible de traiter des variables telles que la grosseur d’un groupe, son étendu, sa densité, etc. Par contre, les effets de ces variables sur un individu restent assez nébuleux. Il faudrait donc plus d’informations sur ce sujet pour pouvoir en tenir compte dans notre système. Les théories du « crowding » de Stokols ou d’autres théories plus ressentes, comme la théorie de densité en tant que contrainte
    • 192 comportementale, brièvement étudié à la section II.2.1.4 renferment probablement l’information qu’il nous manque. Le modèle de surcharge de stimuli étudié à la section II.2.1.3 du chapitre II comprend des concepts des théories sur le « crowding ». Ce modèle explique qu’un individu en présence de trop de stimuli s’adaptera en donnant plus d’importance aux stimuli concordant avec ses intérêts, en utilisant des techniques de filtrage. La notion de filtres de perception présentée à la section IV.4 et leur utilisation étudiée à la section IV.8.3 permettent de suivre ce modèle, en ciblant le centre d’intérêt d’un agent sur les agents de son environnement qui passent un filtre et qui par conséquent portent un intérêt particulier pour l’agent. Les filtres en place dans la perception dépendent du statut des objectifs. La structure d’arbres d’objectif permet un certain contrôle sur l’ajout d’un filtre. Reprenons l’exemple de la faim. Lorsque l’agent n’a pas faim, l’objectif rassemblant les possibilités qu’a un agent de satisfaire sa faim sera inactif. Ainsi, les sous-objectifs ne sont pas vérifiés et leurs filtres ne sont pas dans la perception. Par contre, lorsque l’agent a faim, l’objectif parent devient actif et les filtres des sous-objectifs seront alors ajoutés à la perception. Ces filtres traduiront l’importance que porte l’agent envers les différents agents qui permettent de satisfaire le besoin de manger, en laissant passer les agents restaurants, la nourriture, etc. VI.1.2.2 – Comportement humain dans les organisations Tel que mentionné à la section II.2.2.1, les vues de contingence permettent de définir les relations entre les variables et les différents sous-systèmes dans les organisations. Bien que chaque individu et situation soit unique, cette théorie tente de définir des modèles de relations sociales. Il serait important d’étudier les vues de contingence pour la définition de comportements sociaux et de structures organisationnelles plus poussés que les applications développées jusqu’à maintenant. Par contre, une quantité considérable de variables est en jeu et nous serons inévitablement portés à faire des choix quant aux variables à modéliser.
    • 193 Le processus de socialisation organisationnelle introduit à la section II.2.2.2 explique qu’un individu se retrouvant dans une nouvelle organisation s’adaptera à celle-ci en se comparant aux autres membres, en présence d’incertitude, afin de réviser sa manière de se comporter. Dans notre système, la notion d’apprentissage est plutôt limitée. L’agent adoptera automatiquement le profil qui lui est attribué lorsqu’il se joint à un groupe. Les agents ne peuvent pas apprendre de nouveaux comportements par comparaison sociale, car ils sont limités par les comportements définis. Par contre, si nous définissons des comportements justement basés sur l’apprentissage de nouveaux comportements, nous pourrions en venir à simuler ce phénomène. En effet, il est possible pour un agent de percevoir quels objectifs un autre agent exécute et de savoir le besoin qui est relié à cet objectif. Ainsi, nous pourrions simuler la comparaison sociale en définissant un objectif qui permet de percevoir ce que les autres agents font. Par exemple, un agent pourrait percevoir le besoin que l’agent perçu tente de satisfaire par son comportement et si l’agent lui-même est limité dans sa capacité de satisfaire ce besoin, il pourrait décider d’adopter ce comportement. Bref, bien que nous n’ayons pas défini de tels comportements, le système semble bien s’y prêter. La théorie du contrat psychologique est une autre théorie intéressante à modéliser dans notre système. Cette théorie, étudiée à la section II.2.2.2.1, montre qu’une organisation et ses membres ont des attentes les uns envers les autres et que selon les résultats, un membre sera plus ou moins accepté par le groupe. Pour modéliser ceci, il faudrait définir des comportements basés sur l’atteinte avec ou sans succès d’objectifs spécifiques ainsi que sur d’autres critères d’évaluation. Ces comportements permettraient d’ajuster la cohésion entre les membres du groupe. Comme présenté à la section II.2.2.3, les valeurs d’un individu affectent ses buts et ses normes de conduite. Les valeurs sont très stables chez un individu. Nous pouvons faire une certaine analogie avec les profils, en supposant que les buts sont des objectifs. En effet, un agent ayant de bonnes valeurs sera associé à un profil en conséquence, il n’aura donc pas de comportements allant à l’encontre de ses valeurs. La section II.2.2.4 explique que ce sont les motivations d’un individu qui le poussent à agir. Ces motivations dépendent des
    • 194 besoins de l’individu. C’est pourquoi nous retrouvons la notion de besoin à la base de la sélection des comportements dans notre système. Notre étude sur le comportement des individus dans une organisation, a montré toute l’importance du leader dans un groupe (voir la section II.2.2.5). Il est possible de définir le leader d’un groupe et de lui donner de l’importance, en tenant compte de certains facteurs présentés dans la figure II.10. Cette figure définit l’organisation comme une entité ayant ses propres caractéristique, ainsi que le leader et les suiveurs qui possède eux aussi leurs propres caractéristiques. De plus, chacune de ces entités possède des points en commun avec les autres, qui représentent en fait la raison d’être et de persistance de l’organisation. Cela justifie la présence d’une entité représentant un groupe dans notre système. C’est en quelque sorte la référence commune entre les membres qui permet d’évaluer la situation courante et la cohésion des membres. VI.1.2.3 – Psychologie sociale L’utilisation de la perception des autres reste encore à ses débuts dans notre système. Par contre, la perception et la mémoire sont des modules déjà en place qui offrent plusieurs fonctionnalités. Nous pourrions établir la première impression, étudiée à la section II.2.3.2.1, que se fait un agent d’un autre en mémorisant des attributs de l’agent perçu sur lesquels l’agent qui perçoit porte un jugement. Par exemple, si un agent perçoit un autre agent qui porte des vêtements bien assortis, il pourrait mémoriser que cet agent est à la mode, avec un certain degré associé à cette croyance. Si l’agent perçoit de nouveau cet agent et que cette fois-ci il considère l’agent comme étant mal habillé, il pourrait réajuster le degré de croyance que cet agent est à la mode, favorisant sa première impression. Par contre, il ne faut pas penser définir ce type de représentation mentale pour tous les agents, surtout quand le contexte de simulation demande un environnement avec plusieurs centaines ou milliers d’agents. Il serait alors impensable de stocker toutes les informations nécessaires. Si c’est nécessaire dans certaines applications, la combinaison du module comportemental aux modules de perception et de mémoire permettrait de construire pour un agent des représentations mentales des autres agents et d’utiliser ces informations dans
    • 195 les comportements futurs de l’agent. Il n’y a pas vraiment de limite sur les attributs perçus par un agent. La limite dépend en fait des états définis pour un agent. La théorie de desindividuation serait très intéressante à modéliser dans une application qui se situe dans un contexte de manifestation. Le calcul de coût-récompense pourrait permettre dans certaines situations d’activer des comportements déviants selon les caractéristiques de la foule et de ses membres. Après toutes les études qui ont été effectuées sur les comportements déviants, il serait sûrement possible de trouver une fonction de calcul de coût-récompense plausible et de modéliser les différents facteurs d’influence nécessaires dans les états des agents individus et groupes de la foule. Suivant notre modèle, la foule peut elle-même être considérée comme un agent cluster avec ces propres états, ce qui permettrait de définir les paramètres de la foule comme la densité. La prise de décision de groupe et les phénomènes associés tels que la polarisation et le « Groupthink », sont des éléments qui restent à étudier. Il faut voir les différentes façons possibles de prendre des décisions suivant le type de groupe, sa hiérarchie et la présence d’un leader. VI.1.2.4 – Types de foule Nous avons vu II.2.4 les différents types de foules et comment ceux-ci peuvent être catégorisés à différents degrés, suivant les trois dimensions possibles. Une première dimension catégorise la foule comme étant soit individualiste, soit solidariste. La seconde dimension considère les objets sur lesquels la foule porte son intérêt. Si les objets sont multiples, la foule est volatile, dans le cas contraire, elle est focalisée. La troisième dimension porte sur le fait que la foule est active ou expressive. La foule de notre exemple d’application est une foule individualiste, dans laquelle chaque individu accomplit ses propres objectifs de façon à satisfaire ses propres besoins. Une autre application que nous avons développée comportait une foule solidariste. Cet exemple est basé sur le déroulement d’une marche pour la paix. Les membres de la marche
    • 196 se regroupent au départ, pour ensuite suivre les meneurs de la marche le long du trajet. De plus, les agents de cet exemple peuvent se promener en groupe en plus de suivre le meneur. La quantité de groupes de différentes tailles se base sur des proportions observées dans des évènements semblables. La foule de notre premier exemple est volatile étant donné que chaque agent porte sont attention sur l’objet de son choix, un amuseur public. Par contre, si nous prenons la foule localement, autour d’un amuseur public, celle-ci peut être considéré comme étant focalisée. La foule de la marche pour la paix peut être considérée comme focalisée sur la marche. Par contre, elle est volatile si nous considérons les meneurs de la marche comme étant les objets sur lesquels se focalise la foule, chaque individu ou groupe suivant le meneur le plus près de lui. Encore une fois, si prenons la foule localement, près d’un meneur, celle-ci est focalisée sur le meneur. Cet attribut peut vraiment varier suivant l’interprétation et le niveau auquel nous nous situons. Le meilleur attribut pour décrire la foule de la marche pour la paix reste la marche en tant que telle. C’est à ce niveau que les meneurs sont considérés comme étant eux aussi focalisés sur le même objet que tous les autres, qui est en fait la raison de ce rassemblement. La foule de l’amuseur public est active, les membres observant le spectacle. La foule de la marche pour la paix est aussi active, puisque ses membres suivent la marche. Nous avons donc une première foule individualiste – volatile – active et une seconde foule solidariste – focalisée – active. La définition de la première foule semble juste, les membres de la foule agissant selon leur propre objectif et pouvant entrer en compétition pour observer le spectacle, lorsque la foule est dense. La définition de la seconde foule semble aussi juste, puisque les membres sont solidaires et qu’ils partagent le même objectif, qu’ils accomplissent ensemble. VI.1.2.5 – Conclusion
    • 197 En somme, bien qu’il soit impossible de tenir compte de tous les facteurs du système réel dans la définition d’un modèle et que des améliorations sont possibles, notre modèle semble bien se prêter à plusieurs théories du domaine. VI.1.3 – MAGS comparé aux autres simulateurs de foules Tel que nous l'avons décrit à chapitre II, le modèle développé ne gère pas les déplacements de bas niveau des agents. Les comportements de bas niveau qui s'occupe des déplacements d'un agent d'un point à un autre en évitant les obstacles et les collisions se situent au niveau de la couche de navigation. Nous ne comparons pas MAGS aux systèmes étudiés au chapitre II qui porte sur ce niveau. Par contre, nous avons intérêt à étudier attentivement les travaux récents de Reynolds pour améliorer la couche de navigation et les comportements de déplacement des clusters. L'architecture du modèle CROWD développé par le LIG est bien structurée. Elle permet de représenter la foule, les groupes et les individus. Des comportements de bas niveau sont définis, en plus du modèle de comportements de haut niveau. Les comportements de groupe semblent assez avancés, permettant une dynamique de changement de groupe selon la cohésion entre les membres. Par contre, le fait que chaque membre du groupe ait les mêmes intérêts et les mêmes buts nuit à la crédibilité du système. Chaque individu devrait avoir des buts qui ne sont pas nécessairement ceux du groupe ainsi que ses propres intérêts, ce qui donnerait un plus grand niveau d’individualité aux humains virtuels. Ces buts personnels pourraient servir comme un des facteurs d’évaluation lors d’un changement de groupe potentiel. Le changement de groupe se ferait selon les intérêts de l’individu par rapport à ses propres buts et à la concordance de ses buts avec ceux d’un autre groupe, par rapport à son groupe courant. La cohésion devrait se baser, entre autres, sur les différences d'intérêts et de buts entre les membres d'un groupe. Mais, bien qu’un individu rencontre un autre groupe, cela ne justifie pas le fait de connaître les buts de ce groupe. En effet, il faut qu’il y ait un échange entre l’individu et le groupe et que cet échange porte sur les buts du groupe, ce qui n’est pas nécessairement le cas. Cela nous
    • 198 amène à une notion très simple et de grande importance qui n’a pas été abordée par le LIG dans ce projet, à notre connaissance. Cette notion est le fait que chaque personne connaisse ou pas certaines personnes et que, dans la réalité, nous ne nous joignons pas à n’importe quel groupe dans lequel nous ne connaissons personne, à moins bien sûr que ce groupe soit informel. Les groupes informels peuvent par exemple être une file d’attente, un groupe de piéton traversant la même rue que nous ou d’autres groupes du genre qui sont éphémères. Il se peut que ce modèle ait justement été construit pour ce type de groupe, mais cela reste limitatif et peu représentatif de la réalité. Dans notre modèle, chaque individu a ses propres caractéristiques et ses propres objectifs. Le fait de se joindre ou d'appartenir à un groupe peut ajouter des objectifs supplémentaires à un individu, sans pour autant lui enlever ses propres objectifs. Les éléments touchant le modèle de cohésion et la dynamique des groupes restent à explorer pour notre système. Un autre aspect qui me semble limitatif est le fait que les buts des groupes soient prédéfinis et que le seul moyen de créer un nouveau but est la proximité d’un point d’intérêt. Il serait intéressant de permettre aux individus de créer de nouveaux buts selon leurs intérêts et que ces buts ne soient pas nécessairement des destinations. Un agent pourrait, par exemple, avoir comme but de faire partie d’un groupe, ou d’autres buts de plus haut niveau. Par contre, il se peut que cette limitation soit simplement en apparence, à cause des choix de présentations qui se contentent de présenter l'aspect déplacement, étant donné la facilité de compréhension de ce type d'application. Si ce n'est pas le cas, notre système est beaucoup plus expressif, permettant une variété d'objectifs très diversifiée. La structure d’un comportement sous forme de cellules comportementales à plusieurs niveaux définit un comportement sous forme d’automate fini. Cette structure ressemble à notre structure d’arbre d’objectifs. L’inhibition d’un comportement par un autre, et la séquence d’exécution est aussi possible dans notre modèle grâce aux règles d’activation et de complétude définies. Par contre, la structure de Thalmann procure une vision plus évidente de ces éléments qu’il faudrait probablement clarifier dans notre modèle.
    • 199 VI.1.4 – Comparaison avec les architectures BDI Nous avons développé un modèle de comportements à base d’objectifs de manière à obtenir des agents qui ne font pas seulement réagir à leur environnement, mais qui exécutent aussi une certaine forme de planification préétablie grâce à la structure d’arbre et au jeu de priorité. La planification est beaucoup trop coûteuse pour permettre l’exécution en temps réel. Notre modèle d’agent peut se comparer aux architectures BDI (Belief, Desire, Intention). De plus, le fait que l’agent possède un module de navigation indépendant et un module de perception et de mémoire, nous obtenons un type d’agent hybride, qui possède des capacités réactives en plus de ces comportements de plus haut niveau. Les croyances de l’agent correspondent à ses états et ceux de l’environnement perçu. Les désirs correspondent à l’accomplissement des objectifs associés à des priorités qui sont actif, en cours ou suspendu à un instant donné. Les règles de complétude définissent l’état dans lequel l’agent désire que son environnement et lui-même se retrouvent. Les désires qui sont impossibles à réaliser à un instant donné sont les sous-objectifs inactif d’un objectif actif. [Andriamasinoro 02] reprochait aux modèles cognitifs de ne pas intégrer suffisamment la motivation naturelle. Dans notre modèle, le besoin est pris en compte, non seulement dans le but résultant de l’accomplissement d’un objectif, mais aussi dans le processus de prise de décision via la priorité associée à ce besoin, ce qui représente un avantage considérable de notre modèle. Les intentions correspondent à l’activation des objectifs, les règles d’activation décrivant ce qui permet à un agent de passer à l’acte. Nous voyons donc que notre modèle comporte les éléments principaux des architectures BDI.
    • 200 VI.2 - Améliorations possibles du système Bien que la version courante de MAGS soit fonctionnelle, il est possible d’apporter plusieurs améliorations augmentant l’expressivité du système quant aux possibilités de simulation qu’il offre. Plusieurs améliorations dépendent des utilisations futures qui ne seront pas toutes en lien direct avec la simulation de comportements de foule. Les besoins dépendront du domaine d’application et permettront de déterminer les avenues à prendre pour les développements futurs. VI.2.1 – Extensions des éléments de formule Les éléments de formule représentent une très grande partie de l’expressivité du système. En effet, ce sont les éléments de formule qui sont à la base de la définition des comportements. L’ensemble des éléments de formule donne donc un aperçu de l’ensemble des comportements définissables. Il est primordial de leur apporter une attention particulière et d’étendre les possibilités. VI.2.1.1 – Extension des opérateurs Une première façon d’étendre les éléments de formule est d’ajouter des opérateurs arithmétiques permettant de définir d’autres équations. Nous avons vu dans l’algorithme IV.7 de la section IV.8.5 comment s’effectue le calcul d’un élément de formule. Dans cet algorithme, nous voyons que lorsque l’élément de formule est de type nœud, le type d’opérateur est vérifié afin d’effectuer la bonne opération entre le membre de gauche et le membre de droite du nœud. Pour ajouter un nouvel opérateur, il s’agit de définir une nouvelle constante représentant cet opérateur et un nouveau cas dans l’algorithme qui effectue la bonne opération entre les deux membres. Il faut bien sûr ajouter cette possibilité dans l’interface qui permet de définir les éléments de formule.
    • 201 VI.2.1.2 – Extension des types de données L’élément de formule contient ses données dans une union. Il est donc possible d’y ajouter différents types de données. Par contre, il faut permettre les calculs pour ces nouveaux types de données. Il faut aussi garder la classe des éléments de formule la plus simple et efficace possible, étant donné son rôle important dans le système. Nous devons donc nous ramener autant que possible aux calculs avec des valeurs réelles. Par contre, le point est un type de données qu’il serait très utile d’ajouter. VI.2.1.3 – Ajout d’éléments de formule L’ajout d’éléments de formule de type FormulaVariableReference est crucial à l’avancement du système. Il est nécessaire de définir des éléments de formule permettant d’obtenir les valeurs des états ou des profils et des objectifs sur lesquels nous désirons définir des comportements. Pour définir un nouvel élément de formule de ce type, il faut définir les constantes permettant de référer l’attribut à obtenir. Parfois, il est nécessaire d’ajouter les trois niveaux de référence et d’autre fois, l’ajout nécessite seulement un ou deux nouveaux niveaux de référence. Ces niveaux de référence sont définis avec les constantes du système. Comme nous l’avons vu lors du calcul d’un élément de formule de type FormulaVariableReference dans l’algorithme IV.7, le pointeur sur l’agent est utilisé pour retrouver l’attribut qui est lié à l’agent. À l’ajout d’un élément de formule, il faut donc modifier la méthode SeekFloatValue afin qu’elle puisse se servir des nouveaux niveaux de référence définis, à partir du niveau de l’agent jusqu’au niveau de l’attribut qui se situe au niveau des états, des profils ou des objectifs. En définissant un nouvel élément de formule, nous permettons l’accès à des attributs ou encore à des fonctions qui retournent une valeur. Les fonctions appelées ne doivent pas être trop complexes, car si les objectifs utilisent souvent des éléments de formule faisant appel à des fonctions complexes, il sera difficile d’obtenir une simulation qui se déroule en temps réel.
    • 202 VI.2.2 – Ajout d’action Les actions sont aussi importantes pour le module comportemental que les éléments de formule. En effet, c’est dans les actions que nous retrouvons toutes les modifications possibles au niveau des états de l’agent, de ses profils et de ses objectifs. Il est même possible pour un agent de modifier un autre agent. Pour définir une action, il faut définir les nouvelles constantes requises ainsi que les nouveaux paramètres nécessaires. Puis, il faut définir une méthode prenant en charge la nouvelle action, ou ajouter la possibilité de traitement dans la méthode existante, dans le cas où le code d’action existait déjà. Les possibilités d’actions sont illimitées, car nous pouvons accéder à toutes les valeurs liées à l’agent et aux référents de l’action. Par contre, il ne faudrait pas définir des actions trop spécifiques ou trop complexes. Il est essentiel de se questionner sur la portée de l’action, afin de déterminer de quelles façons et dans quels contextes l’action peut s’appliquer, dans le but de favoriser des actions génériques et réutilisables dans plusieurs situations. La spécificité ne se retrouve pas dans la quantité d’actions, mais plutôt dans les différents paramètres possibles pour une action. VI.2.3 – Extensions des référents À la section IV.5, nous avons étudié le mécanisme de fixage des référents. La figure IV.6 montrait les différentes sources externes et internes, ainsi que les possibilités de fixage d’une source vers une cible donnée. Les référents sont très importants pour le module comportemental. En effet, ils permettent à un agent de se comporter en fonction des autres agents de son environnement. Il est donc important d’explorer les extensions possibles de ce mécanisme.
    • 203 VI.2.3.1 – Ajout de sources de référents La figure IV.6 montrait qu’il y avait des possibilités futures de sources externes. En ajoutant une nouvelle source, nous pouvons définir des comportements qui utilisent cette source. Par exemple, si nous voulons des comportements de groupe plus élaborés, il sera nécessaire de considérer la liste des membres d’un groupe, comme une source de référents. Il serait aussi utile d’explorer la possibilité d’ajouter des états statiques comme sources de référents. La structure contenue dans les états statiques pourrait renfermer des informations supplémentaires sur les référents. Ces informations pourraient servir dans le choix d’un référent en posant des préconditions sur ces informations. L’ajout d’une source est plus compliqué que l’ajout d’un élément de formule ou d’une action. Pour y arriver, il faut définir un code entier pour la nouvelle source et modifier l’algorithme de vérification des règles que nous avons étudié à la section IV.8.4 pour traiter la nouvelle source de référent. VI.2.3.2 – Structure efficace en rapport à la quantité de mémoire utilisée La classe contenant les référents TObjectiveReferent, étudiée à la section IV.7.2, fut modélisée de façon à être le plus efficace possible. Cette structure contient tout l’espace possible pour les référents de chaque précondition et action. C’est-à-dire qu’il y a deux espaces réservés pour chaque précondition de chaque règle de l’objectif en plus des espaces pour les actions. Le fait d’avoir les espaces réservés permet l’accès direct aux référents ce qui rend le mécanisme de fixage optimal, autant pour l’accès que pour le fixage. Par contre, l’espace mémoire utilisé est considérablement plus grand que l’espace nécessaire. En effet, ce ne sont pas toutes les préconditions qui utilisent des référents. De plus, nous avons besoin d’un objet de cette classe pour chaque agent qui partage l’objectif, puisque ces données font partie de l’ensemble des données spécifiques à un agent. Il est donc indispensable de réviser la structure de cette classe afin de trouver un meilleur compromis,
    • 204 qui permet un accès direct ou presque, en évitant au maximum les trous de mémoire inutilisée. Une autre considération importante, qui permettrait l’extension du mécanisme de fixage, est qu’il n’y a pas d’espace prévu pour les référents des actions des règles. Éventuellement, nous pourrions définir l’espace nécessaire et permettre de fixer directement le référent d’une action d’une règle, plutôt que de devoir passer préalablement par les préconditions de la règle. Les flèches numéro 1 et 6 de la figure IV.6 pourraient s’étendre pour fixer ces référents en plus de pouvoir fixer les référents des préconditions des règles. Le mécanisme inverse serait alors possible, permettant d’utiliser les référents d’une action d’une règle comme source de référent pour d’autres éléments internes ou externes à l’objectif. VI.2.3.3 - Types de référents possibles Il serait intéressant d’explorer la possibilité d’avoir différents types de référents. Pour l’instant, tous les référents sont des pointeurs sur un agent. Cela impose que les éléments de l’environnement sur lesquels se basent les comportements d’un agent doivent être des agents, à moins de définir des fonctions spécialisées. Entre autres, l’utilisation de points comme référents pourrait être une avenue intéressante pour des comportements de déplacement de haut niveau. VI.2.4 – Possibilité pour la gestion de la suspension Il y a trois cas à considérer pour la suspension d'un objectif. Il y a la suspension réelle qui est un arrêt temporaire d'un objectif en cours qui peut être repris par la suite. Par exemple, un spectateur pourrait décider d'aller aux toilettes pendant qu'il regarde un spectacle. Le deuxième cas est celui ou l'arrêt ne permet pas la possibilité de reprise de l'objectif. Par exemple, un amuseur public abandonne son spectacle parce qu'une bombe
    • 205 lacrymogène a explosé près de lui. Le dernier cas est celui où les objectifs en cours peuvent s'accomplir en même temps. Par exemple, un spectateur pourrait fumer une cigarette en regardant le spectacle. Chaque possibilité implique différents traitements et différentes informations requises pour maintenir la cohérence du système. Nous explorons donc chaque possibilité afin de déterminer les besoins. VI.2.4.1 – Suspension avec reprise Pour la suspension, nous devons connaître sous quelles conditions la suspension est possible et sous quelles conditions la reprise est possible. L'objectif devrait être arrêté si la reprise est impossible. Reprenons l'exemple du spectateur qui quitte le spectacle pour aller aux toilettes. Les objectifs du spectateur sont présentés dans la figure V.3 de la section V.3. Il n'est pas nécessaire de faire quoi que ce soit avant la suspension. L'agent se rend simplement à la toilette. Par contre, s'il désire reprendre son objectif de regarder le spectacle, il devra se rendre au spectacle. Si le spectacle est terminé, son objectif 3.2 sera alors complété, et ce peu importe si l’agent se trouve près du spectacle. Dans le cas où le spectacle n’est pas terminé, une simple règle de reprise sans précondition permettrait à l'agent de retourner au point de présentation du spectacle. L'objectif 3.2 serait alors suspendable. Si l'agent n'était pas encore en train d'observer un spectacle, mais qu'il était plutôt en train d'en chercher un, l'action de chercher un spectacle pourrait simplement être exécutée de nouveau, celle-ci étant contenue dans la règle de reprise. Les autres sous- objectifs ne nécessitent pas la suspension, car l’objectif 3.3 est obligatoire et l’objectif 3.4 se complète immédiatement après l’exécution de l’action. Par contre, qu’arrive-t-il si l’objectif 3.2 est atteint alors que l’agent est aux toilettes ? Il risque d’y avoir un problème pour la complétion de l’objectif 3.0. Sa première règle de complétude ne s’applique pas puisque l’agent n’a pas reçu le message permettant à l’objectif 3.4 de devenir actif, l’agent étant à une distance trop grande. La seconde règle ne s’applique évidemment pas. La troisième règle s’appliquera dépendamment du besoin de se divertir de l’agent et la dernière s’il n’a pas suffisamment d’argent. La complétude de l’objectif 3.0 repose donc sur un besoin de l’agent ou sur la quantité d’argent qu’il possède.
    • 206 La faille n’est pas causée par la suspension, car celle-ci a seulement permis de la rendre évidente. Cette faille est due au fait que nous avons supposé que l’agent recevrait le message dans tous les cas, car il était près du spectacle. En effet, considérant ce fait, l’exécution de l’objectif 3.4 permet d’assurer la complétude de l’objectif 3.0. Pour permettre la suspension, il faudrait ajouter une règle de complétude à l’objectif 3.2 ou à l’objectif 3.0. Par exemple, pour l’objectif 3.2, la règle serait : « si l’agent est trop loin du point de présentation et que le point est libre, alors l’objectif 3.2 est non-atteint. » Cela traduirait que l’agent est déçu de ne pas avoir pu revenir avant la fin du spectacle. Pour l’objectif 3.0, nous aurions la règle : « si l’objectif 3.2 est atteint et que l’agent est trop loin du point de présentation, l’objectif 3.0 est atteint. » Cette solution traduirait que l’agent a manqué la fin du spectacle, mais qu’il n’est pas déçu puisqu’il y avait assisté suffisamment longtemps. Dans un autre exemple, un agent possédant le profil « fumeur cassé » pourrait décider de suspendre son objectif de fumer une cigarette. Pour le suspendre, il doit éteindre sa cigarette et pour le reprendre, il doit rallumer sa cigarette. Ici, nous avons une action qui doit s'exécuter avant d'entreprendre le nouvel objectif. Dans ce cas, nous aurions besoin d’une règle de suspension en plus d’une règle de reprise. VI.2.4.2 – Suspension sans reprise Pour arrêter un objectif, il faut restaurer l'environnement de façon à garder cohérent le système. Dans l'exemple de l'amuseur public qui abandonne son spectacle parce qu'une bombe a explosé, il faut qu'il rende le point de présentation libre. Sinon, des spectateurs se rassembleront autour du point une fois le gaz dissipé et les amuseurs publics ne pourront plus utiliser ce point. L'arrêt n'implique pas que la suspension de l'objectif est impossible et elle nécessite une règle qui dicte ce qu'il advient de l'objectif. Ainsi, le point de présentation serait libéré, l'objectif 2.3 deviendrait non-atteint. De plus, il faudrait assurer la récurrence en rendant l'objectif parent non-atteint. Tous les sous-objectifs de l'objectif 2.0 pourraient être arrêtés de cette façon, sauf le premier qui ne nécessite pas de libérer le point. Une simple règle de suspension pourrait être utilisée pour effectuer les opérations requises. Par
    • 207 contre, le système doit différencier la suspension sans reprise de celle avec reprise. La suspension se produit à la sélection de l’objectif à exécuter. Dans ce cas, le problème est d’identifier à la sélection, si l’objectif choisi empêche la reprise de l’objectif suspendu. VI.2.4.3 – Exécution en parallèle L’exécution en parallèle des objectifs est possible tant que les ressources qu’utilisent les objectifs n'entrent pas en conflit. Par exemple, un agent qui se déplace vers un endroit ne peut pas se rendre à un autre endroit en même temps, au mieux, il se rapprochera de sa deuxième destination. Mais, il doit toujours faire un choix entre les deux destinations. Deux objectifs amenant l’agent à la même destination pourraient s’exécuter en parallèle. Par contre, il est difficile de traiter ce cas particulier. Les ressources comprennent en particulier les parties du corps de l’agent. Par exemple, si un agent utilise ses mains pour écrire avec un clavier, il ne peut pas prendre une touche de sa cigarette en même temps qu’il écrit. Par contre, il peut exécuter l’objectif d’écrire un texte en même temps que l’objectif de fumer une cigarette. Il y a donc une suspension avec reprise au niveau des sous-objectifs et une exécution en parallèle des objectifs parents. Pour tenir compte de ceci, il faudrait probablement définir la notion de ressource et améliorer la sélection pour qu'elle prenne en compte des ressources. Par exemple, un agent sportif pourrait préférer les objectifs qui exigent plus de ressources physiques, comme courir pour se déplacer, alors qu’un agent paresseux ou malade déciderait de marcher. Nous voyons que ce processus est à un niveau plus haut et, dans ce cas, la priorité n’est pas un facteur suffisant à la sélection du comportement. Pour certains objectifs, l’exécution en parallèle ne pose pas de problème. Par contre, si le fait d’entreprendre un objectif peut compromettre celui qui est en cours : il faut suspendre l’objectif en cours. Pour régler ce problème d’une façon simple, sans utiliser la notion de ressources, nous introduisons la notion d’exclusivité. En ajoutant l’attribut m_IsExclusive à un objectif, nous pouvons facilement implanter un mécanisme qui empêche que deux objectifs qui ont cet attribut à vrai de s’exécuter en même temps. Il suffit de retenir l’objectif en cours lorsqu’il est exclusif et de vérifier si un tel objectif est
    • 208 retenu au moment de la sélection avant d’en entreprendre un nouveau qui est exclusif. Si le nouvel objectif prioritaire est exclusif et qu’un objectif exclusif est déjà en cours, il faut suspendre l’objectif en cours et exécuter le nouvel objectif. Bien sûr, lorsque l’objectif en cours exclusif est complété, le champ de retenue se libère pour un autre objectif. Ce mécanisme simple permettrait facilement d’éviter des incohérences dans le comportement des agents, sans pour autant complexifier les objectifs. VI.2.4.4 – Conclusion sur la suspension Nous en venons à la conclusion que la suspension est possible grâce aux règles de suspension et de reprise. Toutefois, il faut être très prudent dans la définition des objectifs pour s’assurer que les comportements restent cohérents peu importe ce qu’il advient. Il reste à voir dans quelles circonstances l’agent décide d’arrêter un objectif au lieu de le suspendre avec reprise. La notion d’utilisation de ressources est une voie intéressante qui pourrait améliorer la sélection. Pour l’instant, la notion d’exclusivité semble être un compromis facile pour palier à la situation. VI.2.5 – Amélioration des profils La section IV.2 décrit le lien entre la classe TAgent et la classe TProfile. Tel que défini, un agent possède un profil de base qui est toujours actif et un ensemble de profils possibles, dont un seul est actif à la fois. Cette association n'est pas idéale, car un agent pourrait éventuellement nécessiter plusieurs profils actifs en même temps. Par exemple, si nous définissons des comportements d'une marche pour la paix, dans laquelle nous retrouvons le profil de marcheur et le profil de photographe. Les photographes devraient eux aussi suivre la marche. Ils auraient donc le profil de marcheur en plus du profil de photographe et ces deux profils seraient actifs en même temps puisque les photos sont prises pendant la marche. C'est donc une limitation de permettre un seul profil actif à la fois. Pour enlever cette limitation, nous pourrions étendre la relation entre TAgent et
    • 209 TProfile de façon à avoir plus d'un profils actifs à la fois. Les profils seraient activés et désactivés par un objectif spécial servant cette fin. Cet objectif doit être vérifié peu importe si le profil est actif ou non. Lorsque l'objectif devient actif et est exécuté, le profil devient actif et à la complétion de l'objectif, le profil devient inactif. Le profil de base serait alors inutile puisqu'il est possible d'obtenir l'équivalent avec la nouvelle philosophie. Même qu'il serait probablement inutile d'avoir la notion d'actif au niveau du profil, s'il est possible de définir les conditions d'activation du profil au niveau des objectifs à la tête des rôles de ces profils.
    • 210 VI.3 – Cohérence des comportements Il est très important de vérifier à plusieurs reprises les comportements définis et de chercher les incohérences qui pourraient survenir suivant différentes situations. La vérification demande beaucoup de logique et de bon sens, car les incohérences ne sont pas toutes faciles à cerner et la quantité d’objectifs augmente la complexité de la tâche. Pour faciliter la tâche, il faudrait définir des objectifs qui servent à vérifier que les états d’un agent restent cohérents entre eux et que les choix qu’un agent fait sont logiques. Par contre, une certaine partie de la cohérence des comportements repose sur la validité des fonctions au niveau des états et des actions qui doivent donner les bons résultats. L’ordre de vérification des règles est très important dans la cohérence des comportements. En effet, l’ensemble des règles suit une forme normale disjonctive, les conjonctions se retrouvant à l’intérieur même des règles. Pour donner un exemple simple, prenons deux règles R1 et R2. La règle R1 comprend les précondition P1, P2 et P3 et l’action A1, alors que la règle R2 comprend les précondition P1 et P2 et l’action A2. Suivant la règle appliquée, différentes actions sont exécutées. Maintenant, si nous supposons que l’ordre correct des règles pour obtenir un comportement cohérent est la règle R1 d’abord, suivie de la règle R2 et qu’a un instant donné, la vérification des préconditions P1, P2 et P3 est positive. En inversant l’ordre des règles, nous obtenons l’exécution de l’action A2, alors que si nous avions vérifié les règles dans le bon ordre, l’action A1 aurait été exécutée. Par exemple, cela pourrait provoquer qu’un objectif devienne non-atteint au lieu d’atteint. Pour ne pas avoir à se soucier de l’ordre, il faudrait une précondition P4 associée à la règle R2 qui vérifie l’inverse de P3. Cette alternative serait demanderait un temps supplémentaire de définition et rendrait le système moins efficace. Par contre, elle rendrait la tâche de vérification plus facile, en spécifiant explicitement ce qui est implicite à l’ordre de vérification des règles.
    • 211 VI.4 – Efficacité du système MAGS est un simulateur temps réel. Par conséquent, le module comportemental se doit d’être suffisamment efficace pour déterminer le comportement des agents en temps réel. Jusqu'à maintenant, le module comportemental semble assez rapide pour permettre d’atteindre cette exigence. Par contre, certains comportements sont très coûteux. Plus précisément, il s’agit des comportements qui nécessitent une série de tests avec différents référents pour en trouver un qui satisfait une règle. L’utilisation de filtres de perception peut devenir très coûteuse, dépendamment du rayon de perception. L’utilisation de l’état de localisation pour trouver les agents qui remplissent une précondition comme source de référents est encore plus coûteuse que la perception, dépendamment du rayon de vérification. Il faudrait changer la stratégie d’utilisation des filtres dans cet état pour obtenir une liste de référents. Il est possible d’y arriver en obtenant tous les agents dans le rayon défini autour de l’agent, sans utiliser de filtre, et en vérifiant si ces référents remplissent la précondition filtre au niveau de la règle même. Pour cela, il faut légèrement modifier la façon d’obtenir les référents. L’ordre dans lequel sont définies les préconditions mérite de l’importance, car les préconditions à vérifications multiples sont plus coûteuses que les autres. C’est pourquoi il faut les garder pour la fin, laissant ainsi la possibilité de retour immédiat de l’algorithme, ce qui permet d’éviter les longues boucles qui sont à la recherche d’un référent potentiel. Si jamais la quantité de comportements à vérifier en vient à ralentir le système, il faudrait songer à changer la stratégie globale de vérification, soit dans le processus externe qui contrôle la vérification du comportement de tous les agents du système, soit dans la vérification même des objectifs. Entre autres, il serait possible de définir une fréquence de vérification des objectifs. En effet, chaque objectif ne nécessite pas d’être vérifié à chaque cycle de simulation. Certains comportements qui sont des réflexes doivent se déclencher rapidement. Par contre, d’autres comportements qui consistent en des vérifications moins importantes, par exemple, les objectifs qui concernent la satisfaction de la faim de l’agent, ne sont pas aussi importants, ce qui nous donne la possibilité de les vérifier moins souvent.
    • 212 VI.5 – Conclusion finale Le module comportemental est presque totalement indépendant du reste du système. Une partie est en lien direct avec les agents et leurs états. Si nous voulions utiliser ce module pour un autre système, avec des agents possédant des caractéristiques et des états différents, ainsi que des possibilités d’action différentes, peu de changements seraient nécessaires dans le module comportemental. Il serait alors nécessaire de définir de nouveaux éléments de formule pour accéder aux états. De plus, il faudrait refaire la classe d’action en définissant des actions qui utilisent les méthodes du nouveau type d’agent et de ses états. Des changements sur l’obtention des référents des sources externes seraient aussi nécessaires, dépendamment des sources définies. Bref, il est possible de fusionner le module comportemental à d’autres systèmes et les modifications nécessaires concernent les senseurs et les effecteurs des agents, qui sont les éléments de formule et les actions. Il se pourrait qu’une standardisation de la définition des sources externes de référents rende l’adaptation du système moins ardue. Nous pouvons affirmer que les objectifs de ce projet sont atteints. Néanmoins, des améliorations sont encore possibles. Le premier objectif de ce projet de recherche était de développer un modèle de comportement, permettant de représenter des comportements individuels, de groupe et de foule. Le modèle que nous avons développé, expliqué au chapitre II, permet effectivement de représenter plusieurs types de comportements. Le deuxième objectif qui était d’implanter le modèle dans un engin de simulation a été accompli, ce qui nous a permis de mettre en œuvre le modèle et de vérifier qu’il fonctionnait réellement. Nous avons vu les détails de cette implantation au chapitre III et IV. Le troisième objectif consistait en l’illustration de la validité du modèle par un exemple d'application portant sur un phénomène de foule. L’exemple d’application du chapitre V se composait d’amuseurs publics qui donnent des spectacles et de spectateurs qui les observent. Cet exemple nous a permis de vérifier que le modèle pouvait servir à représenter et à simuler, grâce à son implantation dans le système MAGS, des comportements individuels, de groupe et de foule. De plus, nous avons vu dans ce chapitre que certaines
    • 213 améliorations seraient possibles grâce aux agents de type cluster que nous avons définis dans le modèle. Dernièrement, nous avons utilisé le modèle pour simuler une marche pour la paix, ainsi que des comportements de consommateurs dans un centre d’achat. En conclusion, il reste beaucoup de développements possibles sur les comportements de foule, surtout au niveau des comportements de groupes. Nous avons quelque peu dérivé du domaine d’application visé en définissant un module comportemental aussi complexe, laissant moins de temps pour la définition de comportements de foule qui, par conséquent, est aussi plus longue et difficile. Mais en contrepartie, nous avons obtenu un système avec un potentiel de développements futurs intéressants, suffisamment efficace pour un système en temps réel et qui est très expressif et polyvalent.
    • Bibliographie [Allport 24] Allport F.H., Social Psychology, The Riverside Press, 1924. [Andriamasinoro 02] Andriamasinoro F., Proposition d’un modèle d’agents hybrides basé sur la motivation naturelle, Thèse de Doctorat, Institut de Recherche en Mathématiques et Informatique Appliquées, Université de La Réunion, 2002. [Becheiraz & Thalmann 98] Becheiraz P., Thalmann D., A Behavioral Animation System for Autonomous Actors personified by Emotions ,Proc.First Workshop on Embodied Conversational Characters (WECC '98), Lake Tahoe, California, 1998. [Brehm & Kassin 90] Brehm Sharon S., & Kassin Saul M, Social Psychology, Houghton Mifflin, 1990. [Edmonds 00] Edmonds B., The Use of Models – Making MABS More Informative, Multi- Agent-Based Simulation, 2000, p.15-32. [Electronic Arts Inc. 02] Electronic Arts Inc., The SimsTM, http://thesims.ea.com/, 2002. [Farenc & al 98] Farenc N., Musse S.Raupp, Schweiss E., Kallmann M., Aune O., Boulic R., Thalmann D., One Step Towards Virtual Human Management for Urban Environment Simulation ,Proc.ECAI Workshop on Intelligent User Interfaces, Brighton, UK, 1998. [French Wendell & al 85] French Wendell L., Kast Fremont E., Rosenzweig James E, Understanding Human Behavior in Organizations, French Kast Rosenzweig 1985. [Graumann & Moscovici 86] Graumann C.F., Moscovici S., Changing Conceptions of Crowd Mind Behavior, Springer-Verlag, 1986. [Guye-Vuilleme & Thalmann 00] Guye-Vuilleme A., Thalmann D., Requirements for an Architecture for Believable Social Agents, Proc. Agents, 2000. [Jager 00] Jager W., Modelling Consumer Behaviour, Universal Press, 2000. [Lang & Lang 61] Lang K. & Lang G.E., Collective Dynamics, Queens College, Thomas Y. Crowell Company, 1961. [LeBon 1895] LeBon G., The Crowd, Viking, New York, 1960. [Legault, 2003] Legault F., Approche multi-agent pour la simulation des consommateurs dans un centre commercial, Québec, Université Laval, 2003. [Maslow 54] Maslow A. H., Motivation and Personality, Harper & Row, 1954.
    • 215 [Max-Neef 92] Max-Neef, M., Development and human needs, In: P. Ekins and M. Max- Neef, (Eds.): Real-life economics: Understanding wealth creation, London, New York: Routledge, 1992. [Microsoft 2001] Microsoft, Le plan marketing, La pyramide de Maslow, Microsoft pour l’entrepreneur, http://www.bcentral.fr/articles/developper/PreparerSonMarketing/LePlanMarketing/LaPyra mideDeMaslow.asp, bCentral, 2001. [Musse & al 98] Musse S.R., Babski C., Capin T., Thalmann D., Crowd Modelling in Collaborative Virtual Environments, ACM VRST /98, Taiwan, 1998. [Musse & Thalmann 98] Musse S.R., Thalmann D., A Model of Human Crowd Behavior: Group Inter-Relationship and Collision Detection Analysis, LIG, EPFL, 1998. [Owen & al 98] Owen M, Galea E R, Lawrence P J and Filippidis L, The numerical simulation of aircraft evacuation and its application to aircraft design and certification, http://www.it.lut.fi/fac/mat/EcmiNL/ecmi25/node5.html, The Aeronautical Journal, June/July 1998, pp. 301-312. [Perron 2003] Perron J., Modélisation d’un modèle cognitif de mémoire dans un système multi-agent temps réel, Québec, Université Laval, 2003. [Reynolds 87] Reynolds C.W., Flocks, Herds, and Schools : A Distributed Behavioral Model, in Computer Graphics, 21(4) (SIGGRAPH '87 Conference Proceedings) pages 25- 34, 1987. [Reynolds 99] Reynolds C.W., Steering Behaviors For Autonomous Characters, http://www.red.com/cwr/, in Proceedings of Game Developpers Conference, 1999. [Rowan 99] Rowan J., Ascent and descent in Maslow’s theory, Journal of Humanistic Psychology, Vol. 39 No. 3, Summer 1999, 125-133, Sage Publications, Inc, 1999. [Stanford Humanities Laboratory] Crowds, Stanford Humanities Laboratory, http://www.stanford.edu/group/shl/Crowds/theorists/theo.htm. [Still 00] Still G. K., Crowd Dynamics, PhD Thesis, Mathematics department, Warwick University, 2000. [Thalmann & al 00] Thalmann D., Musse S.R., KallMann M., From Individual Human Agents to Crowds, 2000. [Thalmann & al 99] M.Kallmann, D.Thalmann, A Behavioral Interface to Simulate Agent- Object Interactions in Real-Time, Proc. Computer Animation 99, IEEE Computer Society Press, 1999, pp.138-146.
    • 216 [Toupin 01] Toupin R., La pyramide de Maslow, http://membres.tripod.fr/fwn01/drg05- rt12.htm, S.A.G.E, 2001. [Turner & Killian 57] Killian L. M. & Turner R. H., Collective behavior, Englewood Cliffs, N. J., Prentice-Hall, 1957.
    • Annexe I Description technique d’objectifs
    • 219 I.1 – Objectif 1 : S’être déplacé vers une destination La figure I.1 rappelle l’objectif 1 qui fait partie du profil de base des agents. Cet objectif est très simple, il permet à l’agent de se déplacer, explorant la ville. Objectif 1 : S'être déplacé vers une destination Règle d'activation : Aucune précondition, toujours actif. Règle de complétude : Jamais complété. Figure I.1 : Objectif 1 I.1.1 – Activation de l’objectif 1 L’objectif possède une seule règle d’activation. Cette règle est vide, elle ne contient aucune précondition et aucune action. Étant donné qu’il n’y a pas de précondition à l’activation de l’objectif, l’agent est toujours dans l’état requis pour l’activation de cet objectif. L’objectif passe donc immédiatement à l’état actif, dès la première vérification. Règle R0 : Aucune précondition, toujours actif. Précondition : Aucune. Action : Aucune. R0 : true Ø I.1.2 – Complétude de l’objectif 1 Pour que l'objectif ne soit jamais complété, il n'y a tout simplement pas de règle de complétude à définir. En effet, s’il n’y a pas de règle de complétude l’algorithme retourne.
    • 220 I.1.3 – Composition de l’objectif 1 L’objectif 1 est composé de deux sous-objectifs, 1.1 et 1.2. Après la vérification de la règle R0, l’objectif deviendra actif, ce qui permettra de passer à la vérification des sous- objectifs qui deviendront actifs à leur tour, lorsque les préconditions de leurs règles d’activation seront remplies. Cet objectif est lié au besoin de se déplacer. Ce besoin doit être défini dans le profil de base afin de lui associer une priorité. La priorité variant de 0 à 100, nous associons le besoin de se déplacer à une priorité arbitraire de 50. O10 : R0 (O11, O12) Ø Besoin relié : 0 Si nous reprenons la règle R0 de cet objectif et la décrivons par son expression, nous obtenons un résumé complet permettant de construire facilement l’objectif. La première partie de ce résumé comprend les règles d’activation, dans ce cas, la règle R0. La seconde partie, suivant la première flèche au niveau de l’objectif contient les sous-objectifs dont les règles d’activation pourront être vérifiées après l’activation de l’objectif. Finalement, la troisième partie, suivant la dernière flèche représente la complétude de l’objectif. Dans ce cas, il n’y a pas de règle de complétude ce qui permet à l’objectif de n’être jamais complété. O10 : R0 : true Ø (O11, O12) Ø Besoin relié : 0 I.2 – Objectif 1.1 : Avoir choisi une destination La figure I.2 rappelle l’objectif 1.1 qui permet à un agent qui a envie de bouger de choisir une destination.
    • 221 Objectif 1.1 : Avoir choisi une destination Règle d'activation : Si la destination n'est pas fixée & que le besoin de se déplacer > seuil 1. Action : Choisir une destination. Règles de complétude : Si la destination est fixée, alors l'objectif 1.1 est atteint. OU Si la destination n'est pas fixée, alors l'objectif 1.1 est non-atteint. Est_Récurrent suivant une fréquence Figure I.2 : Objectif 1.1 I.2.1 – Activation de l’objectif 1.1 Cet objectif devient actif lorsque l’agent n’est pas en train de bouger et que son besoin de se déplacer est plus grand qu’un certain seuil. La règle d’activation est liée à l’état dynamique qui représente le besoin de se déplacer afin d’ajouter un modificateur d’intensité, à la priorité, correspondant à l’intensité du besoin. Règle R1 : Si la destination n'est pas fixée & que le besoin de se déplacer > seuil 1. Précondition P1 : La destination n'est pas fixée. Élément de formule de gauche EF1 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 NAVIGATION_STATE Niveau de référence 2 DESTINATION Niveau de référence 3 IS_FIXED Opérateur : = Élément de formule de droite EF2 : Type FLOAT_LEAF Nombre 0.0 Fixe un référent de la même règle : false Vérifications multiples : false
    • 222 P1 : EF1 = EF2 Description : L’état de navigation est interrogé pour savoir si l’agent a une destination (EF1). L’agent n’a pas de destination lorsqu’il est arrêté ou en exploration. La valeur est comparée à la valeur de vérité 0.0 (EF2), qui représente faux dans le système. Précondition P2 : Le besoin de se déplacer > seuil 1. Élément de formule de gauche EF3 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 DYNAMIC_STATES Niveau de référence 2 0 Niveau de référence 3 CURRENT_VALUE Opérateur : > Élément de formule de droite EF4 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 DYNAMIC_STATES Niveau de référence 2 0 Niveau de référence 3 THRESHOLD_1 Fixe un référent de la même règle : false Vérifications multiples : false P2 : EF3 = EF4 Description : L’état dynamique représentant le besoin de se déplacer, retrouvé par l’identifiant 0, est interrogé pour savoir si la valeur courante du besoin de l’agent (EF3) est supérieure au premier seuil (EF4) défini pour cet état. Action : Aucune R1 : P1 & P2 Ø État dynamique relié : Besoin de se déplacer. I.2.2 – Action de l’objectif 1.1
    • 223 Lorsque l’objectif 1.1 s’active, l’agent a la possibilité de choisir une destination à atteindre s’il sélectionne cet objectif. Cette destination est un point quelconque de l’espace de la simulation, déterminé aléatoirement. A1 : Choisir une destination Code d’action CHOOSE_DESTINATION Paramètre entier 1 RANDOM Description : Cette action appelle une fonction de l’état de navigation qui permet de déterminer une nouvelle destination de façon aléatoire. I.2.3 – Complétude de l’objectif 1.1 Après avoir exécuté l’action de choisir une destination, une première règle de complétude, la règle R2, est vérifiée pour savoir si une destination est fixée. Si tel est le cas, l’objectif 1.1 devient atteint. La seconde règle de complétude, la règle R3, permet de savoir si une destination n’a pas été fixée. Dans ce cas, l’objectif 1.1 devient non-atteint. Règle R2 : Si la destination est fixée, alors l'objectif 1.1 est atteint. Précondition P3 : La destination est fixée. Élément de formule de gauche EF1 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 NAVIGATION_STATE Niveau de référence 2 DESTINATION Niveau de référence 3 IS_FIXED Opérateur : = Élément de formule de droite EF5 : Type FLOAT_LEAF Nombre 1.0 Fixe un référent de la même règle : false Vérifications multiples : false P3 : EF1 = EF5
    • 224 Description : De la même façon que pour la précondition P1 présentée à la section I.2.1, celle-ci obtient la valeur de l’état de navigation qui détermine si la destination est fixée. Par contre, la valeur de vérité 1.0 (EF5) est utilisée comme valeur de comparaison pour déterminer si la destination est fixée. Action A2 : L'objectif 1.1 est atteint. Code d’action MODIFY_VALUE Paramètre entier 1 OBJECTIVES Paramètre entier 2 11 Paramètre entier 3 LIFE_CYCLE Paramètre entier 4 CompletedWithSuccess Description : Tout d’abord, le code d’action permet de définir que celle-ci modifie une valeur. Nous avons un premier paramètre qui permet de référer de façon générale aux objectifs de l’agent. Le second réfère à l’objectif lui-même par son identifiant. Le troisième permet de cibler le cycle de vie de l’objectif. Finalement, nous avons la valeur que doit prendre le cycle de vie, atteint. R2 : P3 A2 Règle R3 : Si la destination n'est pas fixée, alors l'objectif 1.1 est non-atteint. Précondition P1 : La destination n'est pas fixée. Élément de formule de gauche EF1 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 NAVIGATION_STATE Niveau de référence 2 DESTINATION Niveau de référence 3 IS_FIXED Opérateur : = Élément de formule de droite EF2 : Type FLOAT_LEAF Nombre 0.0 Fixe un référent de la même règle : false Vérifications multiples : false P1 : EF1 = EF2 Description : Voir la précondition P1 de la règle R1 à la section I.2.1.
    • 225 Action A3 : L'objectif 1.1 est non-atteint. Code d’action MODIFY_VALUE Paramètre entier 1 OBJECTIVES Paramètre entier 2 11 Paramètre entier 3 LIFE_CYCLE Paramètre entier 4 CompletedWithoutSuccess Description : Comme pour l’action A2, le cycle de vie de l’objectif 1.1 est ciblé par les trois premiers paramètres de l’action. Mais, pour cette action, l’objectif devient non-atteint. R3 : P1 A3 I.2.4 – Composition de l’objectif 1.1 L’objectif 1.1 devient actif par la règle R1 permettant l’exécution de l’action A1 lorsque l’objectif est sélectionné. Ensuite, la règle R2 ou la règle R3 permet de compléter l’objectif qui devient atteint ou non-atteint dépendamment de la règle qui s’applique. Pour que l’agent puisse se déplacer plus d’une fois, il faut que cet objectif soit récurrent. L’objectif est donc associé à une fréquence de 1. Aussi, comme pour l’objectif parent, celui-ci est lié au besoin de se déplacer. O11 : R1 A1 (R2 || R3) Besoin relié : 0 Fréquence de récurrence : 1 Cet objectif peut se résumer de façon complète et compacte en étendant l’expression de l’objectif jusqu’au niveau des éléments de formule. Les actions ne sont pas décrites par leurs paramètres, étant données les redondances. Comme pour l’objectif précédent, nous retrouvons trois parties, sauf que la seconde partie correspond cette fois-ci à l’exécution de l’objectif. L’indentation permet de repérer facilement à quel niveau correspond un élément. O11 : R1 : P1 : EF1 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 NAVIGATION_STATE
    • 226 Niveau de référence 2 DESTINATION Niveau de référence 3 IS_FIXED = EF2 : Type FLOAT_LEAF Nombre 0.0 & P2 : EF3 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 DYNAMIC_STATES Niveau de référence 2 0 Niveau de référence 3 CURRENT_VALUE = EF4 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 DYNAMIC_STATES Niveau de référence 2 0 Niveau de référence 3 THRESHOLD_1 Ø État dynamique relié : Besoin de se déplacer. A1 : Choisir une destination. R2 : P3 : EF1 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 NAVIGATION_STATE Niveau de référence 2 DESTINATION Niveau de référence 3 IS_FIXED = EF5 : Type FLOAT_LEAF Nombre 1.0 A2 : L'objectif 1.1 est atteint. || R3 : P1 : EF1 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 NAVIGATION_STATE Niveau de référence 2 DESTINATION Niveau de référence 3 IS_FIXED = EF2 : Type FLOAT_LEAF Nombre 0.0 A3 : L'objectif 1.1 est non-atteint. Besoin relié : 0 Fréquence de récurrence : 1
    • 227 I.3 – Objectif 1.2 : Avoir géré l'envie de se déplacer La figure I.3 rappelle l’objectif 1.2 qui sert à gérer le besoin de se déplacer afin qu’il diminue lorsqu’un agent se déplace. Objectif 1.2 : Avoir géré l'envie de se déplacer Règle d'activation : Si la destination est fixée (l'agent est en mouvement). Action : Réduire le besoin de se déplacer. Règle de complétude : Aucune précondition, l'objectif 1.2 est atteint. Est_Récurrent suivant une fréquence Figure I.3 : Objectif 1.2 I.3.1 – Activation de l’objectif 1.2 Lorsque l’agent possède une destination, la règle d’activation R4 s’applique et l’objectif devient actif. Règle R4 : Si la destination est fixée. Précondition P3 : La destination est fixée. Élément de formule de gauche EF1 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 NAVIGATION_STATE Niveau de référence 2 DESTINATION Niveau de référence 3 IS_FIXED Opérateur : = Élément de formule de droite EF5 : Type FLOAT_LEAF Nombre 1.0
    • 228 Fixe un référent de la même règle : false Vérifications multiples : false P3 : EF1 = EF5 Description : Voir la précondition P3 de la règle R2 à la section I.2.3. R4 : P3 Ø I.3.2 – Action de l’objectif 1.2 L’activation de l’objectif 1.2 entraîne l’exécution de l’action qui réduit le besoin de se déplacer de l’agent. Ainsi, plus l’agent se déplace longtemps, moins il a envie de se déplacer. Action de l’objectif A4 : Réduire le besoin de se déplacer. Code d’action MODIFY_VALUE Paramètre entier 1 DYNAMIC_STATES Paramètre entier 2 0 Paramètre entier 3 CURRENT_VALUE Paramètre entier 4 MINUS Paramètre réel 1 0.5 I.3.3 – Complétude de l’objectif 1.2 La complétude de l’objectif se fait immédiatement après l’exécution de l’action de l’objectif. En effet, la règle de complétude R5 ne possède aucune précondition, ce qui entraîne l’exécution de l’action A5 rendant l’objectif 1.2 atteint. Règle R5 : Aucune précondition, l'objectif 1.2 est atteint. Action A5 : L'objectif 1.2 est atteint. Code d’action MODIFY_VALUE Paramètre entier 1 OBJECTIVES Paramètre entier 2 12 Paramètre entier 3 LIFE_CYCLE Paramètre entier 4 CompletedWithSuccess
    • 229 R5 : true A5 I.3.4 – Composition de l'objectif 1.2 L’objectif 1.2 devient actif par l’application de la règle R4. Cet objectif est une obligation, ce qui veut dire qu’il sera exécuté tout de suite après son activation, passant par dessus le processus de sélection. L’objectif n’est pas lié au besoin de se déplacer puisqu’il n’est pas nécessaire de déterminer une priorité pour cet objectif. De plus, l’objectif est récurrent suivant une fréquence de 1, pour permettre de diminuer le besoin de se déplacer à mesure que l’agent se déplace. O12 : R4 A4 R5 Obligation Fréquence de récurrence : 1 Le résumé étendu de cette objectif est décrit ainsi : O12 : R4 : P3 : EF1 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 NAVIGATION_STATE Niveau de référence 2 DESTINATION Niveau de référence 3 IS_FIXED = EF5 : Type FLOAT_LEAF Nombre 1.0 Ø A4 : Réduire le besoin de se déplacer. R5 : true A5 : L'objectif 1.2 est atteint. Obligation Fréquence de récurrence : 1 I.4 – Objectif 2 : Avoir donné un spectacle de rue
    • 230 La figure I.4 rappelle l’objectif 2 permet à un amuseur public de donner un spectacle de rue lorsque l’agent a besoin d’argent. L’objectif se complète quand l’agent a terminé de ramasser l’argent du spectacle. Objectif 2 : Avoir donné un spectacle de rue Règle d'activation : Si le besoin d'argent > seuil 1. Règle de complétude : Si l'objectif 2.4 est atteint, alors choisir une destination et l'objectif 2 est atteint. Est_Récurrent suivant une fréquence Figure I.4 : Objectif 2 I.4.1 – Activation de l’objectif 2 La règle R6 s’applique lorsque le besoin d’argent de l’agent se fait sentir. L’activation de l’objectif permet à l’agent de donner un spectacle de rue, en suivant les étapes étant définies par les sous-objectifs. Règle R6 : Si le besoin d'argent > seuil 1. Précondition P4 : Élément de formule de gauche EF6 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 DYNAMIC_STATES Niveau de référence 2 2 Niveau de référence 3 CURRENT_VALUE Opérateur : > Élément de formule de droite EF7 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 DYNAMIC_STATES Niveau de référence 2 2 Niveau de référence 3 THRESHOLD_1 Fixe un référent de la même règle : false Vérifications multiples : false
    • 231 P4 : EF6 > EF7 Description : L’état dynamique représentant le besoin d’argent, qui est référé par l’identifiant 2, est interrogé pour obtenir la valeur courante du besoin (EF6) et le premier seuil (EF7). Ceci permet de voir si l’agent a suffisamment besoin d’argent pour faire un spectacle. R6 : P4 Ø État dynamique relié : Besoin d’argent. I.4.2 – Complétude de l’objectif 2 L’objectif 2 devient atteint lorsque le dernier de ses sous-objectifs est atteint. À la fin du spectacle, l’agent quitte l’endroit en choisissant une destination. Règle R7 : Si l'objectif 2.4 est atteint, alors choisir une destination et l'objectif 2 est atteint. Précondition P5 : L'objectif 2.4 est atteint. Élément de formule de gauche EF8 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 24 Niveau de référence 3 LIFE_CYCLE Opérateur : = Élément de formule de droite EF9 : Type FLOAT_LEAF Nombre CompletedWithSuccess Fixe un référent de la même règle : false Vérifications multiples : false P5 : EF8 = EF9 Description : L’objectif 2.4 est interrogé pour obtenir la valeur de son cycle de vie (EF8) pour savoir si elle est égale à la valeur correspondante à atteint (EF9). Action A1 : Choisir une destination.
    • 232 Code d’action CHOOSE_DESTINATION Paramètre entier 1 RANDOM Action A6 : L'objectif 2 est atteint. Code d’action MODIFY_VALUE Paramètre entier 1 OBJECTIVES Paramètre entier 2 20 Paramètre entier 3 LIFE_CYCLE Paramètre entier 4 CompletedWithSuccess R7 : P5 A1 & A6 I.4.3 – Composition de l’objectif 2 L’objectif 2 est composé de quatre sous-objectifs, 2.1, 2.2, 2.3 et 2.4. Après l’application de la règle R6, l’objectif deviendra actif pour que l’agent puisse satisfaire son besoin d’argent. Les sous-objectifs permettront alors à l’agent de donner un spectacle. Évidemment, l’objectif 2 est lié au besoin d’argent, ce besoin doit donc être défini dans le profil de l’amuseur public. Le besoin à une priorité de 75 ce qui définit la priorité de base de l’objectif par association. Ce besoin est donc prioritaire au besoin de se déplacer qui possède une priorité de 50. Ainsi, lorsque l’amuseur public commence un spectacle, il n’arrêtera pas pour un simple besoin de se déplacer. La complétude de l’objectif se fait lorsque la règle R7 s’applique. L’objectif 2 est récurrent, suivant une fréquence de 1. La récurrence permet à l’arbre d’objectifs de se réinitialiser, ce qui permet à l’agent de refaire un spectacle lorsque le besoin d’argent revient. O20 : R6 (O21, O22, O23, O24) R7 Besoin relié : 2 Fréquence de récurrence : 1 Cet objectif ce résume ainsi dans le format étendu : O20 : R6 : P4 : EF6 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 DYNAMIC_STATES Niveau de référence 2 2
    • 233 Niveau de référence 3 CURRENT_VALUE > EF7 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 DYNAMIC_STATES Niveau de référence 2 2 Niveau de référence 3 THRESHOLD_1 Ø État dynamique relié : Besoin d’argent. (O21, O22, O23, O24) R7 : P5 : EF8 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 24 Niveau de référence 3 LIFE_CYCLE = EF9 : Type FLOAT_LEAF Nombre CompletedWithSuccess A1 : Choisir une destination. & A6 : L'objectif 2 est atteint. Besoin relié : 2 Fréquence de récurrence : 1 I.5 – Objectif 2.1 : Avoir fixé la destination de la présentation Cet objectif est défini à la section V.4.3 du chapitre V en guise d’exemple. I.6 – Objectif 2.2 : Avoir attiré des spectateurs
    • 234 Objectif 2.2 : Avoir attiré des spectateurs Règle d'activation : Si l'objectif 2.1 est atteint & l'agent est suffisamment près de la destination de la présentation X & que l’objectif 2.3 n’est pas actif, en cours ou atteint. Actions : Envoyer un message pour attirer des passants près du point de présentation X. Règles de complétude : Si l'agent n'est pas suffisamment entouré de spectateurs, alors l'objectif 2.2 est non-atteint. OU Si l'agent est suffisamment entouré de spectateurs, alors l'objectif 2.2 est atteint. Est_Récurrent suivant une fréquence Figure I.5 : Objectif 2.2 La figure I.5 présente l'objectif 2.2. Cet objectif semble nécessiter un référent pour la précondition concernant la distance entre l'agent et sa destination, mais ce référent n'est pas nécessaire. En effet, la destination est fixée au niveau de la couche de navigation et le point fixé sert au niveau de cette règle sans pour autant avoir à référer au point de présentation en tant que tel. Bref, lorsque l’agent est près de son point de présentation, il peut envoyer un message aux passants pour les attirer. Tant qu’il n’attirera pas assez d’agents, la récurrence de l’objectif lui permettra d’envoyer d’autres messages. I.6.1 – Activation de l’objectif 2.2 Après que l’agent a trouvé et s’est rendu à son point de présentation et avant de donner son spectacle, la règle R9 s’applique, ce qui rend l’objectif 2.2 actif. Règle R9 : Si l'objectif 2.1 est atteint, l'agent est suffisamment près de la destination de la présentation X et que l’objectif 2.3 n’est pas actif, en cours ou atteint. Précondition P8 : L'objectif 2.1 est atteint.
    • 235 Élément de formule de gauche EF12 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 21 Niveau de référence 3 LIFE_CYCLE Opérateur : = Élément de formule de droite EF9 : Type FLOAT_LEAF Nombre CompletedWithSuccess Fixe un référent de la même règle : false Vérifications multiples : false P8 : EF12 = EF9 Description : L’objectif 2.1 de l’agent est interrogé pour connaître la valeur de son cycle (EF12) qui est comparé avec la valeur correspondante à atteint (EF9). Précondition P9 : L'agent est suffisamment près de sa destination. Élément de formule de gauche EF13 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 NAVIGATION_STATE Niveau de référence 2 DESTINATION Niveau de référence 3 DISTANCE Opérateur : < Élément de formule de droite EF14 : Type FLOAT_LEAF Nombre 8.0 Fixe un référent de la même règle : false Vérifications multiples : false P9 : EF13 < EF14 Description : L’état de navigation est interrogé pour obtenir la distance entre l’agent et sa destination (EF13), qui est le point de présentation. Cette distance est comparée à la valeur 8.0 (EF14) et si elle est plus petite, l’agent est considéré comme étant suffisamment près. Précondition P10 : L'objectif 2.3 n’est pas actif.
    • 236 Élément de formule de gauche EF15 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 23 Niveau de référence 3 LIFE_CYCLE Opérateur : != Élément de formule de droite EF16 : Type FLOAT_LEAF Nombre Active Fixe un référent de la même règle : false Vérifications multiples : false P10 : EF15 != EF16 Description : L’objectif 2.3 de l’agent est interrogé pour connaître la valeur de son cycle (EF15) qui est comparé avec la valeur correspondante à actif (EF16). Précondition P11 : L'objectif 2.3 n’est pas en cours. Élément de formule de gauche EF15 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 23 Niveau de référence 3 LIFE_CYCLE Opérateur : != Élément de formule de droite EF17 : Type FLOAT_LEAF Nombre Ongoing Fixe un référent de la même règle : false Vérifications multiples : false P11 : EF15 != EF17 Description : L’objectif 2.3 de l’agent est interrogé pour connaître la valeur de son cycle (EF15) qui est comparé avec la valeur correspondante à en cours (EF17). Précondition P12 : L'objectif 2.3 n’est pas atteint. Élément de formule de gauche EF15 :
    • 237 Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 23 Niveau de référence 3 LIFE_CYCLE Opérateur : != Élément de formule de droite EF9 : Type FLOAT_LEAF Nombre CompletedWithSuccess Fixe un référent de la même règle : false Vérifications multiples : false P12 : EF15 != EF9 Description : L’objectif 2.3 de l’agent est interrogé pour connaître la valeur de son cycle (EF15) qui est comparé avec la valeur correspondante à atteint (EF9). R9 : P8 & P9 & P10 & P11 & P12 Ø I.6.2 – Action de l’objectif 2.2 Lorsque l’objectif devient actif, l’agent a la possibilité d’envoyer un message aux agents qui ne sont pas trop loin de lui, pour les attirer afin qu’ils assistent à son spectacle. Action A11 : Envoyer un message pour attirer des passants. Code d’action SEND_MESSAGE Paramètre entier 1 BROADCAST_AROUND Paramètre entier 2 1 Paramètre entier 3 20 Paramètre entier 4 30 Paramètre agent 1 Obtenu de O21.R8.P6.EF10 Description : L’agent envoie le message de code 1 à tous les agents autour de lui dans une distance de 30. La durée de vie du message est de 20. Le point de présentation est aussi envoyé en paramètre de façon à ce que les agents se rassemblent autour du point et non autour de l’amuseur public parce qu’il se déplace.
    • 238 Comme nous l’avons mentionné à la section I.5.4, le référent de l’action A11 provient de l’élément de formule de EF10 de la précondition P6 de la règle R8 qui est une règle d’activation de l’objectif 2.1. Source du référent : O21.R8.P6.EF10 O22.A11 I.6.3 – Complétude de l’objectif 2.2 Lorsque le public de l’agent n’est pas assez gros, l’objectif 2.2 devient non-atteint par l’application de la règle R10. Dans le cas contraire, c’est la règle R11 qui s’applique et l’objectif devient atteint. Règle R10 : Si l’agent n’est pas suffisamment entouré de spectateurs, alors l'objectif 2.2 est non-atteint. Précondition P13 : L’agent n’est pas suffisamment entouré de spectateurs. Élément de formule de gauche EF18 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 LOCATION_STATE Niveau de référence 2 NB_AGENTS_AROUND Niveau de référence 3 18.0 : radius Opérateur : < Élément de formule de droite EF19 : Type FLOAT_LEAF Nombre 5.0 Fixe un référent de la même règle : false Vérifications multiples : false P13 : EF18 < EF19 Description : Afin de vérifier la quantité d'agents spectateurs autour de l'agent amuseur public, nous ne pouvons pas utiliser la perception puisque l'agent ne voit pas derrière lui à un instant donné. Pour simuler que l'agent compte son public, nous utilisons une fonction de l’état de
    • 239 localisation qui se sert d'une précondition filtre pour compter le nombre d’agents spectateurs autour de l’amuseur public dans un rayon de 18. Précondition filtre PF14 : L’objectif 3.2 de l’agent X est en cours. Élément de formule de gauche EF20 : Type VARIABLE_LEAF Type d’agent EXTERN Niveau de référence 1 OBJECTIVES Niveau de référence 2 32 Niveau de référence 3 LIFE_CYCLE Opérateur : = Élément de formule de droite EF17 : Type FLOAT_LEAF Nombre Ongoing Fixe un référent de la même règle : false Vérifications multiples : false PF14 : EF20 < EF17 Description : L'objectif 3.2 des agents entourant l’agent est interrogé pour savoir si c’est bien un spectateur qui est en train d’exécuter son objectif qui est en cours lorsque l’agent observe un spectacle (EF20). La valeur obtenue est comparée à la valeur correspondante à en cours (EF17). Lorsque les agents autour de l'amuseur public seront comptés, ils devront passer le filtre qui est défini par cette précondition. Étant donné que le filtre est géré au niveau de l’état de localisation, les paramètres sur le fixage du référent et les vérifications multiples sont ignorés. Action A12 : L'objectif 2.2 est non-atteint. Code d’action MODIFY_VALUE Paramètre entier 1 OBJECTIVES Paramètre entier 2 22 Paramètre entier 3 LIFE_CYCLE Paramètre entier 4 CompletedWithoutSuccess R10 : P13 A12
    • 240 Bien que cela ne soit pas pour fixer un référent, nous utilisons la table de fixage des référents afin d’identifier le filtre à utiliser. Il est à noter que ce type de comportement est très coûteux en temps de calcul. En effet, le temps de calcul dépend du nombre d’agents à filtrer, qui se retrouve dans le rayon défini, puisque la vérification de la règle effectue l’évaluation de la précondition filtre pour tous ces agents. Source de référents : LocalisationCount.PF14 P13.EF18 Règle R11 : Si l’agent est suffisamment entouré de spectateurs, alors l'objectif 2.2 est atteint. Précondition P15 : L’agent est suffisamment entouré de spectateurs. Élément de formule de gauche EF18 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 LOCATION_STATE Niveau de référence 2 NB_AGENTS_AROUND Niveau de référence 3 18.0 Opérateur : >= Élément de formule de droite EF19 : Type FLOAT_LEAF Nombre 5.0 Fixe un référent de la même règle : false Vérifications multiples : false P15 : EF18 >= EF19 Description : Idem à la précondition P13, sauf que l’opérateur vérifie que le nombre d’agents satisfaisant le filtre est supérieur ou égal à la quantité nécessaire pour avoir un nombre suffisant. Action A13 : L'objectif 2.2 est atteint. Code d’action MODIFY_VALUE Paramètre entier 1 OBJECTIVES Paramètre entier 2 22 Paramètre entier 3 LIFE_CYCLE Paramètre entier 4 CompletedWithSuccess R11 : P15 A13 Source de référents : LocalisationCount.PF14 P15.EF18
    • 241 Une optimisation permet une évaluation unique du filtre pour la règle R10 et R11. Par contre, le rayon utilisé sera celui de la première règle. I.6.4 – Composition de l'objectif 2.2 L’objectif 2.2 devient actif par la règle R9. Ensuite, l’agent peut envoyer un message aux passants pour tenter de les attirer. Puis l’objectif est immédiatement complété par la règle R10 ou R11 selon que l’agent a respectivement attiré pas assez d’agents ou suffisamment d’agents pour commencer son spectacle. L’objectif suit une fréquence de 2 pour s’assurer que l’objectif suivant puisse passer à actif avant que la récurrence réinitialise l’objectif 2.1. En effet, puisque le mécanisme de récurrence réinitialise l’objectif peu importe s’il est atteint ou non-atteint, il faut un moyen pour arrêter la récurrence lorsque l’objectif est atteint. C’est pourquoi il fut nécessaire de définir des préconditions portant sur le cycle de vie de l’objectif 2.3. L’objectif 2.2 est aussi associé au besoin d’argent. O22 : R9 A11 (R10 || R11) Besoin relié : 2 Fréquence de récurrence : 2 Voici le résumé étendu de cet objectif : O22 : R9 : P8 : EF12 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 21 Niveau de référence 3 LIFE_CYCLE = EF9 : Type FLOAT_LEAF Nombre CompletedWithSuccess & P9 : EF13 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 NAVIGATION_STATE Niveau de référence 2 DESTINATION Niveau de référence 3 DISTANCE
    • 242 < EF14 : Type FLOAT_LEAF Nombre 8.0 & P10 : EF15 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 23 Niveau de référence 3 LIFE_CYCLE != EF16 : Type FLOAT_LEAF Nombre Active & P11 : EF15 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 23 Niveau de référence 3 LIFE_CYCLE != EF17 : Type FLOAT_LEAF Nombre Ongoing & P12 : EF15 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 23 Niveau de référence 3 LIFE_CYCLE != EF9 : Type FLOAT_LEAF Nombre CompletedWithSuccess Ø A11 : Envoyer un message pour attirer des passants. R10 : P13 : EF18 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 LOCATION_STATE Niveau de référence 2 NB_AGENTS_AROUND Niveau de référence 3 PF14 < EF19 : Type FLOAT_LEAF Nombre 5.0 A12 : L'objectif 2.2 est non-atteint. || R11 : P15 : EF18 : Type VARIABLE_LEAF Type d’agent SELF
    • 243 Niveau de référence 1 LOCATION_STATE Niveau de référence 2 NB_AGENTS_AROUND Niveau de référence 3 PF14 >= EF19 : Type FLOAT_LEAF Nombre 5.0 A13 : L'objectif 2.2 est atteint. Besoin relié : 2 Fréquence de récurrence : 2 Source du référent : O21.R8.P6.EF10 O22.A11 PF14 : EF20 : Type VARIABLE_LEAF Type d’agent EXTERN Niveau de référence 1 OBJECTIVES Niveau de référence 2 32 Niveau de référence 3 LIFE_CYCLE < EF17 : Type FLOAT_LEAF Nombre Ongoing I.7 – Objectif 2.3 : Avoir terminé le spectacle L'objectif 2.3 de la figure I.6 permet à l'agent de donner son spectacle après avoir attiré assez de spectateurs. Cet objectif se complète lorsque la durée du spectacle est atteinte. Objectif 2.3 : Avoir terminé le spectacle Règle d'activation : Si l'objectif 2.2 est atteint. Action : Donner le spectacle. Durée : 15 minutes Règle de complétude : Si le temps écoulé est plus grand ou égal à la durée de l'objectif, alors l'objectif 2.3 est atteint. Figure I.6 : Objectif 2.3
    • 244 I.7.1 – Activation de l’objectif 2.3 La règle d'activation R12 rend l'objectif 2.3 actif, lorsque l'objectif 2.2 est atteint. Règle R12 : Si l'objectif 2.2 est atteint. Précondition P16 : L'objectif 2.2 est atteint. Élément de formule de gauche EF21 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 22 Niveau de référence 3 LIFE_CYCLE Opérateur : = Élément de formule de droite EF9 : Type FLOAT_LEAF Nombre CompletedWithSuccess Fixe un référent de la même règle : false Vérifications multiples : false P16 : EF21 = EF9 Description : Le cycle de vie de l’objectif 2.2 est obtenu (EF21) pour savoir s’il est égal à la valeur correspondante à atteint (EF9). R12 : P16 Ø I.7.2 – Action de l’objectif 2.3 Lorsque l'objectif 2.3 est actif, l'agent peut donner son spectacle. Action A14 : Donner le spectacle. Code d’action BIDON Description : Cette action ne fait rien de particulier puisque l'agent continue tout simplement à se déplacer autour du point de présentation. Si nous avions un modèle animé d'amuseur public, nous pourrions amorcer une séquence d'animation du modèle en définissant l'action
    • 245 correspondante. Pour l'instant, cette action ne sert qu'à garder une trace d'exécution du comportement de l'agent. I.7.3 – Complétude de l’objectif 2.3 L'objectif 2.3 devient atteint lorsque le temps d'exécution de l'objectif atteint ou dépasse sa durée. Règle R13 : Si le temps écoulé est plus grand ou égal à la durée de l'objectif, alors l'objectif 2.3 est atteint. Précondition P17 : Le temps écoulé est plus grand ou égal à la durée de l'objectif. Élément de formule de gauche EF22 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 23 Niveau de référence 3 ELAPSED_TIME Opérateur : >= Élément de formule de droite EF23 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 23 Niveau de référence 3 LASTING_TIME Fixe un référent de la même règle : false Vérifications multiples : false P17 : EF22 >= EF23 Description : L’objectif 2.3 de l’agent est interrogé pour savoir depuis combien de temps que l’agent exécute l’objectif (EF22) pour comparer avec la valeur de la durée de l’objectif (EF23). Action A15 : L'objectif 2.3 est atteint. Code d’action MODIFY_VALUE Paramètre entier 1 OBJECTIVES Paramètre entier 2 23
    • 246 Paramètre entier 3 LIFE_CYCLE Paramètre entier 4 CompletedWithSuccess R13 : P17 A15 I.7.4 – Composition de l'objectif 2.3 L'objectif 2.3 est activé par l'application de la règle R12. L'action A14 permet ensuite à l'agent de donner son spectacle qui se terminera lorsque la durée du spectacle sera atteinte par la vérification de la règle R13. L'objectif est associé au besoin d'argent et a une durée de 15 minutes. O23 : R12 A14 R13 Besoin relié : 2 Voici le résumé étendu de cet objectif : O23 : R12 : P16 : EF21 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 22 Niveau de référence 3 LIFE_CYCLE = EF9 : Type FLOAT_LEAF Nombre CompletedWithSuccess Ø A14 : Donner le spectacle. R13 : P17 : EF22 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 23 Niveau de référence 3 ELAPSED_TIME >= EF23 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 23
    • 247 Niveau de référence 3 LASTING_TIME A15 : L'objectif 2.3 est atteint. Besoin relié : 2 I.8 – Objectif 2.4 : Avoir ramassé de l'argent L'objectif 2.4, rappelé par la figure I.7, permet à l'agent de demander de l'argent aux spectateurs et d'attendre qu'ils aient tous quitté avant de quitter. Objectif 2.4 : Avoir ramassé de l'argent Règle d'activation : Si l'objectif 2.3 est atteint. Action : Envoyer un message qui demande de payer pour le spectacle aux agents spectateurs. Mettre le point de présentation X disponible. Règle de complétude : Si l'agent n'est pas suffisamment entouré de spectateurs, alors le besoin d'argent diminue et l'objectif 2.4 est atteint. Figure I.7 : Objectif 2.4 I.8.1 – Activation de l’objectif 2.4 La règle R14 permet à l'objectif 2.4 de devenir actif tout simplement lorsque l'objectif 2.3 est atteint. Règle R14 : Si l'objectif 2.3 est atteint. Précondition P18 : L'objectif 2.3 est atteint. Élément de formule de gauche EF15 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 23 Niveau de référence 3 LIFE_CYCLE Opérateur : = Élément de formule de droite EF9 :
    • 248 Type FLOAT_LEAF Nombre CompletedWithSuccess Fixe un référent de la même règle : false Vérifications multiples : false P18 : EF15 = EF9 Description : L’objectif 2.3 est interrogé pour savoir si son cycle de vie (EF15) vaut atteint (EF9). R14 : P18 Ø I.8.2 – Actions de l’objectif 2.4 Après l'activation de l'objectif 2.4, l'agent peut envoyer un message aux spectateurs pour leur demander de payer pour le spectacle. À l'exécution de l'objectif, il rendra aussi le point disponible pour un nouveau spectacle. Action A16 : Envoyer un message qui demande de payer pour le spectacle aux agents autour de l’amuseur public. Code d’action SEND_MESSAGE Paramètre entier 1 BROADCAST_AROUND Paramètre entier 2 2 Paramètre entier 3 20 Paramètre entier 4 30 Description : L’agent envoie le message de code 2 à tous les agents autour de lui dans une distance de 30. La durée de vie du message est de 20. Action A17 : Mettre le point de présentation X disponible. Code d’action MODIFY_EXTERN_VALUE Paramètre entier 1 STATIC_STATES Paramètre entier 2 0 Paramètre entier 3 TOGGLE Paramètre agent 1 Obtenu de O21.R8.P6.EF10 Description : La valeur de l’état statique représentant la disponibilité de l’objet est inversée de façon à rendre l’objet disponible.
    • 249 Comme nous l’avons mentionné à la section I.5.4, le référent de l’action A17 provient de l’élément de formule de EF10 de la précondition P6 de la règle R8 qui est une règle d’activation de l’objectif 2.1. Source du référent : O21.R8.P6.EF10 O24.A17 I.8.3 – Complétude de l’objectif 2.4 La complétude de l'objectif 2.4 se fait par l'application de la règle R15, qui rend l'objectif atteint lorsque les agents spectateurs ont quitté l'endroit. Nous supposons que certains agents ont payé, ce qui justifie la diminution du besoin d'argent. Règle R15 : Si l’agent n’est pas suffisamment entouré de spectateurs, alors le besoin d'argent diminue et l'objectif 2.4 est atteint. Précondition P19 : L’agent n’est pas suffisamment entouré de spectateurs. Élément de formule de gauche EF18 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 LOCATION_STATE Niveau de référence 2 NB_AGENTS_AROUND Niveau de référence 3 18.0 Opérateur : <= Élément de formule de droite EF5 : Type FLOAT_LEAF Nombre 1.0 Fixe un référent de la même règle : false Vérifications multiples : false P19 : EF18 <= EF5 Description : Idem à la précondition P13 de la règle R10 à la section I.6.3, sauf que le nombre d’agents (EF18) doit être inférieur ou égal à 1.0 (EF5) Action A18 : Le besoin d'argent diminue. Code d’action MODIFY_VALUE Paramètre entier 1 DYNAMIC_STATES
    • 250 Paramètre entier 2 2 Paramètre entier 3 CURRENT_VALUE Paramètre entier 4 MINUS Paramètre réel 1 10.0 Description : La valeur courante de l’état dynamique qui représente le besoin d’argent de l’agent, référé par l’identifiant 2, est diminué de 10.0. Action A19 : L'objectif 2.4 est atteint. Code d’action MODIFY_VALUE Paramètre entier 1 OBJECTIVES Paramètre entier 2 24 Paramètre entier 3 LIFE_CYCLE Paramètre entier 4 CompletedWithSuccess R15 : P19 A18 & A19 Source de référents : LocalisationCount.PF14 P19.EF18 I.8.4 – Composition de l'objectif 2.4 Comme nous l'avons décrit, l'objectif 2.4 devient actif par la règle R14, ce qui permet à l'agent d'exécuter l’action A16 qui demande aux spectateurs de payer et l’action A17 qui rend le point de présentation disponible pour un autre spectacle. Cet objectif est aussi lié au besoin d'argent. O24 : R14 (A16 & A17) R15 Besoin relié : 2 Durée : 900 secondes Voici le résumé étendu de cet objectif : O24 : R14 : P18 : EF15 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 OBJECTIVES Niveau de référence 2 23 Niveau de référence 3 LIFE_CYCLE = EF9 : Type FLOAT_LEAF Nombre CompletedWithSuccess
    • 251 Ø A16 : Envoyer un message qui demande de payer pour le spectacle aux agents autour de l’amuseur public. & A17 : Mettre le point disponible. R15 : P19 : EF18 : Type VARIABLE_LEAF Type d’agent SELF Niveau de référence 1 LOCATION_STATE Niveau de référence 2 NB_AGENTS_AROUND Niveau de référence 3 PF14 <= EF5 : Type FLOAT_LEAF Nombre 1.0 A18 : Diminuer le besoin d'argent. & A19 : L'objectif 2.4 est atteint. Besoin relié : 2 Durée : 900 secondes Source du référent : O21.R8.P6.EF10 O24.A17