Mercurial > repos > siwaa > gama
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/MY_predatorPrey.gaml Tue Jun 04 15:18:01 2024 +0000 @@ -0,0 +1,195 @@ +/** +* Name: Breeding of prey and predator agents +* Author: +* Description: 6th part of the tutorial : Predator Prey +* Tags: reproduce, myself, self +*/ +model prey_predator + +global { + int nb_preys_init <- 200; + int nb_predators_init <- 20; + float prey_max_energy <- 1.0; + float prey_max_transfer <- 0.1; + float prey_energy_consum <- 0.05; + float predator_max_energy <- 1.0; + float predator_energy_transfer <- 0.5; + float predator_energy_consum <- 0.02; + float prey_proba_reproduce <- 0.01; + int prey_nb_max_offsprings <- 5; + float prey_energy_reproduce <- 0.5; + float predator_proba_reproduce <- 0.01; + int predator_nb_max_offsprings <- 3; + float predator_energy_reproduce <- 0.5; + int nb_preys -> {length(prey)}; + int nb_predators -> {length(predator)}; + bool is_batch <- false; + + init { + create prey number: nb_preys_init; + create predator number: nb_predators_init; + write(self); + } + + reflex stop_simulation when: ((nb_preys = 0) or (nb_predators = 0)) and !is_batch { + do pause; + } +} + +species generic_species { + float size <- 1.0; + rgb color; + float max_energy; + float max_transfer; + float energy_consum; + float proba_reproduce; + int nb_max_offsprings; + float energy_reproduce; + vegetation_cell my_cell <- one_of(vegetation_cell); + float energy <- rnd(max_energy) update: energy - energy_consum max: max_energy; + + init { + location <- my_cell.location; + } + + reflex basic_move { + my_cell <- one_of(my_cell.neighbors2); + location <- my_cell.location; + } + + reflex eat { + energy <- energy + energy_from_eat(); + } + + reflex die when: energy <= 0 { + do die; + } + + reflex reproduce when: (energy >= energy_reproduce) and (flip(proba_reproduce)) { + int nb_offsprings <- rnd(1, nb_max_offsprings); + create species(self) number: nb_offsprings { + my_cell <- myself.my_cell; + location <- my_cell.location; + energy <- myself.energy / nb_offsprings; + } + + energy <- energy / nb_offsprings; + } + + float energy_from_eat { + return 0.0; + } + + aspect base { + draw circle(size) color: color; + } + + + + + reflex save_result when: (nb_preys > 0) and (nb_predators > 0){ + save ("cycle: "+ cycle + "; nbPreys: " + nb_preys + + "; minEnergyPreys: " + (prey min_of each.energy) + + "; maxSizePreys: " + (prey max_of each.energy) + + "; nbPredators: " + nb_predators + + "; minEnergyPredators: " + (predator min_of each.energy) + + "; maxSizePredators: " + (predator max_of each.energy)) + to: "results.txt" type: "text" rewrite: (cycle = 0) ? true : false; + } + + + + +} + +species prey parent: generic_species { + rgb color <- #blue; + float max_energy <- prey_max_energy; + float max_transfer <- prey_max_transfer; + float energy_consum <- prey_energy_consum; + float proba_reproduce <- prey_proba_reproduce; + int nb_max_offsprings <- prey_nb_max_offsprings; + float energy_reproduce <- prey_energy_reproduce; + + float energy_from_eat { + float energy_transfer <- 0.0; + if(my_cell.food > 0) { + energy_transfer <- min([max_transfer, my_cell.food]); + my_cell.food <- my_cell.food - energy_transfer; + } + return energy_transfer; + } +} + +species predator parent: generic_species { + rgb color <- #red; + float max_energy <- predator_max_energy; + float energy_transfer <- predator_energy_transfer; + float energy_consum <- predator_energy_consum; + float proba_reproduce <- predator_proba_reproduce; + int nb_max_offsprings <- predator_nb_max_offsprings; + float energy_reproduce <- predator_energy_reproduce; + + float energy_from_eat { + list<prey> reachable_preys <- prey inside (my_cell); + if(! empty(reachable_preys)) { + ask one_of (reachable_preys) { + do die; + } + return energy_transfer; + } + return 0.0; + } +} + +grid vegetation_cell width: 50 height: 50 neighbors: 4 { + float max_food <- 1.0; + float food_prod <- rnd(0.01); + float food <- rnd(1.0) max: max_food update: food + food_prod; + rgb color <- rgb(int(255 * (1 - food)), 255, int(255 * (1 - food))) update: rgb(int(255 * (1 - food)), 255, int(255 * (1 - food))); + list<vegetation_cell> neighbors2 <- (self neighbors_at 2); +} + +experiment prey_predator type: gui { + parameter "Initial number of preys: " var: nb_preys_init min: 0 max: 1000 category: "Prey"; + parameter "Prey max energy: " var: prey_max_energy category: "Prey"; + parameter "Prey max transfer: " var: prey_max_transfer category: "Prey"; + parameter "Prey energy consumption: " var: prey_energy_consum category: "Prey"; + parameter "Initial number of predators: " var: nb_predators_init min: 0 max: 200 category: "Predator"; + parameter "Predator max energy: " var: predator_max_energy category: "Predator"; + parameter "Predator energy transfer: " var: predator_energy_transfer category: "Predator"; + parameter "Predator energy consumption: " var: predator_energy_consum category: "Predator"; + parameter 'Prey probability reproduce: ' var: prey_proba_reproduce category: 'Prey'; + parameter 'Prey nb max offsprings: ' var: prey_nb_max_offsprings category: 'Prey'; + parameter 'Prey energy reproduce: ' var: prey_energy_reproduce category: 'Prey'; + parameter 'Predator probability reproduce: ' var: predator_proba_reproduce category: 'Predator'; + parameter 'Predator nb max offsprings: ' var: predator_nb_max_offsprings category: 'Predator'; + parameter 'Predator energy reproduce: ' var: predator_energy_reproduce category: 'Predator'; + + output { + display main_display { + grid vegetation_cell border: #black; + species prey aspect: base; + species predator aspect: base; + } + + monitor "Number of preys" value: nb_preys; + monitor "Number of predators" value: nb_predators; + } +} + +experiment Optimization type: batch repeat: 2 keep_seed: true until: ( time > 200 ) { + parameter "Predator energy reproduce:" var: predator_energy_reproduce min: 0.25 max: 1.0 step: 0.25; + parameter "Batch mode:" var: is_batch <- true; + + method tabu maximize: nb_preys + nb_predators iter_max: 10 tabu_list_size: 3; + + + reflex save_results_explo { + ask simulations { + save [int(self),prey_max_transfer,prey_energy_reproduce,predator_energy_transfer,predator_energy_reproduce,self.nb_predators,self.nb_preys] + to: "results.csv" format:csv rewrite: (int(self) = 0) ? true : false header: true; + } + } +} +