Skip to contents

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 at start_time and will follow dist from then on. If set to FALSE, will initiate dist at start_time (and the first arrival will most likely start at a time later than start_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.

Value

Returns a generator function (a closure).

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.

See also

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.080750 6.080750             0     TRUE           1
#> 3 dummy2   7.915083 7.915083             0     TRUE           1
#> 4 dummy3   9.515844 9.515844             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.007399 1.007399             0     TRUE           1
#> 2 dummy1   2.473793 2.473793             0     TRUE           1
#> 3 dummy2   3.971570 3.971570             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.732882  9.732882             0     TRUE           1
#> 3   dummy2  11.505403 11.505403             0     TRUE           1
#> 4   dummy3  13.380004 13.380004             0     TRUE           1
#> 5   dummy4  14.554945 14.554945             0     TRUE           1
#> 6   dummy5  15.589186 15.589186             0     TRUE           1
#> 7   dummy6  32.000000 32.000000             0     TRUE           1
#> 8   dummy7  33.402328 33.402328             0     TRUE           1
#> 9   dummy8  34.597998 34.597998             0     TRUE           1
#> 10  dummy9  36.001536 36.001536             0     TRUE           1
#> 11 dummy10  37.065198 37.065198             0     TRUE           1
#> 12 dummy11  38.453899 38.453899             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