Al comienzo de cada semana, el estado de una máquina se determina
midiendo la cantidad de corriente eléctrica que utiliza. En función de
su lectura de amperaje, la máquina se clasifica en uno de los cuatro
estados siguientes: bajo, medio, alto o fallido. Una máquina en estado
bajo tiene una probabilidad de \(a\),
\(b\) y \(c\) de estar en el estado medio, alto o
fallido, respectivamente, al comienzo de la siguiente semana. Una
máquina en estado medio tiene una probabilidad de \(d\) y \(e\) de estar en estado alta o fallida,
respectivamente, al inicio de la siguiente semana; no puede, por sí
sola, pasar al estado bajo. Una máquina en estado alto tiene una
probabilidad de \(f\) de estar en el
estado fallido al comienzo de la siguiente semana; no puede, por sí
misma, pasar al estado bajo o medio. Si una máquina se encuentra en
estado de fallo al comienzo de la semana, se inicia inmediatamente la
reparación de la máquina para que (con probabilidad 1) esté en el estado
bajo al comienzo de la semana siguiente. La máquina funciona 24x7.
IMPORTANTE: Los datos que tienes que utilizar
son:
probabilidades:
(a=0.1;b=0.06;c=0.04;d=0.19;e=0.06;f=0.2) y n=2
Ejercicio 1:
Modeliza este proceso como una CMTD y obtén la matriz de transición
(de 1 paso). Responde con la suma de los elementos de la diagonal de
dicha matriz.
Solución:
La suma de los elementos de la diagonal es 2.35 en la matriz de
transición de primer paso
estados=c("B","M","A","F")
p1=matrix(c(0.8,0,0,1,0.1,0.75,0,0,0.06,0.19,0.8,0,0.04,0.06,0.2,0),nrow=4,dimnames=list(estados,estados))
proceso <- new("markovchain", states = estados,
byrow = TRUE, transitionMatrix = p1,
name = "misil")
ptran.n=function(p,n){
# ptran es la matriz de transición de 1 paso
# n son los pasos a dar
i=1
ptran=p
while(i<n){
p=p%*%ptran
i=i+1
}
return(p)
}
ptran.n(p1,1)
## B M A F
## B 0.8 0.10 0.06 0.04
## M 0.0 0.75 0.19 0.06
## A 0.0 0.00 0.80 0.20
## F 1.0 0.00 0.00 0.00
# Suma de elementos de la diagonal
sum(diag(p1))
## [1] 2.35
Ejercicio 2:
Si una máquina nueva siempre comienza en el estado bajo, ¿cuál es la
probabilidad de que la máquina esté en estado de fallo después de tres
semanas?
Solución:
La probabilidad de que comience en “bajo” y al cabo de tres semanas
esté en estado de fallo es de 0.0595
ini=c(1,0,0,0)
ini*proceso^3
## B M A F
## [1,] 0.594 0.18425 0.16225 0.0595
ini%*%ptran.n(p1,3)
## B M A F
## [1,] 0.594 0.18425 0.16225 0.0595
Ejercicio 3:
Y si hoy arranca en estado bajo, ¿cuántas horas (en promedio)
transcurrirán hasta que dé un fallo?
Solución:
Tardaríamos 1747.2 horas en pasar de estado “bajo” a “fallo”
mfpt1=meanFirstPassageTime(proceso,"F");mfpt1
## B M A
## 10.4 7.8 5.0
# El sistema tiene en cuenta los tiempos en semanas, por lo que deberemos pasarlo a horas
# El resultado es el siguiente:
mfpt1["B"]*7*24
## B
## 1747.2
Ejercicio 4:
Si hoy está en modo fallo, ¿cuántas horas (en promedio)
transcurrirán hasta que vuelva a dar un fallo?
Solución:
Vemos que si comenzamos en el fallo, tardamos 1915.2 horas en volver
a este
## B M A F
## 2.280000 5.700000 3.352941 11.400000
recurrencia["F"]*7*24
## F
## 1915.2
Ejercicio 5:
Si durante esta semana la máquina trabaja en estado bajo,
transcurridas \(n\) semanas más,
¿cuántos días habrá estado funcionando la máquina? (Ayuda: Verifica que
el número total de semanas en funcionamiento va ser de \(n+1\)).
Solución:
La máquina estará 20,37 días operativa
mocupa.proceso <- function(proceso, n)
{
# Número de estados del proceso
nestat <- dim(proceso)
# Estados
nombres<- names(proceso)
# Generamos la matriz de ocupaciones
mocupa <- diag(nestat)
dimnames(mocupa) <- list(nombres, nombres)
# mocupa <- matrix(rep(0, nestat*nestat),
# nrow = nestat, dimnames = list(nombres, nombres))
# Bucle de cálculo de los tiempos de ocupación
P=proceso[1:nestat,1:nestat]
for (i in 1:n)
mocupa <- mocupa + ptran.n(P,i)
return(mocupa)
}
n=2
mocupa1=mocupa.proceso(proceso,n);mocupa1
## B M A F
## B 2.48 0.2550 0.1750 0.090
## M 0.06 2.3125 0.4845 0.143
## A 0.20 0.0000 2.4400 0.360
## F 1.80 0.1000 0.0600 1.040
# Días operativa
(mocupa1["B","B"]+mocupa1["B","M"]+mocupa1["B","A"])*7
## [1] 20.37
Ejercicio 6:
A lo largo de un año, ¿cuánto tiempo, en porcentaje, estará
funcionando la máquina?
Solución:
El 91,22% de los días estará operativa la máquina
pi1=steadyStates(proceso);pi1
## B M A F
## [1,] 0.4385965 0.1754386 0.2982456 0.0877193
prob=sum(pi1[,"B"]+pi1[,"M"]+pi1[,"A"]);prob
## [1] 0.9122807
# Días operativa
Ejercicio 7:
A lo largo de un año, ¿cuántas semanas estará operativa la máquina
(recuerda que un año tiene 52 semanas)?
Solución:
Hablando en días, 47.4386 semanas de 52 disponibles estará en
funcionamiento
prob*52
## [1] 47.4386
Ejercicio 8:
Cada semana que la máquina está en estado bajo, se obtiene un
beneficio de 1.000 euros; cada semana que la máquina está en el estado
medio, se obtiene un beneficio de 500 euros; cada semana que la máquina
está en estado alto, se obtiene un beneficio de 400 euros; y la semana
en la que hay un fallo, se incurre en un coste de 700 euros por la
reparación. ¿Cuál es el beneficio semanal a largo plazo?
Se ha sugerido cambiar la política de mantenimiento de la máquina.
Si al comienzo de una semana la máquina está en estado alto, la máquina
se deja fuera de servicio y es reparada para que al inicio de la
siguiente semana vuelva a estar en el estado bajo. Cuando se realiza una
reparación se incurre en un coste de 600 euros. ¿Merece la pena esta
nueva política de mantenimiento en términos de beneficios esperados
(sí/no)? Registra además, cuál es el beneficio semanal que se
conseguiría.
Solución:
Con esta nueva política, se obtendrá un mayor beneficio, pasando de
584.2105€ semanales a 675€
estados=c("B","M","A","F")
p2=matrix(c(0.8,0,1,1,0.1,0.75,0,0,0.06,0.19,0,0,0.04,0.06,0,0),nrow=4,dimnames=list(estados,estados))
proceso2 <- new("markovchain", states = estados,
byrow = TRUE, transitionMatrix = p2,
name = "misil")
beneficios2=c(1000,500,-600,-600)
pi2=steadyStates(proceso2);pi2