Skip to content

PredatorPrey_step2

benoitgaudou edited this page Sep 20, 2021 · 18 revisions

2. Vegetation Dynamic

This second step presents the idea of environment or topological space. Defining a "vegetation" environment allows to define the movement of the preys through dynamic variables (use of the update facet). We will also discover more about displays.

Formulation

  • Definition of a grid (for the vegetation)
  • Definition of a dynamic for each cell (food production)
  • Display of the cell color according to the quantity of food
  • Localization of the prey agents on the cells (at its center)

Model Definition

grid

In GAMA, grids are specific agent species with a particular topology. First, a grid allows yet constrains the movement of other (moving) agents but they can have variables and behaviors.

A grid is defined as follows:

grid grid_name width: nb_cols height: nb_lines neighbors: 4/6/8 {
    ...
}

With:

  • width: number of cells along the x-axis
  • height: number of cells along the y-axis
  • neighbors: neighborhood type (4 - Von Neumann, 6 - hexagon or 8 - Moore)

In our model, we define a grid species, called vegetation_cell composed of 50x50 cells and with a Von Neumann neighborhood. In order for each grid agents (or cell of the grid) to represent the vegetation, we provide them with four variables:

  • max_food: maximum food that a cell can contain -> type: float ; init value: 1.0.
  • food_prod: food produced at each simulation step -> type: float ; init value: random number between 0 and 0.01.
  • food: current quantity of food -> type: float ; init value: random number between 0 and 1.0; at each simulation step: food <- food + food_prod.
  • color: color of the cell -> type: rgb ; init value: color computed according to the food value: more the food value is close to 1.0, greener the color is, more the food value is close to 0, whiter the color is; update: computation of the new color depending on the current level of food (at each simulation step).

The update facet allows to give a behavior to the agents. Indeed, at each simulation step, each agent is activated (by default, in its creation order) and first applies for each dynamic variable (in their definition order) its update expression. In the present case, it allows us to link the displayed color of the cell to its food level.

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))) ;
}

There are several ways to define colors in GAML:

  • the simplest way consists in using the symbol # + the color name (for a limited set of colors): #blue, #red...
  • Another way consists in defining the 3 RGB integer values: rgb(red, green, blue) with red, green and blue between 0 and 255 (as we used in the current model): rgb(0,0,0) for black, rgb(255,255,255) for white, rgb(255,0,0) for red, rgb(0,255,0) for green, or rgb(0,0,255) for blue.

prey agents

In order to relate our prey agents to the vegetation cell grid, we add them with one new attribute: my_cell of type vegetation_cell and for init value one of the vegetation_cell (chosen randomly).

species prey {
    ...
    vegetation_cell my_cell <- one_of (vegetation_cell) ;
} 

It is possible to obtain the list of all agents of a given species by using the name of the species while one_of to pick one element randomly from this list.

We linked each prey agent to a vegetation_cell but we need to locate them onto the cell. To do so, we set the prey location as equals to the location of the vegetation cell (i.e. its centroid), we use in the init block the <- statement that allows to modify the value of a variable:

species prey {
    ...
    init {
        location <- my_cell.location;
    }
}

display

In order to visualize the vegetation, we need to add it to the display. We use for that the statement grid with the optional facet border to draw the border of the cells. Note that grid agents have built-in aspect thus it is not necessary to define one: it is a square with the color attribute as value.

   output {
       display main_display {
           grid vegetation_cell border: #black;
           species prey aspect: base ;
       }
   }

Note that the layers in a display work like layers in a GIS; the drawing order will be respected. In our model, the prey agents will be drawn above the vegetation_cell grid thus they need to be declared afterward.

Complete Model

model prey_predator

global {
    int nb_preys_init <- 200;
    init {
	create prey number: nb_preys_init ;
    }
}

species prey {
    float size <- 1.0 ;
    rgb color <- #blue;
    vegetation_cell my_cell <- one_of (vegetation_cell) ;
		
    init {
	location <- my_cell.location;
    }
		
    aspect base {
	draw circle(size) color: color ;
    }
}

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))) ;
}

