In the simulation world, there are two well known types of simulation frameworks: Discrete Event Simulation (or DES) and Multi-Agent Simulation (or MAS).
Both have valuable properties on their own:
... [More]
DES has a good notion of time progress and MAS is a good way to think in role separation, locality and asynchronously.
However, If you want to simulate a real world operation, you need both at once: time progress and separate agents communicating with each other.
For example, a manufacturing process, where the manufacturing agents do a planning step, then execute their plan. The planning is done via communication, and the execution is done (skipped) via virtual time elapse. However, it might be that the virtual time elapse is not uniform among the participants: some do things faster, some slower.
There are tons of scientific papers that imply the existence of such of a combined framework, however, there are very little to none about the implementation details of those.
The most typical way to implement this to do a discrete time advancement and a real time limit how long the agents can communicate with each other: The time advances by 1 minute, and the agents have 100ms to do their communication per simulation step. This way, achieving a 600x speedup.
However, this might seem a waste of time if the agents are quick, or worse: the agents run out of the time slice. There should be a better way to do this.
I'm sure there are lots of non-free environments which might do this nicely, but they are non-free, and probably not written in Java 7.
I decided to create a framework to do just that cheaply and efficiently. I was inspired by the scientific paper Multi-Agent System Simulation Framework by Bryan Horling et al. (2000).
The TiDrA - Time Driven Agent Framework was born.
The TiDrA framework is (currently) rather small, but effective. It utilizes the excellent concurrency primitives of Java 6 and beyond, but the implementation is aimed at Java 7.
You can download just the framework JAR, or the version, where the FindBugs and JSR 305 annotations for software defect detection (latest as of October 2. 2009) annotations are also included. [Less]