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