Package queuecomputer

Similar documents
Package ECctmc. May 1, 2018

Package cattonum. R topics documented: May 2, Type Package Version Title Encode Categorical Features

Package geojsonsf. R topics documented: January 11, Type Package Title GeoJSON to Simple Feature Converter Version 1.3.

Package ggimage. R topics documented: November 1, Title Use Image in 'ggplot2' Version 0.0.7

Package fastdummies. January 8, 2018

Package ggimage. R topics documented: December 5, Title Use Image in 'ggplot2' Version 0.1.0

Package wrswor. R topics documented: February 2, Type Package

Package WordR. September 7, 2017

Package bisect. April 16, 2018

Package fitur. March 11, 2018

Package datasets.load

Package validara. October 19, 2017

Package weco. May 4, 2018

Package docxtools. July 6, 2018

Package gtrendsr. October 19, 2017

Package vinereg. August 10, 2018

Package strat. November 23, 2016

Package reval. May 26, 2015

Package SEMrushR. November 3, 2018

Package splithalf. March 17, 2018

Package gtrendsr. August 4, 2018

Package kdtools. April 26, 2018

Package qicharts2. March 3, 2018

Package canvasxpress

Package robotstxt. November 12, 2017

Package rsppfp. November 20, 2018

Package sfc. August 29, 2016

Package qualmap. R topics documented: September 12, Type Package

Package gggenes. R topics documented: November 7, Title Draw Gene Arrow Maps in 'ggplot2' Version 0.3.2

Package calpassapi. August 25, 2018

Package tidytransit. March 4, 2019

Package catenary. May 4, 2018

Package githubinstall

Package mixsqp. November 14, 2018

Package ipft. January 4, 2018

Package mfa. R topics documented: July 11, 2018

Package rollply. R topics documented: August 29, Title Moving-Window Add-on for 'plyr' Version 0.5.0

Package facerec. May 14, 2018

Package barcoder. October 26, 2018

Package milr. June 8, 2017

Package coga. May 8, 2018

Package fastqcr. April 11, 2017

Package nmslibr. April 14, 2018

Package balance. October 12, 2018

Package bigreadr. R topics documented: August 13, Version Date Title Read Large Text Files

Package knitrprogressbar

Package gppm. July 5, 2018

Package geogrid. August 19, 2018

Package omu. August 2, 2018

Package tidyimpute. March 5, 2018

Package nngeo. September 29, 2018

Package bayesdp. July 10, 2018

Package vip. June 15, 2018

Package NFP. November 21, 2016

Package climber. R topics documented:

Package readobj. November 2, 2017

Package skynet. December 12, 2018

Package opencage. January 16, 2018

Package embed. November 19, 2018

Package rgho. R topics documented: January 18, 2017

Package comparedf. February 11, 2019

Package quickreg. R topics documented:

Package dyncorr. R topics documented: December 10, Title Dynamic Correlation Package Version Date

Package auctestr. November 13, 2017

Package autocogs. September 22, Title Automatic Cognostic Summaries Version 0.1.1

Package QCAtools. January 3, 2017

Package messaging. May 27, 2018

Package customlayout

Package Numero. November 24, 2018

Package widyr. August 14, 2017

Package cancensus. February 4, 2018

Package TrafficBDE. March 1, 2018

Package gifti. February 1, 2018

Package postal. July 27, 2018

Package ompr. November 18, 2017

Package spark. July 21, 2017

Package condusco. November 8, 2017

Package semver. January 6, 2017

Package CorporaCoCo. R topics documented: November 23, 2017

Package profvis. R topics documented:

Package linkspotter. July 22, Type Package

Package ggextra. April 4, 2018

Package MTLR. March 9, 2019

Package geneslope. October 26, 2016

Package CausalImpact

Package ezsummary. August 29, 2016

Package fingertipsr. May 25, Type Package Version Title Fingertips Data for Public Health

Package packcircles. April 28, 2018

Package diagis. January 25, 2018

Package elmnnrcpp. July 21, 2018

Package ASICS. January 23, 2018

Package preprosim. July 26, 2016

Package rprojroot. January 3, Title Finding Files in Project Subdirectories Version 1.3-2

Package kirby21.base

Package sigqc. June 13, 2018

Package effectr. January 17, 2018

Package edfreader. R topics documented: May 21, 2017

Package rtext. January 23, 2019

Package fitbitscraper

Package epitab. July 4, 2018

Transcription:

Package queuecomputer Title Computationally Efficient Queue Simulation Version 0.8.2 November 17, 2017 Implementation of a computationally efficient method for simulating queues with arbitrary arrival and service times. Depends R (>= 3.3.1) License GPL (>= 2) Encoding UTF-8 LazyData true Imports stats, Rcpp, tidyr, dplyr RoxygenNote 6.0.1 Suggests knitr, rmarkdown, testthat, ggplot2 VignetteBuilder knitr LinkingTo Rcpp, RcppArmadillo (>= 0.7.500.0.0) URL https://github.com/anthonyebert/queuecomputer NeedsCompilation yes Author Anthony Ebert [aut, cre] Maintainer Anthony Ebert <anthonyebert+cran@gmail.com> Repository CRAN Date/Publication 2017-11-17 07:30:46 UTC R topics documented: as.server.list......................................... 2 as.server.stepfun....................................... 3 average_queue....................................... 4 create_batches........................................ 4 depart............................................ 5 lag_step........................................... 6 plot.queue_list........................................ 7 print.queue_list....................................... 8 1

2 as.server.list print.summary_queue_list................................. 8 ql_summary......................................... 9 queue............................................ 10 queue_lengths........................................ 11 queue_step......................................... 12 summary.queue_list..................................... 13 wait_step.......................................... 14 Index 16 as.server.list Creates a "server.list" object from a list of times and starting availability. Creates a "server.list" object from a list of times and starting availability. as.server.list(times, init) times init list of numeric vectors giving change times for each server. vector of 1s and 0s with equal length to times. It represents whether the server starts in an availabile (1) or unavailable (0) state. Value an object of class "server.list", which is a list of step functions of range {0, 1}. See Also as.server.stepfun, queue_step # Create a server.list object with the first server available anytime before time 10, # and the second server available between time 15 and time 30. as.server.list(list(10, c(15,30)), c(1,0))

as.server.stepfun 3 as.server.stepfun Create a server.stepfun object with a roster of times and number of available servers. Create a server.stepfun object with a roster of times and number of available servers. as.server.stepfun(x, y) x y numeric vector giving the times of changes in number of servers. numeric vector one longer than x giving the number of servers available between x values. Details This function uses the analogy of a step function to specify the number of available servers throughout the day. It is used as input to the queue_step function. Alternativily one may use as.server.list to specify available servers as a list, however queue_step is much faster when as.server.stepfun is used as input rather than as.server.list. If any of the service times are large compared to any element of diff(x) then the as.server.list function should be used. Value A list and server.stepfun object with x and y as elements. See Also as.server.list, queue_step, stepfun. servers <- as.server.stepfun(c(15,30,50), c(0, 1, 3, 2)) servers

4 create_batches average_queue Compute time average queue length Compute time average queue length average_queue(times, queuelength) times queuelength numeric vector of times numeric vector of queue lengths n <- 1e3 arrivals <- cumsum(rexp(n)) service <- rexp(n) departures <- queue(arrivals, service, 1) queuedata <- queue_lengths(arrivals, service, departures) average_queue(queuedata$times, queuedata$queuelength) create_batches Creates batches of customer arrivals from a dataframe within a dplyr::do command Creates batches of customer arrivals from a dataframe within a dplyr::do command create_batches(data, arrival_dist, service_rate = NULL, time = 0) data arrival_dist service_rate time a dataframe with parameters for each batch a distribution whose support is strictly positive. Either as an object or a nonempty character string. It represents the distribution of arrival times. a strictly positive number representing the rate parameter in the exponential distribution for the service times. a number greater than or equal to zero.

depart 5 library(dplyr) flight_schedule <- data_frame( flight = c("f1", "F2"), time = c(0, 50), n = c(100, 100), shape = c(5, 5), rate = c(1, 1), log_mu = c(1, 1) ) passenger_df <- flight_schedule %>% group_by(flight) %>% do(create_batches(., arrival_dist = "rgamma", service_rate = 0.4, time =.$time) ) queue_obj <- with(passenger_df, queue_step(arrivals, service, servers = 5) ) if(require(ggplot2, quietly = TRUE)){ plot(queue_obj) } depart get departure times from queue_list object get departure times from queue_list object depart(x) x an queue_list object Value departure times

6 lag_step arrivals <- cumsum(rexp(10)) service <- rexp(10) queue_obj <- queue_step(arrivals, service) depart(queue_obj) queue_obj$departures_df$departures lag_step Add lag to vector of arrival times. Add lag to vector of arrival times. lag_step(arrivals, service) arrivals service Either a numeric vector or an object of class queue_list. It represents the arrival times. A vector of service times with the same ordering as arrivals Value A vector of response times for the input of arrival times and service times. See Also wait_step, queue_step. # Create arrival times arrivals <- rlnorm(100, meanlog = 3) # Create service times service <- rlnorm(100) lag_step(arrivals = arrivals, service = service) # lag_step is equivalent to queue_step with a large number of queues, but it's faster to compute. cbind(queue(arrivals, service = service, servers = 100), lag_step(arrivals = arrivals, service = service))

