DiscereteEventsLite is a lightweight package for running discrete event simulations. In DiscreteEventsLite, events are registered to a priority queue and executed in temporal sequence. Some inspiration for this package was taken from DiscreteEvents, which is a well-designed, comprehensive framework for discrete event simulation.
I created this package because I wanted a package that is simple and hackable. In addition, I needed a package with the ability to remove events based on id or other criteria, optionally print event traces, and optionally log events. The package you should use will depend on your goals. If you want a package that is lightweight and easily hackable, this package might be suitable for you. Otherwise, you might prefer a full-featured framework, such as DiscreteEvents. You might also checkout SimJulia, or EventStimulation for other approaches.
using DiscreteEventsLite # Define some functions f(a; k) = println(a, k) g(scheduler, message) = register!(scheduler, f, 5.0, message; k=2) # Create a scheduler scheduler = Scheduler(store=true) # some examples of event scheduling register!(scheduler, f, after, .99, "hi "; k=1, description="some event") register!(scheduler, g, at, 2.0, scheduler, "I'm done "; id = "1") register!(scheduler, stop!, at, 10.5, scheduler) register!(scheduler, ()->(), every, 1.0; description="repeating") # Run the model run!(scheduler, 11) # Optionally print the events if store=true replay_events(scheduler)
For more information, use the help function:
] DiscreteEventsLite ] register!
The functionality of the package can be extended by creating subtypes of
AbstractScheduler, and use multiple dispatch to add desired behavior.