seize {simmer} | R Documentation |
Activities for seizing/releasing a resource, by name or a previously selected
one. Resources must be defined in the simulation environment (see
add_resource
).
seize(.trj, resource, amount = 1, continue = NULL, post.seize = NULL, reject = NULL) seize_selected(.trj, amount = 1, id = 0, continue = NULL, post.seize = NULL, reject = NULL) release(.trj, resource, amount = 1) release_selected(.trj, amount = 1, id = 0) release_all(.trj, resource) release_selected_all(.trj, id = 0)
.trj |
the trajectory object. |
resource |
the name of the resource. |
amount |
the amount to seize/release, accepts either a numeric or a callable object (a function) which must return a numeric. |
continue |
a boolean (if |
post.seize |
an optional trajectory object which will be followed after a successful seize. |
reject |
an optional trajectory object which will be followed if the
arrival is rejected. Note that if the arrival is accepted (either in the
queue or in the server) and then it is dropped afterwards due to preemption
or resource shrinkage, then this trajectory won't be executed. Instead, see
|
id |
selection identifier for nested usage. |
Returns the trajectory object.
select
, set_capacity
, set_queue_size
,
set_capacity_selected
, set_queue_size_selected
## simple seize, delay, then release traj <- trajectory() %>% seize("doctor", 1) %>% timeout(3) %>% release("doctor", 1) simmer() %>% add_resource("doctor", capacity=1) %>% add_generator("patient", traj, at(0, 1)) %>% run() %>% get_mon_resources() ## arrival rejection (no space left in the queue) traj <- trajectory() %>% log_("arriving...") %>% seize("doctor", 1) %>% # the second patient won't reach this point log_("doctor seized") %>% timeout(5) %>% release("doctor", 1) simmer() %>% add_resource("doctor", capacity=1, queue_size=0) %>% add_generator("patient", traj, at(0, 1)) %>% run() %>% invisible ## capturing rejection to retry traj <- trajectory() %>% log_("arriving...") %>% seize( "doctor", 1, continue = FALSE, reject = trajectory() %>% log_("rejected!") %>% # go for a walk and try again timeout(2) %>% log_("retrying...") %>% rollback(amount = 4, times = Inf)) %>% # the second patient will reach this point after a couple of walks log_("doctor seized") %>% timeout(5) %>% release("doctor", 1) %>% log_("leaving") simmer() %>% add_resource("doctor", capacity=1, queue_size=0) %>% add_generator("patient", traj, at(0, 1)) %>% run() %>% invisible ## combining post.seize and reject traj <- trajectory() %>% log_("arriving...") %>% seize( "doctor", 1, continue = c(TRUE, TRUE), post.seize = trajectory("admitted patient") %>% log_("admitted") %>% timeout(5) %>% release("doctor", 1), reject = trajectory("rejected patient") %>% log_("rejected!") %>% seize("nurse", 1) %>% timeout(2) %>% release("nurse", 1)) %>% # both patients will reach this point, as continue = c(TRUE, TRUE) timeout(10) %>% log_("leaving...") simmer() %>% add_resource("doctor", capacity=1, queue_size=0) %>% add_resource("nurse", capacity=10, queue_size=0) %>% add_generator("patient", traj, at(0, 1)) %>% run() %>% invisible