Skip to content

G__GraphicalEditorTutorial

RoiArthurB edited this page Feb 22, 2024 · 1 revision

Creation of a basic disease spreading model

This tutorial illustrates how to create simple agents and make them move in their environment.

Formulation

  • Define the people species with a moving skill
  • Define the move reflex that allows the people agent to move randomly and the infect_others reflex that allows them to infect other people agents.
  • Define the aspect of the people species
  • Add the people species to a display
  • Add a chart display to follow the evolution of the number of infected people

Diagram Definition

Project and diagram

The first step of this tutorial consists in defining a new project, then in defining a new model from a skeleton (choose "skeleton" in "Choose a diagram".

images/graphical_editor/create_diagram.gif

diagram structure

A GAMA diagram is composed of three main types of elements:

  • **world **: this element, generated at the creation of the diagram, that is unique, defines the "world" agent, a special agent of a GAMA model. It represents all that is global to the model: dynamics, variables, actions. In addition, it allows to initialize the simulation (init block).
  • species and grid: these elements define the species of agents composing the model.
  • **experiment **: these elements define a context of the execution of the simulations. In particular, it defines the input (parameters) and output (displays, files...) of a model.

species

images/graphical_editor/create_people.gif

A species represents a «prototype» of agents: it defines their common properties.

Three main elements can be defined in a species:

  • the internal state of its agents (attributes)
  • their behavior
  • how they are displayed (aspects)

In our model, we define a new people species. In addition, we want to add a new capability to our agent: the possibility to move randomly. For that, we add a specific skill to our people agents. A skill is a built-in module that provides the modeler a self-contain and relevant set of actions and variables. The moving provides the agents with several attributes and actions related to movement.

Internal state

An attribute is defined as follows: type of the attribute and name. Numerous types of attributes are available: int (integer), float (floating-point number), string, bool (boolean, true or false), point (coordinates), list, pair, map, file, matrix, agents species, rgb (color), graph, path...

In addition to the attributes the modeler explicitly defines, species "inherits" other attributes called "built-in" variables:

  • A name (name): the identifier of the species
  • A shape (shape): the default shape of the agents to be constructed after the species. It can be a point, a polygon, etc.
  • A location (location): the centroid of its shape.

In our model, we define 2 new attributes to our people agents:

  • is_infected of type bool, with for initial value: false
  • color of type rgb, with for initial value: #green

Behavior

images/graphical_editor/create_reflex.gif

GAMA proposes several ways to define the behavior of a species: dynamic variables (update facet), reflexes...

A reflex is a element (that can be defined to the world or any species) that will be automatically executed at each simulation step if its condition is true. The condition is optional: when it is omitted, the reflex is activated at each time step.

We define a first reflex called move that is activated at each simulation step (no condition) and that makes the people move randomly using the wander action from the moving skill with an amplitude of 30°.

do wander amplitude: 30.0;

We define a second reflex called infect that is activated only when the agent is infected (is_infected = true) and that ask all the people at a distance of 5m to test a probability to be infected.

ask people at_distance 5.0 {
     if flip(0.1) {
	is_infected <- true;
        color <- #red;
     }
}

The ask allows an agent to ask other agents to do something (i.e. to execute a sequence of statements). The at_distance operator allows to get the list of agents (here of people agents) that are located at a distance lower or equal to the given distance (here 5m). The flip operator allows to test a probability.

Display

images/graphical_editor/create_aspect.gif

An agent aspects have to be defined. An aspect is a way to display the agents of a species.

In an aspect, it is possible to draw:

  • A geometry: for instance, the shape of the agent (but it may be a different one, for instance, a circle instead of a complex polygon)
  • An image: to draw icons
  • A text: to draw a text

In our model, we define an aspect for the people agent called circle that draw the agents as a circle of 1m radius with a color that depends on their color attribute. If the people agent is infected, it will be drawn in red, in green otherwise.

global section

The global section represents a specific agent, called world. Defining this agent follows the same principle as any agent and is, thus, defined after a species. The world agent represents everything that is global to the model: dynamics, variables... It allows to initialize simulations (init block): the world is always created and initialized first when a simulation is launched (before any other agents). The geometry (shape) of the world agent is by default a square with 100m for side size but can be redefined if necessary. The step attribute of the world agent allows to specify the duration of one simulation step (by default, 1 step = 1 seconde).

Model initialization

images/graphical_editor/init_sim.gif

The init section of the world allows to initialize the define what will happen at the initialization of a simulation, for instance, to create agents. We use the statement create to create agents of a specific species: create species_name + :

  • number: number of agents to create (int, 1 by default)
  • from: GIS file to use to create the agents (optional, string or file)
  • returns: list of created agents (list)

For our model, we define the init block in order to create nb_people people agents and ask nb_infected_init of them to be infected:

create people number: nb_people;
ask one_of(people) {
   is_infected <- true;
   color <- #red;
}

experiment

An experiment defines how a model can be simulated (executed). Several experiments can be defined for a given model. Two types of experiment exists:

  • gui: experiment with a graphical interface, which displays its input parameters and outputs.
  • batch: Allows to setup a series of simulations (w/o graphical interface).

In our model, a gui experiment called my_GUI_xp is already defined.

output

images/graphical_editor/define_display.gif

Output blocks are defined in an experiment and define how to visualize a simulation (with one or more display blocks that define separate windows). Each display can be refreshed independently by defining the facet refresh_every: nb (int) (the display will be refreshed every nb steps of the simulation).

Each display can include different layers (like in a GIS):

  • Agents lists : agents layer_name value: agents_list aspect: my_aspect;
  • Agents species : species my_species aspect: my_aspect
  • Images: image layer_name file: image_file;
  • Charts : see later.

Note that it is possible to define a opengl display (for 3D display or just to optimize the display) by using the facet type: opengl.

In our model, we add to the existing display my_display a layer for the people species with the circle aspect.

Run simulation

To run the simulation, just click on the button corresponding to the existing experiment (in our case my_GUI_xp) images/graphical_editor/run_sim.gif

Define a chart

It is possible to define a chart layer in a display. In our model, we add a new display called chart in which we define a layer of type chart to display the evolution of the number of infected and susceptible people.

images/graphical_editor/create_chart.gif

images/graphical_editor/sim_with_chart.gif

  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