7: openDepot0: Opening counter capacity 1
17: customer0: Entering
17: customer0: being served
18: closeDepot0: closing counter
18: closeDepot0: closed counter
31: openDepot1: Opening counter capacity 1
13: customer0: Received notification that bank is closing
17: customer0: leaving
42: closeDepot1: closing counter
Code:
library(simmer)library(simmer.bricks)# define resources and capacities only once.resources = c("counter")capacities = c(1)env = simmer("bank")for (i in seq_along(resources)) {env = env %>%add_resource(resources[[i]], preemptive = TRUE, capacity = 0)}bank_is_closing = trajectory("bank_closing") %>%log_("Received notification that bank is closing") %>%set_prioritization(c(100, 100, FALSE)) %>%timeout(4) # need to compute remaining timeout here.customer =trajectory("customer") %>%log_("Entering") %>%seize("counter", 1) %>%set_attribute("end_time", function() now(env) + 5) %>%trap("closing", handler = bank_is_closing) %>%log_("being served") %>%timeout(5) %>%release("counter") %>%log_("leaving")openResources = function(resources, capacities) {traj = trajectory("open resources")for (i in seq_along(resources)) {resource = resources[[i]]capacity = capacities[[i]]traj = traj %>%log_(paste("Opening", resource, "capacity", capacity)) %>%set_capacity(resource, capacity)}traj}closeResources = function(resources) {# closing resources in parallel so that closing will start for# all resources at the same time.closeResourceTrajectory = function(resource) {trajectory(paste("close", resource)) %>%send(signals = "closing") %>%timeout(0.0001) %>% ###### POSSIBLE BUG ?log_(paste("closing", resource)) %>%seize(resource, function() get_capacity(env, resource)) %>%log_(paste("closed", resource)) %>%set_capacity(resource, 0) %>%release_all(resource)}args = lapply(resources, function(resource) {closeResourceTrajectory(resource)})trajectory("close resource") %>%do_parallel(args, .env = env, wait = TRUE)}bank = env %>%add_generator("customer", customer, at(17), mon=2, priority = 10) %>%add_generator("openDepot", openResources(resources, capacities),from_to(7, 100, function() 24)) %>%add_generator("closeDepot", closeResources(resources),from_to(18, 100, function() 24), priority = 30)#add_generator("priority_customer", customer, at(17.75), mon = 2,# priority = 11, preemptible = 20)#add_generator("closing", closeResources(resources),# from_to(18, 100, function() 24), priority = 5) %>%#add_generator("closingForcefully", closeResources(resources),# from_to(21, 100, function() 24), priority = 30) %>%#add_generator("opening", openResources(resources, capacities),# from_to(7, 100, function() 24), priority = 5)bank %>% run(until = 100)
Hi,
set_attribute("remaining_time", 4.5) %>%timeout(1) %>%set_attribute("remaining_time", 3.5) %>%timeout(1) %>%set_attribute("remaining_time", 2.5) %>%timeout(1) %>%set_attribute("remaining_time", 1.5) %>%timeout(1) %>%set_attribute("remaining_time", 0.5) %>%timeout(1)
Hi,
bank_is_closing = function(timeoutValue) {
trajectory("bank_closing") %>%log_("Received notification that bank is closing") %>%set_prioritization(c(100, 100, FALSE)) %>%
timeout(timeoutValue)}interruptibleTimeout = function(trajectory, timeoutValue) {n = 100trajectory = trajectory %>%trap("closing", handler = bank_is_closing(timeoutValue/n/2))for (i in 1:n) {trajectory = trajectory %>%timeout(timeoutValue/n)}trajectory %>% untrap("closing")}
Hi,
closeResources = function(resources) {# closing resources in parallel so that closing will start for# all resources at the same time.closeResourceTrajectory = function(resource) {trajectory(paste("close", resource)) %>%send(signals = "closing") %>%
#timeout(0.0001) %>% ###### POSSIBLE BUG ?
log_(paste("closing", resource)) %>%seize(resource, function() get_capacity(env, resource)) %>%log_(paste("closed", resource)) %>%set_capacity(resource, 0) %>%release_all(resource)}args = lapply(resources, function(resource) {closeResourceTrajectory(resource)})trajectory("close resource") %>%do_parallel(args, .env = env, wait = TRUE)}
cat('R version', paste0(R.version), '\n')pkgs = (.packages())for (pkg in pkgs) {cat('packages ', pkg, ' ', paste0(packageVersion(pkg)), '\n')}
R version: x86_64-redhat-linux-gnu x86_64 linux-gnu x86_64, linux-gnu 3 5.1 2018 07 02 74947 R R version 3.5.1 (2018-07-02) Feather Spray packages simmer.bricks 0.2.1 packages simmer 4.2.1 packages stats 3.5.1 packages graphics 3.5.1 packages grDevices 3.5.1 packages utils 3.5.1 packages datasets 3.5.1 packages methods 3.5.1 packages base 3.5.1
I now have another issue which relates to the interruptible timeout method I posted earlier:
interruptible_timeout_from_schedule = function(trajectory, attributeName) {n = 10
for (i in 1:n) {args = list(trajectory, paste("timeout step", i))
trajectory = do.call("log_", args)
trajectory = trajectory %>%
trap("closing", handler = is_closing(attributeName, n)) %>%timeout(function() { get_attribute(env, attributeName)/n }) %>%untrap("closing")}trajectory %>%dtlog("resetting priority") %>%
set_prioritization(function() {prio = get_attribute(env, "original_priority")c(prio, prio, FALSE)})}
Hi,
To view this discussion on the web visit https://groups.google.com/d/msgid/simmer-devel/CALEXWq0i_n67zAQdpEytYYwOQ5KH%2BTC9c2Q2OuBWXbCOE7k%2BuQ%40mail.gmail.com.