plot.queue_list 7 plot.queue_list ggplot method for output from queueing model ggplot method for output from queueing model ## S3 method for class 'queue_list' plot(x, which = c(2:6), annotated = TRUE,...) x which annotated an object of class queue_list Numeric vector of integers from 1 to 7 which represents which plots are to be created. See examples. logical, if TRUE annotations will be added to the plot.... other parameters to be passed through to plotting functions. if(require(ggplot2, quietly = TRUE)){ n_customers <- 50 arrival_rate <- 1.8 service_rate <- 1 arrivals <- cumsum(rexp(n_customers, arrival_rate)) service <- rexp(n_customers, service_rate) queue_obj <- queue_step(arrivals, service, servers = 2) plot(queue_obj) } ## Not run: library(ggplot2) ## density plots of arrival and departure times plot(queue_obj, which = 1) ## histograms of arrival and departure times plot(queue_obj, which = 2) ## density plots of waiting and system times plot(queue_obj, which = 3) ## step function of queue length

8 print.summary_queue_list plot(queue_obj, which = 4) ## line range plot of customer and server status plot(queue_obj, which = 5) ## empirical distribution plot of arrival and departure times plot(queue_obj, which = 6) ## End(Not run) print.queue_list print method for objects of class queue_list print method for objects of class queue_list ## S3 method for class 'queue_list' print(x,...) x an object of class queue_list produced by the queue_step function.... further arguments to be passed to other methods print.summary_queue_list Print method for output of summary.queue_list. Print method for output of summary.queue_list. ## S3 method for class 'summary_queue_list' print(x,...) x an object of class summary_queue_list, the result of a call to summary.queue_list().... futher arguments to be passed to or from other methods.

ql_summary 9 Value A list of performance statistics for the queue: "Total customers": Total customers in sinulation, "Missed customers": Customers who never saw a server, "Mean waiting time": The mean time each customer had to wait in queue for service, "Mean response time": The mean time that each customer spends in the system (departure time - arrival time), "Utilization factor": The ratio of available time for all servers and time all servers were used. It can be greater than one if a customer arrives near the end of a shift and keeps a server busy, "Mean queue length": Average queue length, and "Mean number of customers in system": Average number of customers in queue or currently being served. n <- 1e3 arrivals <- cumsum(rexp(n, 1.8)) service <- rexp(n) queue_obj <- queue_step(arrivals, service, servers = 2) summary(queue_obj) ql_summary Summarise queue lengths Summarise queue lengths ql_summary(times, queuelength) times queuelength numeric vector of times numeric vector of queue lengths n <- 1e3 arrivals <- cumsum(rexp(n)) service <- rexp(n) departures <- queue(arrivals, service, 1) queuedata <- queue_lengths(arrivals, service, departures) ql_summary(queuedata$times, queuedata$queuelength)

10 queue queue Compute the departure times for a set of customers in a queue from their arrival and service times. queue is a faster internal version of queue_step. It is not compatible with the summary.queue_list method or the plot.queue_list method. queue(arrivals, service, servers = 1, serveroutput = FALSE, adjust = 1) arrivals service servers serveroutput adjust numeric vector of non-negative arrival times numeric vector of non-negative service times a non-zero natural number, an object of class server.stepfun or an object of class server.list. boolean whether the server used by each customer should be returned. non-negative number, an adjustment parameter for scaling the service times. See Also queue_step n <- 1e2 arrivals <- cumsum(rexp(n, 1.8)) service <- rexp(n) departures <- queue( arrivals, service, servers = 2) head(departures) curve(ecdf(departures)(x) * n, from = 0, to = max(departures), xlab = "Time", ylab = "Number of customers") curve(ecdf(arrivals)(x) * n, from = 0, to = max(departures), col = "red", add = TRUE)

queue_lengths 11 queue_lengths Compute queue lengths from arrival, service and departure data Compute queue lengths from arrival, service and departure data queue_lengths(arrivals, service = 0, departures, epsilon = 1e-10) arrivals service departures epsilon vector of arrival times vector of service times. Leave as zero if you want to compute the number of customers in the system rather than queue length. vector of departure times numeric small number added to departures to prevent negative queue lengths library(dplyr) library(queuecomputer) set.seed(1l) n_customers <- 100 queueoutput_df <- data.frame( arrivals = runif(n_customers, 0, 300), service = rexp(n_customers) ) queueoutput_df <- queueoutput_df %>% mutate( departures = queue(arrivals, service, servers = 2) ) queue_lengths( queueoutput_df$arrivals, queueoutput_df$service, queueoutput_df$departures ) # The dplyr way queueoutput_df %>% do( queue_lengths(.$arrivals,.$service,.$departures)) n_customers <- 1000

12 queue_step queueoutput_df <- data.frame( arrivals = runif(n_customers, 0, 300), service = rexp(n_customers), route = sample(c("a", "b"), n_customers, TRUE) ) server_df <- data.frame( route = c("a", "b"), servers = c(2, 3) ) output <- queueoutput_df %>% left_join(server_df) %>% group_by(route) %>% mutate( departures = queue(arrivals, service, servers = servers[1]) ) %>% do(queue_lengths(.$arrivals,.$service,.$departures)) if(require(ggplot2, quietly = TRUE)){ ggplot(output) + aes(x = times, y = queuelength) + geom_step() + facet_grid(~route) } queue_step Compute the departure times and queue lengths for a queueing system from arrival and service times. Compute the departure times and queue lengths for a queueing system from arrival and service times. queue_step(arrivals, service, servers = 1, labels = NULL, adjust = 1) arrivals service servers labels adjust numeric vector of non-negative arrival times numeric vector of service times with the same ordering as arrival_df. a non-zero natural number, an object of class server.stepfun or an object of class server.list. character vector of customer labels. non-negative number, an adjustment parameter for scaling the service times.

summary.queue_list 13 Value A vector of response times for the input of arrival times and service times. See Also queue, summary.queue_list, plot.queue_list # With two servers set.seed(1) n <- 100 arrivals <- cumsum(rexp(n, 3)) service <- rexp(n) queue_obj <- queue_step(arrivals, service = service, servers = 2) summary(queue_obj) plot(queue_obj, which = 5) # It seems like the customers have a long wait. # Let's put two more servers on after time 20 server_list <- as.server.stepfun(c(20),c(2,4)) queue_obj2 <- queue_step(arrivals, service = service, servers = server_list) summary(queue_obj2) if(require(ggplot2, quietly = TRUE)){ } plot(queue_obj2, which = 5) summary.queue_list Summary method for queue_list object Summary method for queue_list object

14 wait_step ## S3 method for class 'queue_list' summary(object,...) object an object of class queue_list, the result of a call to queue_step.... futher arguments to be passed to or from other methods. wait_step Compute maximum time for each row from two vectors of arrival times. Compute maximum time for each row from two vectors of arrival times. wait_step(arrivals, service) arrivals service Either a numeric vector or an object of class queue_list. It represents the arrival times. A vector of times which represent the arrival times of the second type of customers. The ordering of this vector should have the same ordering as arrivals. Details A good real-world example of this is finding the departure times for passengers after they pick up their bags from the baggage carosel. The time at which they leave is the maximum of the passenger and bag arrival times. Value The maximum time from two vectors of arrival times. See Also lag_step, queue_step.

wait_step 15 set.seed(500) arrivals <- rlnorm(100, meanlog = 4) service <- rlnorm(100) #Airport example ------------------------ # Create a number of bags for each of 100 customers bags <- rpois(100,1) # Create a bags dataframe, with each bag associated with one customer. bags.df <- data.frame(bagid = 1:sum(bags), ID = rep(1:100, bags), times = rlnorm(sum(bags), meanlog = 2)) # Create a function which will return the maximum time from each customer's set of bags. reduce_bags <- function(bagdataset, number_of_passengers){ ID = NULL times = NULL } zerobags <- data.frame(bagid = NA, ID = c(1:number_of_passengers), times = 0) reduced_df <- as.data.frame(dplyr::summarise(dplyr::group_by( rbind(bagdataset, zerobags), ID), n = max(times, 0))) ord <- order(reduced_df$id) reduced_df <- reduced_df[order(ord),] names(reduced_df) <- c("id", "times") return(reduced_df) arrivals2 <- reduce_bags(bags.df, 100)$times # Find the time when customers can leave with their bags. wait_step(arrivals = arrivals, service = arrivals2)

Index as.server.list, 2, 3 as.server.stepfun, 2, 3 average_queue, 4 create_batches, 4 depart, 5 lag_step, 6, 14 plot.queue_list, 7, 13 print.queue_list, 8 print.summary_queue_list, 8 ql_summary, 9 queue, 10, 13 queue_lengths, 11 queue_step, 2, 3, 6, 8, 10, 12, 14 stepfun, 3 summary.queue_list, 13, 13 wait_step, 6, 14 16