Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /***
- * Name: Cammage
- * Author: z
- * Description:
- * Tags: Tag1, Tag2, TagN
- ***/
- model Cabbage
- global {
- int nb_preys_init <- 10;
- float prey_energy_consum <- 2.0;
- float prey_min_energy_reproduce <- 100.0;
- int nb_predators_init <- 3;
- float predator_energy_consum <- 0.7;
- float predator_energy_reproduce <- 50.0;
- float predator_min_energy_reproduce <- 100.0;
- float nb_max_energy <- 100.0;
- int nb_max_offsprings <- 1 ;
- int nb_preys -> {length (prey)};
- int nb_predators -> {length (predator)};
- init {
- create prey number: nb_preys_init ;
- create predator number: nb_predators_init ;
- }
- }
- species generic_species {
- rgb color;
- float max_energy <- nb_max_energy;
- float max_transfert;
- float energy_consum;
- float energy_reproduce;
- int max_offsprings <- nb_max_offsprings;
- vegetation_cell myCell <- one_of (vegetation_cell) ;
- float energy <- (rnd(1000) / 1000) * max_energy update: energy - energy_consum max: max_energy ;
- float size <- 1.0 update: 1 + 3 * energy / max_energy ;
- init {
- location <- myCell.location;
- }
- reflex basic_move {
- myCell <- one_of (myCell.neighbours) ;
- location <- myCell.location ;
- }
- reflex die when: energy <= 0 {
- do die ;
- }
- reflex reproduce when: (energy >= energy_reproduce) {
- int nb_offsprings <- int(1 + rnd(max_offsprings - 1));
- create species(self) number: nb_offsprings {
- myCell <- myself.myCell ;
- location <- myCell.location ;
- energy <- myself.energy / nb_offsprings ;
- }
- energy <- energy / nb_offsprings ;
- }
- aspect base {
- draw circle(size) color: color ;
- }
- }
- species prey parent: generic_species {
- init {
- color <- #blue;
- max_transfert <- 1.0 + rnd(9.0);
- energy_consum <- prey_energy_consum ;
- energy_reproduce <- prey_min_energy_reproduce;
- }
- reflex eat when: myCell.food > 0 {
- float energy_transfert <- min([max_transfert, myCell.food]) ;
- myCell.food <- myCell.food - energy_transfert ;
- energy <- energy + energy_transfert ;
- }
- reflex basic_move {
- //vegetation_cell cell2 <- with_max_of(myCell.neighbours, food);
- //myCell <- one_of (myCell.neighbours) ;
- //location <- myCell.location ;
- vegetation_cell cell <- myCell.neighbours with_max_of each.food ;
- myCell <- cell;
- location <- cell.location ;
- }
- }
- species predator parent: generic_species {
- // float energy <- (rnd(1000) / 1000) * max_energy update: energy - energy_consum max: max_energy ;
- list<prey> reachable_preys update: prey inside (myCell);
- init {
- color <- #red ;
- energy_consum <- predator_energy_consum ;
- energy_reproduce <- predator_energy_reproduce ;
- energy_reproduce <- predator_min_energy_reproduce;
- }
- reflex eat when: ! empty(reachable_preys) {
- prey reachable_prey <- one_of (reachable_preys);
- energy <- energy + reachable_prey.energy ;
- ask reachable_prey {
- do die ;
- }
- }
- reflex basic_move {
- //vegetation_cell cell2 <- with_max_of(myCell.neighbours, food);
- //myCell <- one_of (myCell.neighbours) ;
- //location <- myCell.location ;
- prey target <- prey with_min_of (self distance_to each);
- vegetation_cell cell <- myCell.neighbours with_min_of (target distance_to each) ;
- myCell <- cell ;
- location <- cell.location ;
- }
- }
- grid vegetation_cell width: 30 height: 30 neighbors: 4 {
- float MAX_FOOD_CONST <- 10.0;
- float localMaxFoodCoef <- (1 - ((1 / 15) * abs(15 - grid_x) )) * (1 - ((1 / 15) * abs(15 - grid_y) )) max: 1.0 ;//update: food + foodProd ;
- float maxFood <- MAX_FOOD_CONST * localMaxFoodCoef ;
- float foodProd <- (rnd(1000) / 1000) * 0.2 ;
- float food <- (rnd(1000) / 1000) * maxFood max: maxFood update: food + foodProd ;
- // int whiteIndex <- int(255 * (1 - food)) update: int(255 * (1 - food)) ;
- int whiteIndex <- int(255 * (MAX_FOOD_CONST - food) / MAX_FOOD_CONST) update: int(255 * (MAX_FOOD_CONST - food) / MAX_FOOD_CONST) ;
- rgb color <- rgb(whiteIndex, 255, whiteIndex) update: rgb(whiteIndex, 255, whiteIndex);
- list<vegetation_cell> neighbours <- (self neighbors_at 2);
- init
- {
- //write "X is " + grid_x + " Y is " + grid_y + " Food is" + localMaxFoodCoef + " maxFood is" + maxFood ;
- }
- }
- experiment prey_predator type: gui {
- parameter "Initial number of preys: " var: nb_preys_init min: 1 max: 1000 category: "Prey" ;
- //parameter "Prey max energy: " var: prey_max_energy category: "Prey" ;
- //parameter "Prey max transfert: " var: prey_max_transfert category: "Prey" ;
- parameter "Prey energy consumption: " var: prey_energy_consum category: "Prey" ;
- output {
- display main_display {
- grid vegetation_cell lines: #black ;
- species prey aspect: base ;
- species predator aspect: base ;
- }
- monitor "Number of preys" value: nb_preys;
- monitor "Number of predators" value: nb_predators;
- }
- }
- /* Insert your model definition here */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement