It was very clear that the performance of the first simmer version was
lagging behind. The 2.0 release introduces a C++ based engine and comes
with a significant performance boost versus the previous version. While
the performance can always be further improved I’m currently quite
satisfied with it. Future refinement of the code base will however focus
on further improving efficiency.
The syntax also had a massive overhaul. Most notably, a trajectory is
no longer based on a data frame but build up using the
magrittr-style piping philosophy.
The code, installation instructions and documentation can be found at
the simmer GitHub repo.
As an example a simple bank clerk – customer interaction process is
library(simmer) bank_customer_trajectory<- create_trajectory("bank customer") %>% ## see the bank clerk add_seize_event("clerk",1) %>% add_timeout_event("rpois(1, 20)") %>% add_release_event("clerk",1) %>% ## with a 50% chance skip the next three steps add_skip_event("sample(c(0,3), 1)") %>% ## with a 50% chance see the bank director add_seize_event("director",1) %>% add_timeout_event("rpois(1, 15)") %>% add_release_event("director",1) bank_process<- # create simulation with 50 replications & a max time of 360 create_simulator("bank process", n = 50, until = 360) %>% add_resource("clerk", 1) %>% add_resource("director", 1) %>% # add 30 customers with a given inter-arrival time add_entities_with_interval(trajectory = bank_customer_trajectory, n = 30, name_prefix = "customer", interval = "rpois(1, 20)") %>% # run the simulation simmer()
Once the simulation has finished, we can have a look at the results.
# have a look at the flow time plot_evolution_entity_times(bank_process, type = "flow_time")
# have a look at the overall resource utilization plot_resource_utilization(bank_process, c("clerk","director"))
# have a look at the in use moments of the director for replication 5 plot_resource_usage(bank_process, "director", replication_n = 5)
As always, comments, questions, tips & suggestions are very welcome. Either post a GitHub issue or contact me by mail at [email protected]