RinSim has a modular design which means its configuration is flexible and is very extensible. An important concept in RinSim is that of a Model. A model encapsulates a part of a simulation problem and/or a part of functionality. Ideally, a model represents a single concept such that it has high cohesion and can easily be reused in many contexts. An example is RoadModel, one of the most used models in RinSim, it focuses solely on the simulation of transportation. By configuring RinSim with multiple models, it is possible to create a custom simulation environment tailored to the task at hand. The following figure shows a typical configuration:

Jekyll

This is a UML component diagram showing a typical, but simplified, RinSim configuration.

In the above example, RinSim is configured with a number of models that interact with each other. The MAS, Solver, and GUI components can also interact with these models (shown in the image as a single RinSim interface). In this example the MAS and Solver components represent algorithms that are using various RinSim APIs.

The code is organized in a number of Maven modules:

Main modules:

Experiment support modules:

Auxiliary modules:

  • CLI
  • Event
  • FSM
  • Geom
  • IO