统计计算第二次作业(排队论)

2016-09-24  本文已影响55人  hopless

代码部分

arrive<-rexp(2000,0.5)      #生成服从指数分布的随机变量,表示客人到达的间隔时间
arritime<-cumsum(arrive)    #通过累加,获得客人到达的时间点
stat1<-rexp(2000,0.25)      #生成服务台1的服务时间间隔
stat2<-rexp(2000,0.25)      #生成服务台2的服务时间间隔
get_ser<-c()                #记录每个客户开始服务时间
end_ser<-c()                #记录每个客户结束服务时间
i=1;j=1
A_opentime <-0              # A_opeantime表示服务台1允许开始服务时间,也就是上一位客人结束服务的时间
B_opentime<-0.001           # B_opeantime表示服务台2允许开始服务时间,也就是上一位客人结束服务的时间
for(k in 1:2000){
  temp <-arritime[k]
  if(A_opentime < B_opentime){   #如果服务台1比服务台2提前结束上一轮服务,则第k个客户的服务由服务台1进行(为服务台1服务的第i个人)
    if(temp > A_opentime)        #比较客户到达时间与服务台1开始服务时间,若第k个客户尚未到达,服务台1空闲,更新
      A_opentime<-temp           # 服务台1的开始服务时间为第k个客户到达时间
    
    get_ser[k]=A_opentime       #讲第k个客户的开始服务时间 =服务台1的opentime
    end_ser[k]=get_ser[k]+stat1[i]    #讲第k个客户的结束服务时间点 =开始服务时间 +服务台1本次花费时间(从stat1中的第i个)
    A_opentime=end_ser[k]            #更新服务台1的下一次开放时间为第k个客户结束服务时间
    i=i+1                             #更新i到i+1,方便提取服务台1为服务下一个客户花费时间的数据  
  }
  else {
    if(temp >B_opentime)
      B_opentime<-temp  
    
    get_ser[k]=B_opentime
    end_ser[k]=get_ser[k]+stat2[j]
    B_opentime=end_ser[k]
    j=j+1
  }
}
#将所有客户的到达时间,接受服务时间 ,结束服务时间合并起来
A=data.frame(arritime=arritime,get_ser=get_ser,end_ser =end_ser)   
waiting=A[,2]-A[,1]   #计算每个人的等待时间
summary(waiting)

#计算平均队伍长度
line=c(0)
for(i in 2:2000){
  temp2=arritime[i]
  line<-c(line,i-table(get_ser< temp2)[2])
}
summary(line)

模拟结果

当服务间隔时间的期望是3,到达时间间隔的期望是1

#等待时间
> summary(waiting)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    0.0   264.2   498.3   486.4   725.0   957.1 
> #计算平均队伍长度
> summary(line)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   0.00   53.75  110.00  131.50  214.20  299.00 

当服务间隔时间的期望是3,到达时间间隔的期望是2

#等待时间
> summary(waiting)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  0.000   0.000   1.493   4.468   6.412  32.010 
> #计算平均队伍长度
> summary(line)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  0.000   1.000   2.000   4.094   6.000  19.000 

当服务间隔时间的期望是3,到达时间间隔的期望是3

#等待时间
> summary(waiting)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.0000  0.0000  0.0000  1.1400  0.9547 15.2100 
> #计算平均队伍长度
> summary(line)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  0.000   1.000   1.000   1.325   1.000  10.000 
  
上一篇下一篇

猜你喜欢

热点阅读