Exemple de jeu : le RPG


  1. Définitions des SMA

    Il existe différentes définitions des termes agent et systèmes multi-agents, en fonction du domaine d'application de cette technologie. Par exemple, dans "Intelligent Agents : Theory and Practice" (1995), Michael Wooldridge en propose la définition suivante :

    Le terme agent caractérise un système informatique matériel ou (plus souvent) logiciel qui comporte les caractéristiques suivantes :


    C'est de la collaboration de ces agents, relativement basiques, que naissent des comportements complexes...
    Un des exemples les plus connus est le cas des fourmis capables de "pister" la nourriture, et ceux sans avoir de cartes à disposition...

  2. Simulation et jeux vidéos

    Un des grands domaines d'utilisation des SMA est la modélisation de processus complexes. Les systèmes simulés peuvent être de toutes sortes, depuis le système hydrologique jusqu'à la simulation des aléas de la bourse! En passant bien sur par la case jeu vidéo, et c'est là qu'ils nous interessent...
    Appliqué à notre moteur, les agents représentent les objets actifs de notre système, à savoir les personnages non joueurs (NPC), le personnage joué par l'utilisateur, etc...
    C'est pour cette raison qu'ils dérivent tous d'une classe Actif.

    Mais comment simuler le parallélisme des agents?
    Nous avons utilisé une des manières les plus simples et les moins couteuses en CPU de faire, à savoir discrétiser le temps (une tranche de temps étant appelé un pas de temps) et exécuter pour chaque cycle et par agent, une méthode d'Actif appelée step(). Il va s'en dire que cette méthode doit effectuer une action élémentaire et ne pas être trop couteuse en temps de calcul. Ex: avancer d'un pas vers l'ennemi, tirer une balle, amorcer un saut, etc...
    Si il s'avère impossible de diviser l'action de son personnage en petites étapes alors on peut lancer un thread, faire le calcul et vérifier à chaque pas de temps que le calcul a abouti... Implémenter un nouvel agent dans le système revient donc dériver de la classe Actif et donc a implémenter sa méthode virtuelle step().

    Nous avons finalement utilisé une implémentation de cette méthode qui impose un découpage naturelle du comportement d'un agent: un automate.