Proter
Proter is an open-source discrete event simulation library for workflows, written in Scala. It is part of our WorkflowFM framework for formal workflow modelling and management.
It is available under the Apache 2.0 License on GitHub: https://github.com/workflowfm/proter
Website and documentation is available here: http://docs.workflowfm.com/proter/
Proter was initially developed for the simulation of logic-based workflows in WorkflowFM in the context of the DigiFlow project. It was then gradually separated into an independent project for general purpose process simulation. We are currently extending its capabilities to support BPMN models and other modern features.
Two of the main principles of Proter’s design which differentiate it from other business process simulators are prioritization and look-ahead.
Its main goal with respect to simulating the scheduling of prioritized processes can be summarized as follows:
A low priority task should, ideally, never cause delays or waiting time to a higher priority one.
In some cases, particularly when the duration of a task is non-deterministic, this may be out of the control of the scheduler. In all other cases, however, a smart scheduler should be able to prevent such delays to higher priority processes instead of blindingly assigning tasks, as is the case in the common, naive FIFO and similar strategies.
“Look-ahead” refers to the capacity of the (simulated) scheduler to consider future tasks that have not been queued yet. Look-ahead comes naturally to human schedulers, who often need to be aware of imminent tasks or processes, especially if they are of high priority (e.g. an important order is about to be submitted, or an urgent patient is about to arrive in an ambulance). In such cases, a human would never schedule lower priority tasks that might cause delays. Queue-based simulation systems do not have this capability.