Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.83 KB | None | 0 0
  1. /***
  2. * Name: Cammage
  3. * Author: z
  4. * Description:
  5. * Tags: Tag1, Tag2, TagN
  6. ***/
  7.  
  8. model Cabbage
  9.  
  10. global {
  11. int nb_preys_init <- 10;
  12. float prey_energy_consum <- 2.0;
  13. float prey_min_energy_reproduce <- 100.0;
  14.  
  15. int nb_predators_init <- 3;
  16. float predator_energy_consum <- 0.7;
  17. float predator_energy_reproduce <- 50.0;
  18. float predator_min_energy_reproduce <- 100.0;
  19.  
  20. float nb_max_energy <- 100.0;
  21. int nb_max_offsprings <- 1 ;
  22.  
  23. int nb_preys -> {length (prey)};
  24. int nb_predators -> {length (predator)};
  25.  
  26. init {
  27. create prey number: nb_preys_init ;
  28. create predator number: nb_predators_init ;
  29. }
  30. }
  31.  
  32. species generic_species {
  33. rgb color;
  34. float max_energy <- nb_max_energy;
  35. float max_transfert;
  36. float energy_consum;
  37. float energy_reproduce;
  38.  
  39. int max_offsprings <- nb_max_offsprings;
  40. vegetation_cell myCell <- one_of (vegetation_cell) ;
  41. float energy <- (rnd(1000) / 1000) * max_energy update: energy - energy_consum max: max_energy ;
  42. float size <- 1.0 update: 1 + 3 * energy / max_energy ;
  43.  
  44. init {
  45. location <- myCell.location;
  46. }
  47.  
  48. reflex basic_move {
  49. myCell <- one_of (myCell.neighbours) ;
  50. location <- myCell.location ;
  51. }
  52.  
  53. reflex die when: energy <= 0 {
  54. do die ;
  55. }
  56.  
  57. reflex reproduce when: (energy >= energy_reproduce) {
  58. int nb_offsprings <- int(1 + rnd(max_offsprings - 1));
  59. create species(self) number: nb_offsprings {
  60. myCell <- myself.myCell ;
  61. location <- myCell.location ;
  62. energy <- myself.energy / nb_offsprings ;
  63. }
  64. energy <- energy / nb_offsprings ;
  65. }
  66.  
  67. aspect base {
  68. draw circle(size) color: color ;
  69. }
  70. }
  71.  
  72. species prey parent: generic_species {
  73.  
  74. init {
  75. color <- #blue;
  76. max_transfert <- 1.0 + rnd(9.0);
  77. energy_consum <- prey_energy_consum ;
  78. energy_reproduce <- prey_min_energy_reproduce;
  79. }
  80.  
  81. reflex eat when: myCell.food > 0 {
  82. float energy_transfert <- min([max_transfert, myCell.food]) ;
  83. myCell.food <- myCell.food - energy_transfert ;
  84. energy <- energy + energy_transfert ;
  85. }
  86.  
  87. reflex basic_move {
  88. //vegetation_cell cell2 <- with_max_of(myCell.neighbours, food);
  89.  
  90. //myCell <- one_of (myCell.neighbours) ;
  91. //location <- myCell.location ;
  92.  
  93. vegetation_cell cell <- myCell.neighbours with_max_of each.food ;
  94. myCell <- cell;
  95. location <- cell.location ;
  96. }
  97. }
  98.  
  99.  
  100. species predator parent: generic_species {
  101. // float energy <- (rnd(1000) / 1000) * max_energy update: energy - energy_consum max: max_energy ;
  102. list<prey> reachable_preys update: prey inside (myCell);
  103.  
  104. init {
  105. color <- #red ;
  106. energy_consum <- predator_energy_consum ;
  107. energy_reproduce <- predator_energy_reproduce ;
  108. energy_reproduce <- predator_min_energy_reproduce;
  109. }
  110.  
  111. reflex eat when: ! empty(reachable_preys) {
  112. prey reachable_prey <- one_of (reachable_preys);
  113.  
  114. energy <- energy + reachable_prey.energy ;
  115. ask reachable_prey {
  116. do die ;
  117. }
  118. }
  119.  
  120. reflex basic_move {
  121. //vegetation_cell cell2 <- with_max_of(myCell.neighbours, food);
  122.  
  123. //myCell <- one_of (myCell.neighbours) ;
  124. //location <- myCell.location ;
  125. prey target <- prey with_min_of (self distance_to each);
  126. vegetation_cell cell <- myCell.neighbours with_min_of (target distance_to each) ;
  127. myCell <- cell ;
  128. location <- cell.location ;
  129. }
  130. }
  131.  
  132. grid vegetation_cell width: 30 height: 30 neighbors: 4 {
  133. float MAX_FOOD_CONST <- 10.0;
  134.  
  135. float localMaxFoodCoef <- (1 - ((1 / 15) * abs(15 - grid_x) )) * (1 - ((1 / 15) * abs(15 - grid_y) )) max: 1.0 ;//update: food + foodProd ;
  136.  
  137. float maxFood <- MAX_FOOD_CONST * localMaxFoodCoef ;
  138.  
  139. float foodProd <- (rnd(1000) / 1000) * 0.2 ;
  140.  
  141. float food <- (rnd(1000) / 1000) * maxFood max: maxFood update: food + foodProd ;
  142.  
  143. // int whiteIndex <- int(255 * (1 - food)) update: int(255 * (1 - food)) ;
  144.  
  145. int whiteIndex <- int(255 * (MAX_FOOD_CONST - food) / MAX_FOOD_CONST) update: int(255 * (MAX_FOOD_CONST - food) / MAX_FOOD_CONST) ;
  146.  
  147. rgb color <- rgb(whiteIndex, 255, whiteIndex) update: rgb(whiteIndex, 255, whiteIndex);
  148.  
  149. list<vegetation_cell> neighbours <- (self neighbors_at 2);
  150.  
  151. init
  152. {
  153. //write "X is " + grid_x + " Y is " + grid_y + " Food is" + localMaxFoodCoef + " maxFood is" + maxFood ;
  154. }
  155.  
  156.  
  157. }
  158.  
  159. experiment prey_predator type: gui {
  160. parameter "Initial number of preys: " var: nb_preys_init min: 1 max: 1000 category: "Prey" ;
  161. //parameter "Prey max energy: " var: prey_max_energy category: "Prey" ;
  162. //parameter "Prey max transfert: " var: prey_max_transfert category: "Prey" ;
  163. parameter "Prey energy consumption: " var: prey_energy_consum category: "Prey" ;
  164. output {
  165. display main_display {
  166. grid vegetation_cell lines: #black ;
  167. species prey aspect: base ;
  168. species predator aspect: base ;
  169. }
  170. monitor "Number of preys" value: nb_preys;
  171. monitor "Number of predators" value: nb_predators;
  172.  
  173. }
  174. }
  175. /* Insert your model definition here */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement