These convenience functions facilitate the definition of generators of arrivals for some common cases.
Usage
at(...)
from(start_time, dist, arrive = TRUE)
to(stop_time, dist)
from_to(start_time, stop_time, dist, arrive = TRUE, every = NULL)
when_activated(n = 1)
Arguments
- ...
a vector or multiple parameters of times at which to initiate an arrival.
- start_time
the time at which to launch the initial arrival (numeric or function).
- dist
a function modelling the interarrival times. It is supposed to be an infinite source of values
>= 0
(e.g.,rexp
and the like). If the function provided returns any negative value, the behaviour is undefined.- arrive
if set to
TRUE
(default) the first arrival will be generated atstart_time
and will followdist
from then on. If set toFALSE
, will initiatedist
atstart_time
(and the first arrival will most likely start at a time later thanstart_time
).- stop_time
the time at which to stop the generator (numeric or function).
- every
repeat with this time cycle (numeric or function).
- n
an integer or a callable object (a function) which must return a number of arrivals to generate when activated.
Details
at
generates arrivals at specific absolute times.
from
generates inter-arrivals following a given distribution
with a specified start time.
union of the last two.
to
generates inter-arrivals following a given
distribution with a specified stop time.
from_to
is the union of from
and to
.
when_activated
sets up an initially inactive generator
which generates n
arrivals each time it is activated from any
trajectory using the activity activate
.
Examples
## common to all examples below
# some trajectory
t0 <- trajectory() %>%
timeout(0)
# some distribution
distr <- function() runif(1, 1, 2)
# arrivals at 0, 1, 10, 30, 40 and 43
simmer() %>%
add_generator("dummy", t0, at(0, c(1,10,30), 40, 43)) %>%
run(100) %>%
get_mon_arrivals()
#> name start_time end_time activity_time finished replication
#> 1 dummy0 0 0 0 TRUE 1
#> 2 dummy1 1 1 0 TRUE 1
#> 3 dummy2 10 10 0 TRUE 1
#> 4 dummy3 30 30 0 TRUE 1
#> 5 dummy4 40 40 0 TRUE 1
#> 6 dummy5 43 43 0 TRUE 1
# apply distribution starting at 5 (and no end)
simmer() %>%
add_generator("dummy", t0, from(5, distr)) %>%
run(10) %>%
get_mon_arrivals()
#> name start_time end_time activity_time finished replication
#> 1 dummy0 5.000000 5.000000 0 TRUE 1
#> 2 dummy1 6.779727 6.779727 0 TRUE 1
#> 3 dummy2 8.691301 8.691301 0 TRUE 1
# apply distribution until 5 (starting at 0)
simmer() %>%
add_generator("dummy", t0, to(5, distr)) %>%
run(10) %>%
get_mon_arrivals()
#> name start_time end_time activity_time finished replication
#> 1 dummy0 1.524122 1.524122 0 TRUE 1
#> 2 dummy1 3.033336 3.033336 0 TRUE 1
#> 3 dummy2 4.120966 4.120966 0 TRUE 1
# apply distribution from 8 to 16 h every 24 h:
simmer() %>%
add_generator("dummy", t0, from_to(8, 16, distr, every=24)) %>%
run(48) %>%
get_mon_arrivals()
#> name start_time end_time activity_time finished replication
#> 1 dummy0 8.000000 8.000000 0 TRUE 1
#> 2 dummy1 9.061502 9.061502 0 TRUE 1
#> 3 dummy2 10.428936 10.428936 0 TRUE 1
#> 4 dummy3 11.656277 11.656277 0 TRUE 1
#> 5 dummy4 13.327784 13.327784 0 TRUE 1
#> 6 dummy5 14.434708 14.434708 0 TRUE 1
#> 7 dummy6 15.770088 15.770088 0 TRUE 1
#> 8 dummy7 32.000000 32.000000 0 TRUE 1
#> 9 dummy8 33.304890 33.304890 0 TRUE 1
#> 10 dummy9 35.202841 35.202841 0 TRUE 1
#> 11 dummy10 36.231070 36.231070 0 TRUE 1
#> 12 dummy11 37.441094 37.441094 0 TRUE 1
#> 13 dummy12 39.057158 39.057158 0 TRUE 1
# triggering arrivals on demand from a trajectory
t1 <- trajectory() %>%
activate("dummy")
simmer() %>%
add_generator("dummy", t0, when_activated()) %>%
add_generator("trigger", t1, at(2)) %>%
run() %>%
get_mon_arrivals()
#> name start_time end_time activity_time finished replication
#> 1 trigger0 2 2 0 TRUE 1
#> 2 dummy0 2 2 0 TRUE 1