Find all five of the steady-state queueing metrics for an M/D/1 queue, where D denotes a deterministic ‘distribution,’ i.e., the associated RV (in this case representing service times) is a constant with no variation at all (also called a degenerate distribution). State parameter conditions for your results to be valid; use the same meaning for , , , as we did in this chapter. Compare your results to those if D were replaced by a distribution with mean equal to the constant value from the original D distribution, except having at least some variation.
# Solve for M/D/1 function
get_MD1_Result<-function(lamda,miu){
# p = lamda/miu
Utilization <- round(lamda/miu,3)
# ls = p + (1/2) (p^2/(1-p))
ls<- round(Utilization +((1/2)*((Utilization^2)/(1-Utilization))),3)
# lq = (1/2) (p^2/(1-p))
lq<- round(((1/2)*((Utilization^2)/(1-Utilization))),3)
# ws = (1/miu) +(p/(2*miu*(1-p)))
ws<- round((1/miu)+(Utilization/(2*miu*(1-Utilization))),3)
# wq = (p/(2*miu*(1-p)))
wq<- round((Utilization/(2*miu*(1-Utilization))),3)
df<-data.frame(Utilization,ls,lq,ws,wq)
return(df)
}
# Solve for M/M/1 function
get_MM1_Result<-function(lamda,miu){
# p = lamda/miu
Utilization <- round(lamda/miu,3)
# ls = p/(1-p)
ls<- round((Utilization/(1-Utilization)),3)
# lq = p^2/(1-p)
lq<- round(((Utilization^2)/(1-Utilization)),3)
# ws = 1/miu*(1-p)
ws<- round((1/(miu*(1-Utilization))),3)
# wq = p/miu*(1-p)
wq<- round(Utilization/(miu*(1-Utilization)),3)
df<-data.frame(Utilization,ls,lq,ws,wq)
return(df)
}
IntervalTime<-1.25
ServiceTime<-1
arivalRate=1/IntervalTime
serviceRate=1/ServiceTime
md1<-get_MD1_Result(arivalRate,serviceRate)
mm1<-get_MM1_Result(arivalRate,serviceRate)
models<-rbind(md1,mm1)
row.names(models)<-c("M/D/1","M/M/1")
models
## Utilization ls lq ws wq
## M/D/1 0.8 2.4 1.6 3 2
## M/M/1 0.8 4.0 3.2 5 4
The result of the M/M/1 verses M/D/1 shows that M/D/1 produces lower values that indicates a faster process and timing queueing system.
The following is the Simio model with random exponential arrival time of 1 and deterministic procees service rate of 1/0.9.
Model Parameters:
Model
Experiment
Results
lets find the values using the M/D/1 funaction and then Compare the simulation to the theoretical result
IntervalTime<-1
ServiceTime<-0.9
arivalRate=1/IntervalTime
serviceRate=1/ServiceTime
MD1<-get_MD1_Result(arivalRate,serviceRate)
# represent Utilization in Percent
MD1[1]=MD1[1]*100
# Convert minutes to hours
MD1[4]=MD1[4]/60
MD1[5]=MD1[5]/60
SimoMD<-data.frame(Utilization=89.863,ls=4.9856,lq=4.0024,ws=0.0832,wq=.0668)
models<-rbind(MD1,SimoMD)
dif<-models[1,]-models[2,]
dif
## Utilization ls lq ws wq
## 1 0.137 -0.0356 0.0476 -7e-04 7e-04
models<-rbind(models,dif)
row.names(models)<-c("Theoretical","Simulation ","Differences ")
models
## Utilization ls lq ws wq
## Theoretical 90.000 4.9500 4.0500 0.0825 0.0675
## Simulation 89.863 4.9856 4.0024 0.0832 0.0668
## Differences 0.137 -0.0356 0.0476 -0.0007 0.0007
.