The Alchemist Simulator
This website hosts the documentation of the Alchemist Simulator, created towards the end of 2010 as a by-product of the European Project SAPERE, and grown ever since into a full-fledged simulation framework.
Where to start
We recommend that you check out our showcase to understand what you can simulate, and our tutorials to learn how to fiddle with the tool. Once you are on track, we prepared specific how-to guides for the most common operations. To better understand how the simulator works, refer to our explanation section; to master it, building your own extensions and advanced scenarios or customizing what is available, take a look to the reference.
Alchemist for Academia
If you happen to use Alchemist for academic purposes, please add a reference to the following paper:
Here is a BibTeX for LaTeX users:
Index of contents
- TutorialsTutorials are lessons that take the reader by the hand through a series of steps. They are meant to show a beginner that they can achieve something with Alchemist. - QuickstartA super-fast way to get an instance of the simulator up and running. 
- Step-by-step tutorialA (video) guide through the main features of the simulator, as presented at DAIS 2021 
- Protelis Incarnation TutorialReady-to-run examples of increasing complexity with the Protelis incarnation 
- SAPERE Incarnation TutorialReady-to-run examples of increasing complexity with the SAPERE incarnation 
- Scafi Incarnation TutorialReady-to-run examples of increasing complexity with the Scafi incarnation 
 
- Quickstart
- How-to GuidesHow-to guides take the reader through the steps required to solve a real-world problem. They are recipes, directions to achieve a specific end: while a tutorial is what a beginner needs to know, a how-to guide is an answer to a question that only a user with some experience could even formulate. In how-to guides, we assume some knowledge and understanding, we assume that the user already knows how to do basic things and use basic tools. - PreparationPreliminary operations for using Alchemist: installation, setup - Alchemist stand-aloneThe recommended way to run the simulator and fetch all the required modules. 
- Alchemist via GradleThe recommended way to run the simulator and fetch all the required modules. 
 
- Alchemist stand-alone
- SimulationGuides on how to create simulation environments, configure node behaviour, and control the simulation details - Create reusable variablesDefine reusable pieces of information and compute upon them, prepare for the execution of simulation batches. 
- Ensure repeatabilityControl randomness, ensuring reproducibility and replicability of experiments. 
- Cognitive AgentsAgents with realistic human behavior. 
- Create a networkDefine how nodes should be connected with each other. 
- Create LayersDefine data layers that live in the environment 
- Create rich environmentsHow to create complex environments (obstacles, and so on) - Find paths indoorsHow to navigate the environment, especially indoors. 
- Maps and GPS tracesHow to simulate using maps and GPS traces. 
- Simulate indoorHow to create indoor environments based on planimetries. 
- Simulate physical interactions among pedestriansPhysical interaction between nodes 
 
- Find paths indoors
- Deploy NodesHow to place nodes within Alchemist environments - (Irregular) GridsDeployment of nodes in (possibly irregular) grids. 
- Nodes inside shapesDeployment of nodes randomly inside arbitrary shapes. 
- GPS TracesDeployment of nodes on map-based environments using GPS data. 
- GraphsDeployment of nodes into arbitrary graphs. 
 
- (Irregular) Grids
- Export dataSelect which data the simulator should output, in which format, and where. 
- Monitor and Control Simulations through GraphQLMonitor and Control a Simulation through a set of GraphQL APIs. 
- Monitoring Simulations through Custom Output MonitorsCreate custom monitors to track simulation progression and interact with standard hooks. 
- Program NodesHow to define the behavior of nodes - Move nodes on mapsHow to move node around in geospatial environments. 
- Node contentsDefinition of the initial content of nodes. 
 
- Move nodes on maps
- Smart cameras and dronesSimulate robots with a field of view. 
 
- Create reusable variables
- ExecutionExecution of multiple simulations, locally or in a distributed environment - Customize the Swing GUICustomize the look of your simulation. 
- Define the termination criteriaDecide when the simulator should stop and consider the simulation concluded. 
- MultiVeStAHow to integrate MultiVesta in Alchemist 
- Parameter Sweeping with simulation batchesExecute multiple instances of a simulation with different parameters 
- Simulation Engine ConfigurationAvailable simulation engine configurations. 
 
- Customize the Swing GUI
- WorkaroundsPre-concocted solutions to well-known issues - Graphical Glitches in SwingKnown issues with Swing and OpenGL acceleration, especially with legacy AMD/ATi drivers. 
- Memory leaks under LinuxKnown issue of some Java Virtual Machine implementations when requested to use more than 64GB of RAM 
 
- Graphical Glitches in Swing
- Experiment-specific extensionsOne-time changes or additions to the simulator behavior 
- DevelopmentHow to contribute to the project, hence achieving eternal glory - Developer's guideHow to contribute 
- Enrich the GraphQL APIHow to create a new Query, Subscription, or Mutation using the GraphQL API 
- Import Alchemist in an IDEThe recommended way to get and import the Alchemist project in an IDE 
- Build and run the QAHow to locally build and test the simulator 
 
- Developer's guide
 
- Preparation
- ExplanationExplanation, or discussions, clarify and illuminate a particular topic. They are a chance for the documentation to relax and step back from the software, taking a wider view, illuminating it from a higher level or even from different perspectives. You might imagine a discussion document being read at leisure, rather than over the code. - The Alchemist Meta-ModelWhat does Alchemist simulate? A trip on the abstractions that populate the world of Alchemist. 
- The Alchemist Simulation EngineHow does Alchemist simulate? What is at its core? 
- Biochemistry IncarnationBasics of the biochemistry incarnation. 
- Cognitive AgentsAgents with realistic human behavior. 
- PathfindingStrategies to navigate the environment. 
- SAPERE IncarnationBasics of SAPERE and how its concepts are mapped in Alchemist. 
 
- The Alchemist Meta-Model
- ReferenceReference guides are technical, austere, and to the point descriptions of the machinery and how to operate it. Reference guides have one job only: to describe. They are code-determined, because ultimately that’s what they describe: key classes, functions, APIs, and so they list things like functions, fields, attributes and methods, and set out how to use them. - YAML simulation specificationSpecification of the YAML-based language simulations are configured with. 
- API DocsKDoc API docs. Captures both Java and Kotlin API abstractions. 
- Per-module API DocsKDoc API docs. Captures both Java and Kotlin API abstractions. 
- Project organizationLocations where things are found: build files, API implementations 
- Biochemistry IncarnationReference documentation of the reactions language for the biochemistry incarnation. 
- Command Line interfaceAvailable CLI options. 
- Default Graphical User InterfaceRedirect page for the current default graphical interface 
- SAPERE IncarnationReference API for the SAPERE Incarnation. 
- Swing GUIKey mappings for the Java Swing-based graphical interface 
 
- YAML simulation specification