Skip to content

IncrementalModel_step2

RoiArthurB edited this page Feb 27, 2024 · 2 revisions

2. Charts

This step Illustrates how to define monitors and charts in GAMA. In addition, it illustrates how to define a stopping condition for the simulation.

Formulation

  • Definition of new global variables: current_hour, nb_people_infected, nb_people_not_infected, infected_rate.
  • Definition of a monitor to follow the current hour and the nb of people infected.
  • Definition of a series chart to follow the number of people infected and not infected.
  • Definition of a stopping condition (when infected rate = 1).

Incremental model 2: plot of the disease spread.

Model Definition

global variables

In order to define dynamic variable able to update itself, we use the update facet of variable definition. Indeed, at each simulation step, all the agents (and the world agent) apply for each dynamic variable (in their definition order) its update expression.

We add 3 new global variables:

  • nb_people_infected (int): nb of people with is_infected is true (use of the list count condition operator that count the number of elements of the list for which the condition is true)
  • nb_people_not_infected (int): nb_people - nb_people_infected
  • infected_rate (float): nb_people_infected / nb_people
global{
    ...
    int nb_people_infected <- nb_infected_init update: people count (each.is_infected);
    int nb_people_not_infected <- nb_people - nb_infected_init update: nb_people - nb_people_infected;
    float infected_rate update: nb_people_infected/nb_people;
    ...
}

stopping condition

We add a new reflex that stops the simulation when all the people agents are infected (i.e. if the infected_rate is equal to 1). To stop the simulation, we use the pause global action.

global {
    ...
    reflex end_simulation when: infected_rate = 1.0 {
	do pause;
    }
}

monitor

A monitor allows the modeler to follow the value of an arbitrary expression in GAML. It has to be defined in an output section. A monitor is defined as follows:

    monitor monitor_name value: an_expression refresh:every(nb_steps);

With:

  • value: mandatory, its value that will be displayed in the monitor.
  • refresh: bool, optional: if the expression is true, compute (default is true).

In this model, we define 2 monitors to follow: (i) the value of the variable infected_rate, and (ii) to follow the time in the simulation (we will display the hour day).

As detailed in the dedicated page, GAML language provides a datatype to manage date (with second, minute, hour, day, month and year), and compute automatically the date in the simulation from the global variable starting_date of the simulation and the step value: this value is stored in the current_date global variable. To monitor the current hour, we can access to the hour attribute of this variable (current_date.hour).

experiment main_experiment type: gui {
    ...
    output {
	monitor "Current hour" value: current_date.hour;
	monitor "Infected people rate" value: infected_rate;
	...
    }
}

chart

GAMA can display various chart types, for example:

  • Time series
  • Pie charts
  • Histograms

A chart must be defined in a display: it behaves exactly like any other layer. Definition of a chart:

chart chart_name type: chart_type  {
     [data]
}

The data to draw are defined inside the chart block with the data statement:

data data_legend value: data_value

We add a new display called "chart" and refreshed every 10 simulation steps. Inside this display, we define a chart of type series:

  • "Disease spreading"; background: white; of type series and style spline (no remove the markers)
    • data1: susceptible; color : green
    • data2: infected; color : red
experiment main_experiment type: gui{
    ...
    output {
	...
	display chart refresh: every(10#cycles) {
	    chart "Disease spreading" type: series style: spline {
		data "susceptible" value: nb_people_not_infected color: #green;
		data "infected" value: nb_people_infected color: #red;
	    }
	}
    }
}

Complete Model

https://github.com/gama-platform/gama.old/blob/GAMA_1.9.2/msi.gama.models/models/Tutorials/Incremental%20Model/models/Incremental%20Model%202.gaml
  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