logo资料库

统计计算_模拟系统(R语言).docx

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
1. 设某商店只有一个售货员,假定该店上午 9 点开门,下午 5 点关门(要求把 5 点前进店现还在排队等待的顾客服务完毕才关店),请模拟这种单服务员排队系 统;并估计出顾客平均等待时间、平均服务时间、排队中的顾客平均数(假设顾 客到店的时间间隔和服务时间均为指数分布,其参数可以变化)。 #------------时间模拟法------------ demo.mm1 <- function(T0=0, T1=10000, lambda=1, mu=1.2){ ## 初始化 t <- 0 B <- 0 L <- 0 i <- 0 j <- 0 n <- 0 # 时钟 # 柜员忙标志,0 表示柜员处于空闲状态,1 表示柜员处于忙碌状 态 # 排队等候人数 # 当前到达顾客号 # 正在接受服务顾客号 # 已结束服务顾客数 a <- numeric(0) # 顾客到来时间的集合 s <- numeric(0) # 顾客开始服务时间的集合 e <- numeric(0) # 顾客结束服务时间的集合 l <- numeric(0) # 排队顾客数量的集合 X <- rexp(1, lambda); A <- X # 下一顾客到来时间 E <- NA # 正在服务的顾客结束时刻 ## 时钟反复跳到下一事件发生的时间,并处理事件,更新待发生事件集合 repeat{ if(B==0 || (B==1 && A T1) break if(t == A){ # 待处理到达事件 L <- L+1; l <- c(l,L) i <- i+1; a <- c(a, t) X <- rexp(1, lambda); A <- t + X if(B==0){
B <- 1 L <- L-1; l <- c(l,L) j <- j+1; s <- c(s, t) Y <- rexp(1, mu); E <- t + Y } # if !B } else { # 待处理结束服务事件 B <- 0 n <- n+1; e <- c(e, t) if(L > 0){ L <- L-1; l <- c(l,L) B <- 1 j <- j+1; s <- c(s, t) Y <- rexp(1, mu); E <- t + Y } } # end of 待处理结束服务事件 } # end of repeat ## 把 T1 时刻前进店现还在排队等待的顾客服务完毕 if(length(s)>length(e)){ n <- n+1;e <- c(e, t) } while(L>0){ L <- L-1; l <- c(l,L) j <- j+1;s <- c(s, t) Y <- rexp(1, mu); t <- t + Y n <- n+1;e <- c(e, t) } B <- 0 # 服务完成,将柜员状态调至空闲 ## 计算顾客平均等待时间、平均服务时间、排队中的顾客平均数 I <- a >= T0 & a <= T1 EW <- mean(s[I] - a[I]) ## 顾客平均等待时间 EF <- mean(e[I] - s[I]) ## 顾客平均服务时间 EL <- mean(l) ## 排队中的顾客平均数 cat(' 平均等待时间 EW=', EW,'\n',
' 平均服务时间 EF=', EF,'\n', ' 排队中的顾客平均数 EL=', EL, '\n') } ## 测试运行 set.seed(1) demo.mm1(T1=480, lambda=2, mu=2.4)
分享到:
收藏