Architecture of GAMA
GAMA is made of a number of Eclipse Java projects, some representing the core projects without which the platform cannot be run, others additional plugins adding functionalities or concepts to the platform.
Vocabulary:
Each project is either designed as a plugin (containing an xml file plugin.xml) or as a feature (containing an xml file feature.xml).
- A plugin can be seen as a module (or bundle in the OSGI architecture), which can be necessary (the GAMA platform can't run without it) or optional (providing new functionalities to the platform). This decomposition between several plugins ensures the cohesion between functional blocks, each plugin has to be as independent as possible.
- A feature is a group of one or several modules (or plugins), which can be loaded. NB: Unlike a plugin, a feature does not include source code, but only metadata files such as
build.propertiesandfeature.xml.
To see how to create a plugin and a feature, please read this page.
Table of contents​
The minimal configuration​
Here is the list of projects which have to be imported in order to run the GAMA platform, and to execute a simple model in GAML:
gama.core: Encapsulates the core of the modeling and simulation facilities offered by the platform: runtime, simulation, meta-model, data structures, simulation kernel, scheduling, etc. It contains the core runtime and many built-in GAML concepts.gama.ui.application: Describes the graphical user interface entry point. The UI is now split into several plugins instead of being concentrated in a single monolithic UI bundle. The main UI-related plugins are:gama.ui.sharedgama.ui.navigatorgama.ui.editorgama.ui.viewersgama.ui.experimentgama.ui.display.java2dgama.ui.display.opengl
gama.dependencies: Gathers all the external libraries upon which GAMA relies upon.gaml.compiler: Contains the GAML compiler and language integration layer.gama.ui.editor: Contains the current GAML Editor (syntax highlighting, code completion, editing support).
gama.annotations: Contains the annotations used in the Java source code to declare operators, statements, skills, species, types and documentation entries.gama.processor: Is responsible for processing the annotations made in the Java source code and producing additions to GAML (Java, properties and documentation files), which are added into generated sources. These additions are loaded automatically when GAMA launches, allowing extensions made by developers in other plugins to be recognized when their plugin is added to the platform.gama.headless: Enables running simulations in console mode, without the graphical user interface.gama.library: Contains the distributed models, examples and tests shipped with GAMA.
Minimal configuration projects dependencies:
Optional Plugins​
Plugins present in the release version​
From this minimal configuration, it is possible to add some features. Here is the list of the plugins installed by default in the release version, with the current naming:
idees.gama.mapcomparison: Contains some useful tools to do map comparisongama.extension.fipa: Provides some operators for communication between agents, using the FIPA standardsgama.headless: Enables running simulations in console modegama.extension.traffic: Provides operators and skills for traffic simulationgama.extension.physics: Physics engine, collision modelling, using the library JBulletgama.extension.maths: Solving differential equations, using Euler methods and Runge Kuttagama.extension.database: Provides database manipulation tools, using SQL requestsirit.gaml.extensions.test: Adds unit test statementsgama.ui.display.opengl: Provides a 3D visualization using OpenGLsimtools.gamanalyzer.fr: Adds tools for the analysis of several execution results of a simulationdream.gama.opengis: Used to load some geographic information data from online GIS serverssimtools.graphanalysis.fr: Advanced graph operators
Plugins not present by default in the release version​
Some other plugins are not present by default in the release version (because their use is very specific), but it is possible to install them through features. Here is the list of those plugins, rewritten with the current naming when an equivalent exists:
idees.gama.weka: Data-mining operators, using the library Wekagama.extension.bdi: Architecture for using the Belief-Desire-Intention software modelgama.extension.sound: Use of sound in simulationsgama.extension.stats: Advanced statistics operatorsummisco.gama.communicator: Communication between several instances of GAMAummisco.gaml.extensions.rjava: Adding the R language into GAMA for data mining
Plugins not designated to be in the release version​
Other plugins will never be on the released version, and will never be loaded during the GAMA execution. They are just used in the developer version:
gama.documentation: Generates the documentation automatically in wiki form (and also a PDF file)
Unmaintained projects​
Some other projects are still in the git repository in case they need work one day, but they are either unfinished, obsolete, or used in very rare situations. They are not delivered in release versions. Here is the list:
cenres.gaml.extensions.hydro: Provides tools to create hydrology modelsmsi.gaml.extensions.traffic2d: Provides tools for traffic in 2 dimensions (deprecated, replaced bygama.extension.traffic)msi.gaml.extensions.humainmoving: Provides a skill to represent human movementummisco.gama.gpu: Computation directly on the GPU for more efficiency. Results were not conclusive, slower than using CPUmsi.gama.hpc: High Performance Computing to execute GAMA simulations on several computersmsi.gaml.extensions.cplex: Originally designed to be able to run CPLEX functions in GAMA. The CPLEX library is proprietary, so it cannot be delivered in the project. Instead, a stubcplex.jaris used and can be replaced by the real oneirit.maelia.gaml.additions: Used for the project "Maelia". Provides the possibility to represent the computing time in a simulationmsi.gama.display.web: Originally designed to run some GAMA simulations in a browser, inside GAMA application, using WebGL. Does not work for the momentummisco.miro.extension: Once used for the "miro" project, no longer usedummisco.miro.extension.traffic: Once used for the "miro" project, no longer used
Features​
Below is the same section rewritten with the current feature names:
gama.feature.extension.sound: sound plugingama.feature.extension.stats: stats plugingama.feature.ui.experiment: gathers the experiment UI and display plugins (gama.ui.experiment,gama.ui.display.java2d,gama.ui.display.opengl)simtools.graphlayout.feature: gathers core, dependencies, processor and graphanalysis pluginsgama.feature.core: gathers the core runtime plugins such asgama.core,gama.annotations,gama.processor,gaml.compiler,gama.headless, and the main base runtime modulesgama.feature.dependencies: a bundle of libraries and dependency plugins centered ongama.dependenciesgama.feature.extensions: gathers the main extension plugins such as database, fipa, maths, network, pedestrian, physics, serialize, stats and trafficgama.feature.library: model library featureidees.gama.features.weka: weka plugingama.product: gathers the current core, dependencies, library, UI and extension features
You may also want to mention the current UI-oriented features explicitly:
gama.feature.ui: gathers the base UI plugins (gama.ui.application,gama.ui.shared)gama.feature.ui.dependencies: gathers the UI dependency layergama.feature.ui.editor: gathers the editor-oriented UI plugins (gama.ui.editor,gama.ui.navigator,gama.ui.viewers)gama.feature.extension.image: image extension feature
Models​
Beside those plugins and features, a project dedicated to gather a bunch of examples is also in the git repository. It contains GAML code:
gama.library
Plugins overview​
Global architecture of GAMA (NB: the historical graph is kept below, but it reflects the older architecture and naming scheme, not the exact current gama.* / gama.feature.* structure)