experiment prey_predator type: gui {
    parameter "Initial number of preys: " var: nb_preys_init min: 1 max: 1000 category: "Prey" ;
    output {
	display main_display {
	    grid vegetation_cell border: #black ;
	    species prey aspect: base ;
	}
    }
}
  1. What's new (Changelog)
  1. Installation and Launching
    1. Installation
    2. Launching GAMA
    3. Updating GAMA
    4. Installing Plugins
  2. Workspace, Projects and Models
    1. Navigating in the Workspace
    2. Changing Workspace
    3. Importing Models
  3. Editing Models
    1. GAML Editor (Generalities)
    2. GAML Editor Tools
    3. Validation of Models
  4. Running Experiments
    1. Launching Experiments
    2. Experiments User interface
    3. Controls of experiments
    4. Parameters view
    5. Inspectors and monitors
    6. Displays
    7. Batch Specific UI
    8. Errors View
  5. Running Headless
    1. Headless Batch
    2. Headless Server
    3. Headless Legacy
  6. Preferences
  7. Troubleshooting
  1. Introduction
    1. Start with GAML
    2. Organization of a Model
    3. Basic programming concepts in GAML
  2. Manipulate basic Species
  3. Global Species
    1. Regular Species
    2. Defining Actions and Behaviors
    3. Interaction between Agents
    4. Attaching Skills
    5. Inheritance
  4. Defining Advanced Species
    1. Grid Species
    2. Graph Species
    3. Mirror Species
    4. Multi-Level Architecture
  5. Defining GUI Experiment
    1. Defining Parameters
    2. Defining Displays Generalities
    3. Defining 3D Displays
    4. Defining Charts
    5. Defining Monitors and Inspectors
    6. Defining Export files
    7. Defining User Interaction
  6. Exploring Models
    1. Run Several Simulations
    2. Batch Experiments
    3. Exploration Methods
  7. Optimizing Model Section
    1. Runtime Concepts
    2. Optimizing Models
  8. Multi-Paradigm Modeling
    1. Control Architecture
    2. Defining Differential Equations
  1. Manipulate OSM Data
  2. Diffusion
  3. Using Database
  4. Using FIPA ACL
  5. Using BDI with BEN
  6. Using Driving Skill
  7. Manipulate dates
  8. Manipulate lights
  9. Using comodel
  10. Save and restore Simulations
  11. Using network
  12. Headless mode
  13. Using Headless
  14. Writing Unit Tests
  15. Ensure model's reproducibility
  16. Going further with extensions
    1. Calling R
    2. Using Graphical Editor
    3. Using Git from GAMA
  1. Built-in Species
  2. Built-in Skills
  3. Built-in Architecture
  4. Statements
  5. Data Type
  6. File Type
  7. Expressions
    1. Literals
    2. Units and Constants
    3. Pseudo Variables
    4. Variables And Attributes
    5. Operators [A-A]
    6. Operators [B-C]
    7. Operators [D-H]
    8. Operators [I-M]
    9. Operators [N-R]
    10. Operators [S-Z]
  8. Exhaustive list of GAMA Keywords
  1. Installing the GIT version
  2. Developing Extensions
    1. Developing Plugins
    2. Developing Skills
    3. Developing Statements
    4. Developing Operators
    5. Developing Types
    6. Developing Species
    7. Developing Control Architectures
    8. Index of annotations
  3. Introduction to GAMA Java API
    1. Architecture of GAMA
    2. IScope
  4. Using GAMA flags
  5. Creating a release of GAMA
  6. Documentation generation

  1. Predator Prey
  2. Road Traffic
  3. 3D Tutorial
  4. Incremental Model
  5. Luneray's flu
  6. BDI Agents

  1. Team
  2. Projects using GAMA
  3. Scientific References
  4. Training Sessions

Resources

  1. Videos
  2. Conferences
  3. Code Examples
  4. Pedagogical materials
Clone this wiki locally