Mercurial > repos > siwaa > gama
comparison src/MY_predatorPrey.gaml @ 0:f895e266b37a draft
planemo upload for repository https://forgemia.inra.fr/nathalie.rousse/use/-/tree/gama/GAMA/galaxy-tools commit 67d85c013c62c16392b4796af86836b1334f2eef
author | siwaa |
---|---|
date | Tue, 04 Jun 2024 15:18:01 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f895e266b37a |
---|---|
1 /** | |
2 * Name: Breeding of prey and predator agents | |
3 * Author: | |
4 * Description: 6th part of the tutorial : Predator Prey | |
5 * Tags: reproduce, myself, self | |
6 */ | |
7 model prey_predator | |
8 | |
9 global { | |
10 int nb_preys_init <- 200; | |
11 int nb_predators_init <- 20; | |
12 float prey_max_energy <- 1.0; | |
13 float prey_max_transfer <- 0.1; | |
14 float prey_energy_consum <- 0.05; | |
15 float predator_max_energy <- 1.0; | |
16 float predator_energy_transfer <- 0.5; | |
17 float predator_energy_consum <- 0.02; | |
18 float prey_proba_reproduce <- 0.01; | |
19 int prey_nb_max_offsprings <- 5; | |
20 float prey_energy_reproduce <- 0.5; | |
21 float predator_proba_reproduce <- 0.01; | |
22 int predator_nb_max_offsprings <- 3; | |
23 float predator_energy_reproduce <- 0.5; | |
24 int nb_preys -> {length(prey)}; | |
25 int nb_predators -> {length(predator)}; | |
26 bool is_batch <- false; | |
27 | |
28 init { | |
29 create prey number: nb_preys_init; | |
30 create predator number: nb_predators_init; | |
31 write(self); | |
32 } | |
33 | |
34 reflex stop_simulation when: ((nb_preys = 0) or (nb_predators = 0)) and !is_batch { | |
35 do pause; | |
36 } | |
37 } | |
38 | |
39 species generic_species { | |
40 float size <- 1.0; | |
41 rgb color; | |
42 float max_energy; | |
43 float max_transfer; | |
44 float energy_consum; | |
45 float proba_reproduce; | |
46 int nb_max_offsprings; | |
47 float energy_reproduce; | |
48 vegetation_cell my_cell <- one_of(vegetation_cell); | |
49 float energy <- rnd(max_energy) update: energy - energy_consum max: max_energy; | |
50 | |
51 init { | |
52 location <- my_cell.location; | |
53 } | |
54 | |
55 reflex basic_move { | |
56 my_cell <- one_of(my_cell.neighbors2); | |
57 location <- my_cell.location; | |
58 } | |
59 | |
60 reflex eat { | |
61 energy <- energy + energy_from_eat(); | |
62 } | |
63 | |
64 reflex die when: energy <= 0 { | |
65 do die; | |
66 } | |
67 | |
68 reflex reproduce when: (energy >= energy_reproduce) and (flip(proba_reproduce)) { | |
69 int nb_offsprings <- rnd(1, nb_max_offsprings); | |
70 create species(self) number: nb_offsprings { | |
71 my_cell <- myself.my_cell; | |
72 location <- my_cell.location; | |
73 energy <- myself.energy / nb_offsprings; | |
74 } | |
75 | |
76 energy <- energy / nb_offsprings; | |
77 } | |
78 | |
79 float energy_from_eat { | |
80 return 0.0; | |
81 } | |
82 | |
83 aspect base { | |
84 draw circle(size) color: color; | |
85 } | |
86 | |
87 | |
88 | |
89 | |
90 reflex save_result when: (nb_preys > 0) and (nb_predators > 0){ | |
91 save ("cycle: "+ cycle + "; nbPreys: " + nb_preys | |
92 + "; minEnergyPreys: " + (prey min_of each.energy) | |
93 + "; maxSizePreys: " + (prey max_of each.energy) | |
94 + "; nbPredators: " + nb_predators | |
95 + "; minEnergyPredators: " + (predator min_of each.energy) | |
96 + "; maxSizePredators: " + (predator max_of each.energy)) | |
97 to: "results.txt" type: "text" rewrite: (cycle = 0) ? true : false; | |
98 } | |
99 | |
100 | |
101 | |
102 | |
103 } | |
104 | |
105 species prey parent: generic_species { | |
106 rgb color <- #blue; | |
107 float max_energy <- prey_max_energy; | |
108 float max_transfer <- prey_max_transfer; | |
109 float energy_consum <- prey_energy_consum; | |
110 float proba_reproduce <- prey_proba_reproduce; | |
111 int nb_max_offsprings <- prey_nb_max_offsprings; | |
112 float energy_reproduce <- prey_energy_reproduce; | |
113 | |
114 float energy_from_eat { | |
115 float energy_transfer <- 0.0; | |
116 if(my_cell.food > 0) { | |
117 energy_transfer <- min([max_transfer, my_cell.food]); | |
118 my_cell.food <- my_cell.food - energy_transfer; | |
119 } | |
120 return energy_transfer; | |
121 } | |
122 } | |
123 | |
124 species predator parent: generic_species { | |
125 rgb color <- #red; | |
126 float max_energy <- predator_max_energy; | |
127 float energy_transfer <- predator_energy_transfer; | |
128 float energy_consum <- predator_energy_consum; | |
129 float proba_reproduce <- predator_proba_reproduce; | |
130 int nb_max_offsprings <- predator_nb_max_offsprings; | |
131 float energy_reproduce <- predator_energy_reproduce; | |
132 | |
133 float energy_from_eat { | |
134 list<prey> reachable_preys <- prey inside (my_cell); | |
135 if(! empty(reachable_preys)) { | |
136 ask one_of (reachable_preys) { | |
137 do die; | |
138 } | |
139 return energy_transfer; | |
140 } | |
141 return 0.0; | |
142 } | |
143 } | |
144 | |
145 grid vegetation_cell width: 50 height: 50 neighbors: 4 { | |
146 float max_food <- 1.0; | |
147 float food_prod <- rnd(0.01); | |
148 float food <- rnd(1.0) max: max_food update: food + food_prod; | |
149 rgb color <- rgb(int(255 * (1 - food)), 255, int(255 * (1 - food))) update: rgb(int(255 * (1 - food)), 255, int(255 * (1 - food))); | |
150 list<vegetation_cell> neighbors2 <- (self neighbors_at 2); | |
151 } | |
152 | |
153 experiment prey_predator type: gui { | |
154 parameter "Initial number of preys: " var: nb_preys_init min: 0 max: 1000 category: "Prey"; | |
155 parameter "Prey max energy: " var: prey_max_energy category: "Prey"; | |
156 parameter "Prey max transfer: " var: prey_max_transfer category: "Prey"; | |
157 parameter "Prey energy consumption: " var: prey_energy_consum category: "Prey"; | |
158 parameter "Initial number of predators: " var: nb_predators_init min: 0 max: 200 category: "Predator"; | |
159 parameter "Predator max energy: " var: predator_max_energy category: "Predator"; | |
160 parameter "Predator energy transfer: " var: predator_energy_transfer category: "Predator"; | |
161 parameter "Predator energy consumption: " var: predator_energy_consum category: "Predator"; | |
162 parameter 'Prey probability reproduce: ' var: prey_proba_reproduce category: 'Prey'; | |
163 parameter 'Prey nb max offsprings: ' var: prey_nb_max_offsprings category: 'Prey'; | |
164 parameter 'Prey energy reproduce: ' var: prey_energy_reproduce category: 'Prey'; | |
165 parameter 'Predator probability reproduce: ' var: predator_proba_reproduce category: 'Predator'; | |
166 parameter 'Predator nb max offsprings: ' var: predator_nb_max_offsprings category: 'Predator'; | |
167 parameter 'Predator energy reproduce: ' var: predator_energy_reproduce category: 'Predator'; | |
168 | |
169 output { | |
170 display main_display { | |
171 grid vegetation_cell border: #black; | |
172 species prey aspect: base; | |
173 species predator aspect: base; | |
174 } | |
175 | |
176 monitor "Number of preys" value: nb_preys; | |
177 monitor "Number of predators" value: nb_predators; | |
178 } | |
179 } | |
180 | |
181 experiment Optimization type: batch repeat: 2 keep_seed: true until: ( time > 200 ) { | |
182 parameter "Predator energy reproduce:" var: predator_energy_reproduce min: 0.25 max: 1.0 step: 0.25; | |
183 parameter "Batch mode:" var: is_batch <- true; | |
184 | |
185 method tabu maximize: nb_preys + nb_predators iter_max: 10 tabu_list_size: 3; | |
186 | |
187 | |
188 reflex save_results_explo { | |
189 ask simulations { | |
190 save [int(self),prey_max_transfer,prey_energy_reproduce,predator_energy_transfer,predator_energy_reproduce,self.nb_predators,self.nb_preys] | |
191 to: "results.csv" format:csv rewrite: (int(self) = 0) ? true : false header: true; | |
192 } | |
193 } | |
194 } | |
195 |