Skip to content

Comodel

benoitgaudou edited this page Sep 6, 2019 · 5 revisions

Using Comodel

Introduction

In the trend of developing a complex system of multi-disciplinary, composing and coupling models are days by days becoming the most attractive research objectives. GAMA is supporting the co-modeling and co-simulation which are supposed to be a common coupling infrastructure.

Example of a Comodel

A Comodel is a model, especially an agent-based model, composed of several sub-models, called micro-models. A comodel itself could be also a micro-model of another comodel. From the point of view of a micro-model, the comodel is called a macro-model.

A micro-model must be imported, instantiated, and life-controlled by a macro-model.

GAMA co-modeling architecture.

Why and when can we use Comodel?

Co-models ca definitely be very useful when the whole model can be decomposed in several sub-models, each of them representing, in general, a dynamics of the whole model, and that interact through some entities of the model. In particular, it allows several modelers to develop the part of the model dedicated to their expertise field, to test it extensively, before integrating it inside the whole model (where integration tests should not be omitted!).

Use of Comodel in a GAML model

The GAML language has evolved by extending the import section. The old importation told the compiler to merge all imported elements into as one model, but the new one allows modelers to keep the elements coming from imported models separately from the caller model.

Definition of a micro-model

Defining a micro-model of comodel is to import an existing model with an alias name. The syntax is:

import <path to the GAML model> as <identifier>

The identifier is then become the new name of the micro-model.

As an example taken from the model library, we can write:

import "Prey Predator Adapter.gaml" as Organism

Instantiation of a micro-model

After the importation and giving an identifier, micro-model must be explicitly instantiated. It could be done by the create statement.

create <micro-model identifier> . <experiment name> [optional parameter];

The <exeperiment name> is an experiment inside micro-model. This syntax will generate some experiment agents and attach an implicit simulation.

Note: The creation of several instances is not multi-simulation, but multi-experiment. Modelers could create an experiment with multi-simulation by explicitly do the init inside the experiment scope.

As an example taken from the model library, we can write:

global {
    init {
        //instantiate three instant of micro-model PreyPredator
        create Organism.Simple number: 3 with: [shape::square(100), preyinit::10, predatorinit::1] ;
    }
}

Control micro-model life-cycle

A micro-model can be controlled as any normal agent by asking the corresponding identifier, and also be destroyed by the do die; statement. And it can be recreated any time we need.

ask (<micro-model identifier> . <experiment name>  at <number> ) . simulation {
    ...
}

More generally, to schedule all the created simulations, we can do:

reflex simulate_micro_models {
    // ask all simulation do their job
    ask (Organism.Simple collect each.simulation) {
        do _step_;
    }
}

Visualization of the micro-model

The micro-model species could display in comodel with the support of agent layer

agents "name of layer" value: (<micro-model> . <experiment name> at <number>).<get List of agents>;

As an example:

display "Comodel display" {
    agents "agentprey" value: (Organism.Simple accumulate each.get_prey());
    agents "agentpredator" value: (Organism.Simple accumulate each.get_predator());
}

More details

Example of the comodel

The following illustrations are taken from the model library provided with the GAMA platform.

Urbanization model with a Traffic model

Co-modeling example: urbanization model with a Traffic model.

Flood model with Evacuation model

The aim of this model is to couple the two existing models: Flood Simulation and Evacuation.

Toy Models/Evacuation/models/continuous_move.gaml

Co-modeling example: the evacuation model.

Toy Models/Flood Simulation/models/Hydrological Model.gaml

Co-modeling example: the flood model.

The comodel explores the effect of a flood on an evacuation plan:

Co-modeling example: coupling of the flood and evacuation models.

Simulation results:

Co-modeling example: some simulation results.

  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