Advertisement
rodolpheg

Untitled

Nov 19th, 2020
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.10 KB | None | 0 0
  1. // Nom du modèle
  2. model trafic
  3.  
  4. // Méthode globale définissant l'environnement.
  5. global {
  6. file shp_bati <- file("../includes/bati.shp");
  7. file shp_rue <- file("../includes/rues_vm.shp");
  8. geometry shape <- envelope(shp_rue);
  9. graph reseau;
  10.  
  11. int min_deb_trav <- 6;
  12. int max_deb_trav <- 8;
  13.  
  14. float step <- 1 #mn;
  15.  
  16. // on introduit un paramètre pour déterminer la valeur qui sera ajoutée au segments à chaque passage
  17. float usage <- 0.1;
  18.  
  19. init {
  20. create bati from: shp_bati;
  21. create rue from: shp_rue;
  22. // ajoute des valeurs de poids (dans d’init{}) au réseau des rues. Les poids serviront à garder en mémoire l’usage des segments de rues
  23. map<rue,float> carte_poids <- rue as_map (each:: (each.usage_coeff * each.shape.perimeter));
  24. reseau <- as_edge_graph(shp_rue) with_weights carte_poids;
  25.  
  26. create resident number: 100 {
  27. debut_trav <- rnd (min_deb_trav, max_deb_trav);
  28. fin_trav <- debut_trav + rnd(7, 9);
  29. residence <- one_of (list<bati>(bati));
  30. travail <- one_of (list<bati>(bati));
  31. objectif <- "repos";
  32. location <- residence;
  33. }
  34. }
  35.  
  36. // création d'un reflex pour mettre à jour le réseau avec les nouvelles valeurs
  37. reflex update_reseau{
  38. map<rue,float> carte_poids <- rue as_map (each:: (each.usage_coeff * each.shape.perimeter));
  39. reseau <- reseau with_weights carte_poids;
  40. }
  41. }
  42.  
  43. // Agent "bati"
  44. species bati {
  45. aspect base {
  46. draw shape color: #darkgrey ;
  47. }
  48. }
  49.  
  50. // Agent "rue"
  51. species rue {
  52.  
  53. // Donner un coefficient d'utilisation des segments de rues
  54. float usage_coeff <- 1.0;
  55. // calcul de la nouvelle couleur
  56. int colorValue <- int(255*(usage_coeff - 1)) update: int(255*(usage_coeff - 1));
  57. rgb color <- rgb(min([255, colorValue]),max ([0, 255 - colorValue]),0) update: rgb(min([255, colorValue]),max ([0, 255 - colorValue]),0) ;
  58.  
  59. aspect base {
  60. draw shape color: color;
  61. }
  62. }
  63.  
  64. // Agents "résidents"
  65. species resident skills: [moving] {
  66. rgb color <- rgb(243, 214, 72);
  67. bati residence <- nil;
  68. bati travail <- nil;
  69. int debut_trav;
  70. int fin_trav;
  71. string objectif;
  72. point target <- nil;
  73.  
  74. // À chaque itération, regarder l'heure et vérifier s'il est temps de partir au travail
  75. reflex au_boulot when: current_date.hour = debut_trav and objectif = "repos" {
  76. // si c'est le cas, donner l'objectif "travailler" à l'agent
  77. objectif <- "travailler";
  78. // et lui donner pour destination "travail" (la destination avant ça était "nil")
  79. target <- any_location_in(travail);
  80. }
  81.  
  82. // À chaque itération, regarder l'heure et vérifier s'il est temps de rentrer
  83. reflex au_repos when: current_date.hour = fin_trav and objectif = "travailler" {
  84. // si c'est le cas, donner l'objectif "travailler" à l'agent
  85. objectif <- "repos";
  86. // et lui donner pour destination "travail" (la destination avant ça était "nil")
  87. target <- any_location_in(residence);
  88. }
  89.  
  90. // À chaque itération, regarder si la variable destination est différente "nil"
  91. reflex move when: target != nil {
  92. // On trouve les segments de rues et on passe à travers la liste
  93. path chemin <- goto(target: target, on:reseau, return_path: true);
  94. list<geometry> segments <- chemin.segments;
  95. loop ligne over: segments {
  96. float dist <- ligne.perimeter;
  97. ask rue(chemin agent_from_geometry ligne) {
  98. // calcul du nouveau coefficient d'utilisation qui servira au calcul de la couleur
  99. usage_coeff <- usage_coeff + (usage * dist / shape.perimeter);
  100. }
  101. }
  102. if target = location {
  103. // une fois arrivé, sa destination devient nil
  104. target <- nil ;
  105. }
  106. }
  107.  
  108. aspect base {
  109. draw circle(20) color: color;
  110. }
  111. }
  112.  
  113. // Définition de la simulaiton et de ses affichages
  114. experiment trafic type: gui {
  115. output {
  116. display ville_marie type:opengl background: rgb(50, 50, 50) {
  117. species bati aspect: base ;
  118. species rue aspect: base ;
  119. species resident aspect: base ;
  120. }
  121. }
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement