Advertisement
rodolpheg

Untitled

Nov 11th, 2020
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.85 KB | None | 0 0
  1. model Epidemie
  2. global {
  3. /** Définition des caractéristiques de l’environnement */
  4. init {
  5. create humains number:50; // au moment où le modèle est initialisé, on veut créer un nombre n d'agents
  6. }
  7. }
  8.  
  9. /** On déclare notre famille d'agents "humains" */
  10. species humains skills:[moving] { // En plus de la déclaration "humain", on indique également quel(s) "skills" pré-programmés (en voici la liste complète https://gama-platform.github.io/wiki/BuiltInSkills) seront employés. Dans notre cas, on utilise le skill "move" pour déplacer les agents.
  11. bool malade <- flip(0.1); // Les agents doivent avoir un état initial "malade" qui est vrai ou faux. On utilise "flip" (comme dans "to flip a coin"), une fonction de GAMA pour décider aléatoirement si l'agent est malade au départ de la simulation (10% de probabilité)
  12. int dist <- 2; // Définir une nouvelle variable pour déterminer la distance à partir de laquelle les agents se contamines
  13.  
  14. /** Création d'une action "reflex" (activée à chaque pas de temps de la simulation) */
  15. reflex moving { // remarquez que le nom ("moving") du reflex correspond à un "skill" préprogrammé dans GAMA et déjà initialisé à la ligne 11
  16. do wander(amplitude: 90.0); //le type de déplacement sera "wander". À chaque itération, les agents se déplacent aléatoirement d'un pas dans une direction donnée.
  17. }
  18.  
  19. /** Création d'une deuxième action "reflex" (activée à chaque pas de temps de la simulation). Cette fois, on veut vérifier à chaque pas d etemps si les agents sont à moins de 2m, afin de les faire se contaminer */
  20. reflex contamine when: !empty(humains at_distance dist) { // "Activer la fonction réflex si la liste des agents qui sont à moins de 2m l'un de l'autre n'est pas vide"
  21. ask humains at_distance dist { // "Pour chaque humain (appelé "myself") ayant un ou plusieurs autres humains (appelé "self") à moins de 2 mètres, activer l'action suivante :"
  22. if (self.malade) { //"Si l'humain "self" est malade"...
  23. myself.malade <- true; // "... alors l'humain "myself" devient malade"
  24. }
  25. else if (myself.malade) { //"Autrement, si l'humain "myself" est malade"...
  26. self.malade <- true; // "... alors l'humain "self" devient malade"
  27. }
  28. }
  29. }
  30.  
  31. /** Donner des informations sur l'aspect des agents */
  32. aspect base {
  33. draw circle(1) color: (malade) ? #red : #grey;// ils seront rouges s'ils sont malades, et gris s'ils sont sains
  34. }
  35. }
  36.  
  37. /** Déclaration d'une expérience */
  38. experiment une_experience type: gui {
  39. /** Définition de l’interface du modèle */
  40. output {
  41. display le_monde { // Création D'un onlet "le_monde"
  42. species humains aspect:base;
  43. }
  44. display graphique { // Création D'un onlet "graphique"
  45. chart "Nombre de personnes malades" {
  46. data "Individus malades" value: length (humains where (each.malade = true));
  47. }
  48. }
  49. }
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement