Lieral a
library(markovchain)
## Package: markovchain
## Version: 0.8.6
## Date: 2021-05-17
## BugReport: https://github.com/spedygiorgio/markovchain/issues
# X = # rollos en la prensa en t
# Y = # rollos en recubrimiento en t
# Z = # rollos en satinado en t
#Capacidades
capPre<-3
capRec<-2
capSat<-2
#Tasas de servicio
tasaPre<-0.104
tasaRec<-1/8
tasaSat<-1/5
#Tasa de llegada
tasaLlegada<-3*1/60
#Estados de conjunta
estados<-c()
for (i in 0:capPre) {
for (j in 0:capRec) {
for (k in 0:capSat) {
estados<-c(estados,paste(i,j,k,sep = ","))
}
}
}
estados
## [1] "0,0,0" "0,0,1" "0,0,2" "0,1,0" "0,1,1" "0,1,2" "0,2,0" "0,2,1" "0,2,2"
## [10] "1,0,0" "1,0,1" "1,0,2" "1,1,0" "1,1,1" "1,1,2" "1,2,0" "1,2,1" "1,2,2"
## [19] "2,0,0" "2,0,1" "2,0,2" "2,1,0" "2,1,1" "2,1,2" "2,2,0" "2,2,1" "2,2,2"
## [28] "3,0,0" "3,0,1" "3,0,2" "3,1,0" "3,1,1" "3,1,2" "3,2,0" "3,2,1" "3,2,2"
# Matriz de probabilidad --------------------------------------------------
matQ<-matrix(0,nrow = length(estados), ncol=length(estados),dimnames = list(estados,estados))
for (fila in estados) {
for (columna in estados) {
i<-as.numeric(strsplit(fila,",")[[1]][1])
j<-as.numeric(strsplit(fila,",")[[1]][2])
k<-as.numeric(strsplit(fila,",")[[1]][3])
iprima<-as.numeric(strsplit(columna,",")[[1]][1])
jprima<-as.numeric(strsplit(columna,",")[[1]][2])
kprima<-as.numeric(strsplit(columna,",")[[1]][3])
#Rollo entra al sistema
if (iprima==i+1&jprima==j & kprima==k & i<capPre) {
matQ[fila,columna]<-tasaLlegada
}
#Rollo sale de prensa a recubrimiento
if (iprima==i-1&jprima==j+1 & kprima==k & i>0 & j<capRec) {
matQ[fila,columna]<-tasaPre
}
#Rollo sale de recubrimiento a alisado
if (iprima==i &jprima==j-1 & kprima==k+1 & j>0 & k<capSat) {
matQ[fila,columna]<-tasaRec*min(j,2)
}
#Rollo sale de alisado
if (iprima==i &jprima==j & kprima==k-1 & k>0 ) {
matQ[fila,columna]<-tasaSat*11/12
}
}
}
diag(matQ)<-(-rowSums(matQ))
rowSums(matQ)
## 0,0,0 0,0,1 0,0,2 0,1,0 0,1,1
## 0.000000e+00 1.387779e-17 1.387779e-17 1.387779e-17 1.387779e-17
## 0,1,2 0,2,0 0,2,1 0,2,2 1,0,0
## 1.387779e-17 1.387779e-17 1.387779e-17 1.387779e-17 0.000000e+00
## 1,0,1 1,0,2 1,1,0 1,1,1 1,1,2
## -2.775558e-17 -2.775558e-17 -2.775558e-17 -2.775558e-17 -2.775558e-17
## 1,2,0 1,2,1 1,2,2 2,0,0 2,0,1
## 1.387779e-17 1.387779e-17 1.387779e-17 0.000000e+00 -2.775558e-17
## 2,0,2 2,1,0 2,1,1 2,1,2 2,2,0
## -2.775558e-17 -2.775558e-17 -2.775558e-17 -2.775558e-17 1.387779e-17
## 2,2,1 2,2,2 3,0,0 3,0,1 3,0,2
## 1.387779e-17 1.387779e-17 0.000000e+00 1.387779e-17 1.387779e-17
## 3,1,0 3,1,1 3,1,2 3,2,0 3,2,1
## 1.387779e-17 1.387779e-17 1.387779e-17 0.000000e+00 0.000000e+00
## 3,2,2
## 0.000000e+00
#CRear cadena de markov
cadena<-new(Class="ctmc",states=estados,generator=matQ)
# Literal B ---------------------------------------------------------------
# Tiempo de ocupacion -----------------------------------------------------
#Elemnetos importantes
t<-7*60*60
alpha<-rep(0,length(estados))
names(alpha)<-estados
alpha["0,0,0"]<-1
vectorR<-(-diag(matQ))
vectorL<-(1/vectorR)
#Construir EMC
EMC<-matrix(0,nrow = length(estados),ncol = length(estados),dimnames = list(estados,estados))
for(i in estados){
for(j in estados){
if(i!=j){
EMC[i,j]<-matQ[i,j]/(-matQ[i,i])
}
}
}
rowSums(EMC)
## 0,0,0 0,0,1 0,0,2 0,1,0 0,1,1 0,1,2 0,2,0 0,2,1 0,2,2 1,0,0 1,0,1 1,0,2 1,1,0
## 1 1 1 1 1 1 1 1 1 1 1 1 1
## 1,1,1 1,1,2 1,2,0 1,2,1 1,2,2 2,0,0 2,0,1 2,0,2 2,1,0 2,1,1 2,1,2 2,2,0 2,2,1
## 1 1 1 1 1 1 1 1 1 1 1 1 1
## 2,2,2 3,0,0 3,0,1 3,0,2 3,1,0 3,1,1 3,1,2 3,2,0 3,2,1 3,2,2
## 1 1 1 1 1 1 1 1 1 1
EMC2<-generatorToTransitionMatrix(cadena@generator)
#Hallar n equivalente
#Inicializar
E_t<-alpha%*%vectorL
aux<-EMC
k<-1
#Hallar n equivalente
while(E_t<t){
k=k+1
E_t<-E_t+alpha%*%aux%*%vectorL
aux<-aux%*%EMC
}
n<-k-1
n
## [1] 4692
#Hallar matriz de ocupacion de EMC en n
M<-matrix(0,ncol=length(estados),nrow=length(estados),dimnames=list(estados,estados))
diag(M)<-1
aux<-EMC
for (i in 1:n) {
M<-M+aux
aux<-aux%*%EMC
}
#Mumero de transiciones/veces en el estado
M["0,0,0","3,2,2"]
## [1] 0.6023113
#Tiempo en segundos que dura en 3,2,2
M["0,0,0","3,2,2"]*vectorL["3,2,2"]
## 3,2,2
## 3.285334
(alpha%*%M*vectorL)["3,2,2"]
## [1] NA
rowSums(alpha%*%M*vectorL)
## [1] 25201.85
# Literal C numero de rollos en estado estable ----------------------------
probaLP<-steadyStates(cadena)
NumeroRollos<-0
contador<-0
for (e in estados) {
contador<-contador+1
i<-as.numeric(strsplit(e,split = ",")[[1]][1])
j<-as.numeric(strsplit(e,split = ",")[[1]][2])
k<-as.numeric(strsplit(e,split = ",")[[1]][3])
NumeroRollos<-NumeroRollos+(i+j+k)*probaLP[contador]
}
NumeroRollos
## [1] 1.455402+0i
# Literal D: Tiempo primera pasada ----------------------------------------
ExpectedTime(cadena,which(estados=="1,1,1"),which(estados=="3,2,2"))
## [1] 44224.58
Lieral B
# Literal B ---------------------------------------------------------------
# Tiempo de ocupacion -----------------------------------------------------
#Elemnetos importantes
t<-7*60*60
alpha<-rep(0,length(estados))
names(alpha)<-estados
alpha["0,0,0"]<-1
vectorR<-(-diag(matQ))
vectorL<-(1/vectorR)
#Construir EMC
EMC<-matrix(0,nrow = length(estados),ncol = length(estados),dimnames = list(estados,estados))
for(i in estados){
for(j in estados){
if(i!=j){
EMC[i,j]<-matQ[i,j]/(-matQ[i,i])
}
}
}
rowSums(EMC)
## 0,0,0 0,0,1 0,0,2 0,1,0 0,1,1 0,1,2 0,2,0 0,2,1 0,2,2 1,0,0 1,0,1 1,0,2 1,1,0
## 1 1 1 1 1 1 1 1 1 1 1 1 1
## 1,1,1 1,1,2 1,2,0 1,2,1 1,2,2 2,0,0 2,0,1 2,0,2 2,1,0 2,1,1 2,1,2 2,2,0 2,2,1
## 1 1 1 1 1 1 1 1 1 1 1 1 1
## 2,2,2 3,0,0 3,0,1 3,0,2 3,1,0 3,1,1 3,1,2 3,2,0 3,2,1 3,2,2
## 1 1 1 1 1 1 1 1 1 1
EMC2<-generatorToTransitionMatrix(cadena@generator)
#Hallar n equivalente
#Inicializar
E_t<-alpha%*%vectorL
aux<-EMC
k<-1
#Hallar n equivalente
while(E_t<t){
k=k+1
E_t<-E_t+alpha%*%aux%*%vectorL
aux<-aux%*%EMC
}
n<-k-1
n
## [1] 4692
#Hallar matriz de ocupacion de EMC en n
M<-matrix(0,ncol=length(estados),nrow=length(estados),dimnames=list(estados,estados))
diag(M)<-1
aux<-EMC
for (i in 1:n) {
M<-M+aux
aux<-aux%*%EMC
}
#Mumero de transiciones/veces en el estado
M["0,0,0","3,2,2"]
## [1] 0.6023113
#Tiempo en segundos que dura en 3,2,2
M["0,0,0","3,2,2"]*vectorL["3,2,2"]
## 3,2,2
## 3.285334
(alpha%*%M*vectorL)["3,2,2"]
## [1] NA
rowSums(alpha%*%M*vectorL)
## [1] 25201.85