The GAMA development team is pleased to announce the release of GAMA 1.9.1
This version, while maintaining the power, stability, expressiveness and ease of use of GAMA, brings new capabilities and openings to the platform, making it even more intuitive to use by modelers and even more versatile in terms of applications.
This major release of GAMA contains many new features and fixes, including:
- A much more fluid and powerful IDE, offering support for all the latest technologies, from HiDPI displays to JDK 17 and Apple Silicon processors.
- A new server mode of GAMA, offering a clear and extensible exchange protocol, which completely revolutionizes the way to interact with the platform from R, Python or any web client.
- Increased model exploration possibilities thanks to new calibration and optimization methods, also directly usable in the server mode.
- The addition of the two new data types
image, which make it even easier to load, analyze, visualize and produce raster data
- A much more powerful graph manipulation than previous versions, but still easy to couple with agents
- A focus on urban mobility applications, with
pedestrian, which make it much easier to produce realistic large-scale models.
- The possibility to simulate physical interactions between agents thanks to the new
physical_simulation, which rely on the native
- New and faster display capabilities, offering more intuitive handling of agents and organisation of display surfaces, making it easier than ever to build interactive simulations, serious games or advanced scientific visualisations.
|Java and environments
|Java 11 and x86 (intel architecture)
|Java 17, x86 and ARM architectures (notably Apple Silicon)
|Headless server / connection with Python and R
|Exhaustive sampling and calibration
|Several new sampling methods (e.g. latinhypercube), sensitivity analysis (e.g. Sobol) and calibration
|Extended features with native bullet library and influences/forces computations
advanced_driving (non normative traffic) and
pedestrian (Social force model) skills
|Raster data integration
grid (bad performances above 500x500)
image types allow larger sizes and better performances
|Programmatic with fixed layout
|Import / export to 6 graph file formats (e.g. .graphml, .gml) with various spatial layouts rendering
GAMA Server mode
A new variable type (field) to support the management (import and use) of large raster geographic data. It allows in particular to:
- import large mono/multi-band rasters
- simply access / modify values of spatial grids as simply as before, but with very high performance improvement
- Basic syntax to create and visualize fields: Fields.gaml
- Basic syntax to access/write values in fields: Accessing Fields.gaml
- Use of field to superpose information in a trafic simulation: Traffic and Pollution.gaml
- Use of field to represent flows (water): Waterflow Field Elevation.gaml Use of field to support diffusion process: Anisotropic Diffusion & Uniform Diffusion
- Easier to work with images
- Basic syntax to create an image: Declaring Images.gaml
- Basic syntax to manipulate an image: Image Manipulation.gaml
- Save snapshot of a simulation displays: Manual Snapshot.gaml
A new plugin has been integrated in GAMA that allows to simulate pedestrian movement. This plugin uses Helbing's social force model as a basis to support pedestrian walk and offers tools to reconstruct paths from an open environment and obstacles. This two new features are identified by a skill (
pedestrian) and an operator (
generate_pedestrian_network) respectively. You can find examples in the models below.
- How to build the pedestrian network that agents use to manage the origin and destination of their trip in the open environment: Generate pedestrian paths.gaml
- A comprehensive list of the parameters that makes it possible how agent avoid obstacles, in a simple (Simple environment - walk_to.gaml) and a complex (Complex environment - walk.gaml) environment
The driving skill has been completely redesigned in order to offer a more realistic representation of driver behavior (by explicitly using the Intelligent Driver Model and Lane-change Model MOBIL) and by allowing to take into account multi-lane vehicles - this allows for example to simulate mixed traffic composed of motorcycles and cars. Besides, the behavior of drivers can be custom to represent non normative behavior, such as dangerous take-off, disrespect of signals, signs, speed limit or road direction and lanes.
- An abstract representation of vehicles size (bus, car, motorcycle) and free use of road lanes and direction (Drive Random.gaml)
- An abstract representation of vehicles managing cross section, with collision avoidance, priority, etc. (Simple Intersection.gaml)
- A very small road system with stops to simulate congestion (Following Paths.gaml)
Physics extension improvement
Physics plugin has been completely rewritten and allows to use native implementations of the bullet library in a redesigned framework (where physical agents can coexist with non-physical ones).
- Interaction between static (skill
static_body) and dynamic (skill
dynamic_body) 3D objects (Eroding Vulcano.gaml)
- Manage 3D objects movement based on a Digital Elevation Model (Flow on Terrain.gaml)
Batch experiments have been reworked to better distinguish simulation exploration and model calibration. On the first hand, modelers should engage in simulation exploration if they want to launch many simulations across the parameter space, better understand the contribution of stochasticity and evaluate the specific contribution of given parameters to output variability. On the other hand, modelers should use calibration methods if they want to find parameters values of the models, so the simulation outputs are as close as possible to desired ones. A detailed description is provided in this wiki page.
- A walkthrough of all provided methods to explore, method
exploration, and analyse the sensitivity of your model, including a tool to decide method
- A walkthrough of minimal way to setup calibration, including the new
We implement a way to launch Gama
batch experiment in headless with a simple command line, using the gama-headless.sh bash script with
-batch option. For more information, see the related (wiki page).
Reproducibility and random number generation
- Great effort towards tracking and limiting the use of random generators outside the ones built in GAMA
- Addition of several new random number generators
Great improvements have been done on the displays and specifically on opengl ones. Key points are:
- Lot faster (2 times) on geometries
- Rendering of large-scale images, grids, fields or matrices using the new
meshlayer, with several colouring options
- More flexibility:
camerastatement to specify the dynamic movements of the camera
lightstatements to specify the lighting(s) of the scene
rotatestatement to specify the rotation of the full screen
- Better and more accurate rendering of texts (with 3D, etc.)
- Possibility to choose between several predefined cameras, to save cameras, etc.
- display large rasters
- Allow to easily split or compose the displays
- Possibility to define borderless displays
Support of HiDPI
- HiDPI and various "display zooms" are now supported natively. Displays, text and icons scale up and down accordingly. Only issues remaining is that the text and icons can be blurry and pixelised on some configurations (Windows 10, Windows 11 with 150% zoom, etc.)
Support of dark mode
- Light and dark modes are also now supported out of the box. Preferences allow GAMA to impose its own theme or follow the one defined in the OS. A new syntax highlighting theme for dark mode is accessible from the preferences too.
Addition of wizards and dialogs
- It is now possible to open wizards and dialogs from the GAML code thanks to the user_confirm, user_input_dialog, wizard and wizard_page operators.
Addition of events
- new events can be defined as
- the clipboard can be written and read using the
Advanced programming usages
Additions to GAML
on_change:facet can be added to attributes and parameters to trigger any behaviour in response to a change of value. Particularly useful for defining interactive parameters.
abortstatement can be defined in any agent (incl.
experiment) and executed just before the agent is disposed of.
The new thread skill allows to run actions in a specific thread. In particular, this skill is intended to define the minimal set of behaviours required for agents that are able to run an action in a thread.
- One can now completely manipulate files directly in the gama models with dedicated
rename_file(which can be used to move a file),
saveaccepts more file formats and provides a hook for developers to develop
network skill improvements
To increase the integration between Gama and other applications we improved a lot the network capabilities:
- The communication with web-services is now easier with the possibility to execute post/get/update/delete HTTP requests directly in gaml with extensions of the
sendaction of the networking skill, as described in the
HTTP GET.gamlof the
- Adding support for the websocket protocol in the
- General work on the network skill with communication outside of Gama in mind
Integration of new algorithms for computing shortest paths in graphs.
- BidirectionalDijkstra: default one - ensure to find the best shortest path - compute one shortest path at a time: https://www.homepages.ucl.ac.uk/~ucahmto/math/2020/05/30/bidirectional-dijkstra.html
- DeltaStepping: ensure to find the best shortest path - compute one shortest path at a time: The delta-stepping algorithm is described in the paper: U. Meyer, P. Sanders, $\Delta$-stepping: a parallelizable shortest path algorithm, Journal of Algorithms, Volume 49, Issue 1, 2003, Pages 114-152, ISSN 0196-6774
- CHBidirectionalDijkstra: ensure to find the best shortest path - compute one shortest path at a time. Based on precomputations (first call of the algorithm). Implementation of the hierarchical query algorithm based on the bidirectional Dijkstra search. The query algorithm is originally described the article: Robert Geisberger, Peter Sanders, Dominik Schultes, and Daniel Delling. 2008. Contraction hierarchies: faster and simpler hierarchical routing in road networks. In Proceedings of the 7th international conference on Experimental algorithms (WEA'08), Catherine C. McGeoch (Ed.). Springer-Verlag, Berlin, Heidelberg, 319-333
- TransitNodeRouting: ensure to find the best shortest path - compute one shortest path at a time. Based on precomputations (first call of the algorithm). The algorithm is designed to operate on sparse graphs with low average outdegree. the algorithm is originally described the article: Arz, Julian & Luxen, Dennis & Sanders, Peter. (2013). Transit Node Routing Reconsidered. 7933. 10.1007/978-3-642-38527-8_7.
You can now load / save your graph into dedicated file format such as .gml, .dot or .gefx to build your graph.
- Load agents from a graph file (Graph Agents Importation.gaml)
- Load the entire graph from files (Graph Importation.gaml)
- Save graphs into dedicated files format (Save Graphs.gaml)
Non spatial graph can be rendered using operators to locate nodes on a circle, as a grid lattice or considering connection as forces.
OS and computing environments
GAMA 1.9.1 has been tested on:
- Windows 10 and 11 on Intel processors
- MacOS Monterey, Ventura on Intel & Apple Silicon computers
- Ubuntu 20.04 and 22.04 on Intel processors
Note that this version drops the support for 32 bits architectures.
Support of JDK 17+
Gama 1.9.1 brings compatibility with JDK17+ and should remain compatible for the following JDK versions.
Support of ARM processors
A specific version of GAMA is now built for Apple Silicon processors on macOS. Even if no specific version is produced for the ARM version of Windows, reports show that it works well in emulated mode.
New installers for Windows, Mac (brew) and Linux (aur, deb)
Gama 1.9.1 comes with a dedicated installer for every platform, so it's easier for newcomers to get it working. In addition, the macOS version is now fully signed. Linux and macOS users can also benefit from CLI installers.
New versions of native libraries: SWT, JTS, GeoTools, bullet, JOGL, JGraphT
All the major libraries on which GAMA is relying have been bumped to their latest versions, except GeoTools (version 25) and JGraphT (version 1.5.1).
Changes that can impact models
🔴 Errors 🔴: concepts that cannot be used anymore
gama.pref_display_triangulatorhave been removed
- In experiment, the method statement
explicitdoes not exist anymore. Use
explorationinstead, see the related documentation on
materialtype (and the corresponding
draw:) does not exist anymore and has not been replaced.
- the built-in
SIR, etc.) do not exist anymore and have not been replaced.
fieldcannot be used anymore as a species or variable name.
imagecannot be used anymore as a species or variable name.
to_listcannot be used anymore as a species or variable name.
🔴 Errors 🔴: concepts that need to be written differently
SQLSKILLdoes not exist anymore. Use
dem(...)operators do not exist anymore. Use a combination of
meshlayer to load and draw a digital elevation model
event ['k']should be rewritten as
as_distance_graphnow take different arguments. Please refer to their documentation.
load_graph_from_filehas been removed and replaced by the use of the corresponding graph file types (
simplex_generatorhas been removed and replaced by
🟠 Warnings 🟠:
lines:is deprecated and replaced by
type:is deprecated and replaced by
draw_env:is deprecated and replaced by
synchronized:should now be defined on
camera_pos:is deprecated. Should be replaced by
location:defined on a
camerastatement inside the
camera_interaction:is deprecated. Should be replaced by
locked:defined on a
camerastatement inside the
camera_up_vector:is deprecated. Not used anymore.
camera_look_pos:is deprecated. Should be replaced by
target:defined on a
camerastatement inside the
focus:is deprecated. Should be replaced by
target:defined on a
camerastatement inside the
ambient_light:is deprecated. Should be replaced by
intensity:defined on a
light #ambientstatement inside the
position:is deprecated and replaced by
update:is deprecated and replaced by
color:is deprecated and replaced by
name:now takes a
stringand not an
draw_light:is deprecated and replaced by
type:now takes a
user_inputis deprecated and should be replaced by
empty:is deprecated and replaced by
file:is deprecated and replaced by the direct use of the file name as the default facet
eventnow takes a string for its default facet (preferably the defined constants like
action:is deprecated as the definition of the action should directly follow the statement definition
with_optimizer_typeoperator is deprecated and replaced by
The description of all preferences can be found at this page. A number of new preferences have been added to cover existing or new aspects of the platform. They are summarised below.
- Startup Remember Gama windows sizes
- Startup Several prompts related to the use of workspaces
- Startup Setup a model to run at start
- Edition More options (3) for automatic typing
- Edition Turns experiment buttons into a drop down list
- Syntax Coloring according to Gama theme (light|dark)
- (New) Parameters Customize parameter view
- Parallelism Use all available threads in batch mode
- Chart preferences Choose resolution of charts
- (Removed) Advanced
- OpenGL Limit the number of frames
- OpenGL Sensitivity of keyboard/mouse/trackpad
- OpenGL Ambiant light intensity
- OpenGL Default camera orientation
Data and Operator
- Random Number Generator Display RNG in parameter view
- (Removed) Optimization Many options have been removed to enforce reproducibility
This tab holds experimental preferences that should be use with care
Setting and sharing preferences
Gama 1.9.1 brings new options for setting preferences and sharing them among models.
Passing preferences to GAMA at startup
Modellers running the headless or gui versions of GAMA can now pass preferences to the executable using arguments (either in the headless script or in the
Gama.ini file). The syntax is
-Dpref_name=value (for instance
-Dpref_display_synchronized=true to synchronise displays, including snapshots of headless GAMA, with the simulation).
Global or workspace scopes
The default behaviour of GAMA makes sharing preferences between workspaces and models easy, since they are global to the user account. In some instances, however, it can be necessary to restrict them to a local scope (i.e. a workspace). In that case, launching GAMA with the
-Duse_global_preference_store=false will make it save its preferences in the current workspace and not globally anymore.
You can also check the complete list of the closed issues on the github repository. Keep in mind that this list is incomplete as a lot of problems where solved without being linked to any issue on github (via the mailing list or internally for example).
The library of models has undergone some changes. Besides making sure all the models compile and run fine under the new version of GAMA, it also brings some new models, which are listed below:
Usage of the
- miat.gaml.extensions.pedestrian/models/Pedestrian Skill/models/Complex environment - walk.gaml
- miat.gaml.extensions.pedestrian/models/Pedestrian Skill/models/Generate pedestrian paths.gaml
- miat.gaml.extensions.pedestrian/models/Pedestrian Skill/models/Simple environment - walk_to.gaml
- msi.gama.models/models/Data/Data Exportation/models/Save Graphs.gaml
- msi.gama.models/models/Data/Data Importation/models/Graph Agents Importation.gaml
- msi.gama.models/models/Data/Data Importation/models/Graph Importation.gaml
- msi.gama.models/models/Modeling/Spatial Topology/Graphs/models/Clustering.gaml
Elements of GAML syntax
- msi.gama.models/models/GAML Syntax/Abort statement/Abort.gaml
- msi.gama.models/models/GAML Syntax/Data Types And Structures/Fields.gaml
- msi.gama.models/models/GAML Syntax/Loop And Iterations/Break and Continue.gaml
- msi.gama.models/models/GAML Syntax/System/Clipboard.gaml
- msi.gama.models/models/GAML Syntax/System/Elements of Syntax.gaml
- msi.gama.models/models/GAML Syntax/System/RunThread.gaml
- msi.gama.models/models/GAML Syntax/Variables/Declaration of Parameters.gaml
- msi.gama.models/models/GAML Syntax/Variables/Notifying Variables.gaml
- msi.gama.models/models/Model Exploration/Batch Simulation/Calibration.gaml
- msi.gama.models/models/Model Exploration/Batch Simulation/Exploration.gaml
- msi.gama.models/models/Toy Models/Art/Gama 1.9/models/GAMA 1.9.gaml
- msi.gama.models/models/Toy Models/Games/Snake.gaml
- msi.gama.models/models/Toy Models/K Nearest Neighbours/models/knn.gaml
Declaration and usage of
- msi.gama.models/models/Modeling/Spatial Topology/Fields/Accessing Fields.gaml
- msi.gama.models/models/Toy Models/Waterflow/models/Waterflow Field Elevation.gaml
- msi.gama.models/models/Toy Models/Traffic/models/Traffic and Pollution.gaml
- ummisco.gaml.extensions.maths/models/Diffusion Statement/models/Anisotropic Diffusion (Simple, Field).gaml
- ummisco.gaml.extensions.maths/models/Diffusion Statement/models/Uniform Diffusion (Field).gaml
- msi.gama.models/models/Visualization and User Interaction/Visualization/Building Heatmap.gaml
- msi.gama.models/models/Visualization and User Interaction/Visualization/DEM Generator.gaml
- msi.gama.models/models/Visualization and User Interaction/Visualization/Palettes and Gradients.gaml
- msi.gama.models/models/Visualization and User Interaction/Visualization/Worm Heatmap.gaml
New user interaction modalities
- msi.gama.models/models/Visualization and User Interaction/GUI Design/Parameters and Commands.gaml
- msi.gama.models/models/Visualization and User Interaction/User Interaction/models/Confirm Dialog.gaml
- msi.gama.models/models/Visualization and User Interaction/User Interaction/models/User input.gaml
- msi.gama.models/models/Visualization and User Interaction/User Interaction/models/Wizard.gaml
- msi.gama.models/models/Visualization and User Interaction/Visualization/3D Visualization/models/Camera Definitions.gaml
- msi.gama.models/models/Visualization and User Interaction/Visualization/3D Visualization/models/Camera Shared Zoom.gaml
- msi.gama.models/models/Visualization and User Interaction/Visualization/3D Visualization/models/Specular Effects.gaml
Physics engine demonstrations
- simtools.gaml.extensions.physics/models/Physics Engine/models/Eroding Vulcano.gaml
- simtools.gaml.extensions.physics/models/Physics Engine/models/Flow on Terrain.gaml
- simtools.gaml.extensions.physics/models/Physics Engine/models/Perfect Gas Chamber.gaml
- simtools.gaml.extensions.physics/models/Physics Engine/models/Play Pool.gaml
- simtools.gaml.extensions.physics/models/Physics Engine/models/Stairs.gaml
- simtools.gaml.extensions.physics/models/Physics Engine/models/Testing Restitution.gaml
- simtools.gaml.extensions.physics/models/Physics Engine/models/Testing Steps.gaml
- simtools.gaml.extensions.physics/models/Physics Engine/models/Tricky Fountain.gaml
- simtools.gaml.extensions.traffic/models/Driving Skill/models/Advanced models/Drive Random.gaml
- simtools.gaml.extensions.traffic/models/Driving Skill/models/Advanced models/Following Paths.gaml
- simtools.gaml.extensions.traffic/models/Driving Skill/models/Advanced models/Simple Intersection.gaml
- simtools.gaml.extensions.traffic/models/Driving Skill/models/Advanced models/Traffic.gaml
- simtools.gaml.extensions.traffic/models/Driving Skill/models/Simple model/Simple Traffic Model.gaml
New network capabilities
- ummisco.gama.network/models/Network/2 Available protocols/HTTP Request/HTTP GET.gaml
- ummisco.gama.network/models/Network/2 Available protocols/HTTP Request/HTTP POST.gaml
- ummisco.gama.network/models/Network/2 Available protocols/TCP protocol/TCP Server And Client Example .gaml
- ummisco.gama.network/models/Network/2 Available protocols/TCP protocol/TCP Server Example.gaml
- ummisco.gama.network/models/Network/2 Available protocols/WebSocket protocol/WebSocket Server And Client Example .gaml
- ummisco.gama.network/models/Network/2 Available protocols/WebSocket protocol/WebSocket Server Example.gaml
Usage of the
- ummisco.gaml.extensions.image/models/Images/models/Casting Images.gaml
- ummisco.gaml.extensions.image/models/Images/models/Declaring Images.gaml
- ummisco.gaml.extensions.image/models/Images/models/Image Manipulation.gaml
- ummisco.gaml.extensions.image/models/Images/models/Manual Snapshot.gaml