library(queueing) #analizar modelos Markovianos de nacimiento y muerte mediante teoría de colas
#1. Crear objeto de tipo fila.Parametros de la fila
#2. Construir modelo para sacar medidas de desempeno
#3 Medidas de desempeno
#1
#N es el numero de entidades (estdo) al cual se quiere calcular proba de estado estable
Fila1<-NewInput.MM1(lambda = 0.363,mu = 0.5,n = 1)
#2
Fila1=QueueingModel.i_MM1(Fila1)
#3
#vERIFICAR ESTABILIDAD
W(Fila1) #Tiempo en el sistema
## [1] 7.29927
Wq(Fila1)# Tiempo en fila
## [1] 5.29927
L(Fila1) #Numero entidades en sistema
## [1] 2.649635
Lq(Fila1) #Numero entidades en fila
## [1] 1.923635
RO(Fila1) #Utilizacion
## [1] 0.726
Wqq(Fila1) #Tiempo promedio que permanece una entidad en fila cuando hay fila en el sistema
## [1] 7.29927
L(Fila1)-Lq(Fila1)
## [1] 0.726
summary(Fila1)
## lambda mu c k m RO P0 Lq Wq X L W
## 1 0.363 0.5 1 NA NA 0.726 0.274 1.923635 5.29927 0.363 2.649635 7.29927
## Wqq Lqq
## 1 7.29927 3.649635
#Hallar proba en estado estable:
#Determinar n=numero hasta donde quiero obtener probabilidades
Fila2<-NewInput.MMC(lambda = 0.682,mu = 0.33,n = 10,c = 4)
Fila2=QueueingModel.i_MMC(Fila2)
summary(Fila2)
## lambda mu c k m RO P0 Lq Wq X L
## 1 0.682 0.33 4 NA NA 0.5166667 0.1212709 0.2038656 0.2989232 0.682 2.270532
## W Wqq Lqq
## 1 3.329226 1.567398 2.068966
L(Fila2)-Lq(Fila2)
## [1] 2.066667
0.682/0.33
## [1] 2.066667
0.682*0.298
## [1] 0.203236
15.886/0.5
## [1] 31.772
2.270+10.967+2.649
## [1] 15.886
Fila2<-NewInput.MMC(lambda = 0.545,mu = 0.2,n = 10,c = 3)
Fila2=QueueingModel.i_MMC(Fila2)
summary(Fila2)
## lambda mu c k m RO P0 Lq Wq X L
## 1 0.545 0.2 3 NA NA 0.9083333 0.0226099 8.242697 15.12421 0.545 10.9677
## W Wqq Lqq
## 1 20.12421 18.18182 10.90909
L(Fila2)-Lq(Fila2)
## [1] 2.725
0.545/0.2
## [1] 2.725
Lq(Fila2)/0.545
## [1] 15.12421
Wq(Fila2)
## [1] 15.12421
0.545/0.2
## [1] 2.725
0.545*15.125
## [1] 8.243125
# Diferente tipo de colas -------------------------------------------------
#M/M/1/GD/∞/∞
ColaMM1<-NewInput.MM1(lambda = 2,mu = 3,n = 6)
ColaMM1<-QueueingModel.i_MM1(ColaMM1)
summary(ColaMM1)
## lambda mu c k m RO P0 Lq Wq X L W Wqq Lqq
## 1 2 3 1 NA NA 0.6666667 0.3333333 1.333333 0.6666667 2 2 1 1 3
#M/M/c/GD/∞/∞
ColaMM2<-NewInput.MMC(lambda = 5,mu = 3,n = 6,c = 2)
ColaMM2<-QueueingModel.i_MMC(ColaMM2)
summary(ColaMM2)
## lambda mu c k m RO P0 Lq Wq X L W
## 1 5 3 2 NA NA 0.8333333 0.09090909 3.787879 0.7575758 5 5.454545 1.090909
## Wqq Lqq
## 1 1 6
#M/M/1/GD/k/∞
ColaMM3<-NewInput.MM1K(lambda = 2,mu = 3,k = 10)
ColaMM3<-QueueingModel.i_MM1K(ColaMM3)
summary(ColaMM3)
## lambda mu c k m RO P0 Lq Wq X L
## 1 2 3 1 10 NA 0.6627679 0.3372321 1.208573 0.6078414 1.988304 1.871341
## W Wqq Lqq
## 1 0.9411748 0.919879 2.759637
#M/M/∞/GD/∞/∞
ColaMM4<-NewInput.MMInf(lambda = 2,mu = 3,n = 5)
ColaMM4<-QueueingModel.i_MMInf(ColaMM4)
summary(ColaMM4)
## lambda mu c k m RO P0 Lq Wq X L W Wqq Lqq
## 1 2 3 NA NA NA 0.6666667 0.5134171 0 0 2 0.6666667 0.3333333 NA NA
#M/M/c/GD/K/K
ColaMM5<-NewInput.MMCKK(lambda = 2,mu = 3,c = 4,k = 10)
#ColaMM5<-QueueingModel.i_MMCKK(ColaMM5)
#summary(ColaMM5)
# Problema 1 --------------------------------------------------------------
ColaA<-NewInput.MMC(lambda = 80,mu = (1/1.2)*60,c = 2)
ColaA<-QueueingModel.i_MMC(ColaA)
#Literal A
#1. Verificar la estabilidad del sistema, menor a 1
RO(ColaA)
## [1] 0.8
L(ColaA)
## [1] 4.444444
ColaA $L
## [1] 4.444444
#Numero clientes en servicio
L(ColaA)-Lq(ColaA)
## [1] 1.6
#Tabla
barplot(height = c(L(ColaA),L(ColaA)-Lq(ColaA)),
legend.text = c("Numero clientes en total","Numero clientes en servicio"),
space = 0.5,
xlim = c(0,3),
horiz = T,
axes = T,
border = "Black",
col=c("blue","red"),
xlab = "Numero de personas",
main = "Número promedio de personas en el Food Truck en el largo plazo")
#Literal B
#Tiempo promedio en fila
Wq(ColaA)
## [1] 0.03555556
#Tiempo en servicio
W(ColaA)-Wq(ColaA)
## [1] 0.02
#Graficar
library(plotly)
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.1.3
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout

ejex<-c("TiempoCola","TiempoServicio")
ejeY<-c(Wq(ColaA),W(ColaA)-Wq(ColaA))
grafiquita<-plot_ly(x=~ejex, y=~ejeY, type = "bar",
marker=list(color=c('rgb(52, 235, 300)','rgb(1, 200, 225)')))%>%
layout(title="Tiempos del sistema",
xaxis=list(title="Tiempos Tipos"),
yaxis=list(title="Tiempo"))
grafiquita
#Literal C
#Fraccion de tiempo que permanece ociosa:
ColaA<-NewInput.MMC(lambda = 80,mu = (1/1.2)*60,c = 2,n = 10)
ColaA<-QueueingModel.i_MMC(ColaA)
FraccionTiempo<-ColaA$Pn[1]+ColaA$Pn[2]/2
FraccionTiempo
## [1] 0.2
1-RO(ColaA)
## [1] 0.2
#Literal D
#Fraccion de tiempo que permanece ociosa: CON NUEVO EMPLEADO
ColaA<-NewInput.MMC(lambda = 80,mu = (1/1.2)*60,c = 3,n = 10)
ColaA<-QueueingModel.i_MMC(ColaA)
FraccionTiempo<-ColaA$Pn[1]+ColaA$Pn[2]*(2/3)+ColaA$Pn[3]*(1/3)
FraccionTiempo
## [1] 0.4666667
1-RO(ColaA)
## [1] 0.4666667
#Funcion de lo anterior
s=3
ColaD<-NewInput.MMC(lambda = 80,mu = (1/1.2)*60,c = s,n = 10)
ColaD<-QueueingModel.i_MMC(ColaD)
contador<-0
for (i in 0:(s-1)) {
aux<-ColaD$Pn[i+1]*((s-i)/s)
print(aux)
contador<-contador+aux
}
## [1] 0.1871658
## [1] 0.1996435
## [1] 0.0798574
contador
## [1] 0.4666667
# Problema 2 --------------------------------------------------------------
#Numero de cortes en una hora: TASA EFECTIVA DE SALIDA
cola2<-NewInput.MM1K(lambda = 20,mu = (1/12)*60,k = 10)
cola2<-QueueingModel.i_MM1K(cola2)
summary(cola2)
## lambda mu c k m RO P0 Lq Wq X L
## 1 20 5 1 10 NA 0.9999993 7.152559e-07 8.66667 1.733335 4.999996 9.666669
## W Wqq Lqq
## 1 1.933335 1.73334 8.666701
NumeroCortes<-Throughput(cola2)
NumeroCortes
## [1] 4.999996
#Tiempo promedio de permanencia en sistema EN HORAS
tiempo<-cola2$W
tiempo
## [1] 1.933335