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.
Las probabilidades utilizadas son: (a=0.1;b=0.06;c=0.04;d=0.19;e=0.06;f=0.2) siendo n=2
Las librerias necesarias son las siguientes:
library(markovchain)
## Package: markovchain
## Version: 0.9.1
## Date: 2023-01-20
## BugReport: https://github.com/spedygiorgio/markovchain/issues
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2
## ──
## ✔ ggplot2 3.4.0 ✔ purrr 1.0.1
## ✔ tibble 3.1.8 ✔ dplyr 1.0.10
## ✔ tidyr 1.3.0 ✔ stringr 1.5.0
## ✔ readr 2.1.3 ✔ forcats 1.0.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
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.
# Definimos estados
estados <- c("bajo", "medio", "alto", "fallido")
n=2
# Matriz de transición
pmat <- matrix(data = c(0.8,0.1,0.06,0.04,
0,0.75,0.19,0.06,
0,0,0.8,0.2,
1,0,0,0),
byrow = TRUE, nrow = 4,
dimnames = list(estados, estados))
# CMTD
proceso <- new("markovchain", states = colnames(pmat),
byrow = TRUE, transitionMatrix = pmat,
name = "proceso")
# Verificamos los datos introducidos
proceso
## proceso
## A 4 - dimensional discrete Markov Chain defined by the following states:
## bajo, medio, alto, fallido
## The transition matrix (by rows) is defined as follows:
## bajo medio alto fallido
## bajo 0.8 0.10 0.06 0.04
## medio 0.0 0.75 0.19 0.06
## alto 0.0 0.00 0.80 0.20
## fallido 1.0 0.00 0.00 0.00
cat("Siendo la suma de la diagonal:",sum(diag(pmat)))
## Siendo la suma de la diagonal: 2.35
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?
cat("La probabilidad de que la máquina esté en estado de fallo después de tres semanas es de:",
(ptran.n(proceso,3)[1,4]))
## La probabilidad de que la máquina esté en estado de fallo después de tres semanas es de: 0.0595
3. Y si hoy arranca en estado bajo, ¿cuántas horas (en promedio)
transcurrirán hasta que dé un fallo?
cat("De media, trascurrirán",meanFirstPassageTime(proceso, destination = "fallido")[1]*7*24,"horas hasta que dé un fallo arrancando en estado bajo ")
## De media, trascurrirán 1747.2 horas hasta que dé un fallo arrancando en estado bajo
4. Si hoy está en modo fallo, ¿cuántas horas (en promedio)
transcurrirán hasta que vuelva a dar un fallo?
cat("De media, trascurrirán",meanRecurrenceTime(proceso)[4]*7*24,"horas hasta que vuelva a dar un fallo ")
## De media, trascurrirán 1915.2 horas hasta que vuelva a dar un fallo
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\)).
dias_funcionamiento<-sum(mocupa.proceso(proceso,2)[1,1:3])*7
comprobacion<-sum(mocupa.proceso(proceso,2)[1,1:4]) # IGUAL A N + 1
cat("Habiendo trabajado la primera semana en estado bajo, en un total de 3 semanas, la máquina habrá estado en funcionamiento durante",dias_funcionamiento,"dias. (",comprobacion," igual a N+1 )")
## Habiendo trabajado la primera semana en estado bajo, en un total de 3 semanas, la máquina habrá estado en funcionamiento durante 20.37 dias. ( 3 igual a N+1 )
porcentajes<-steadyStates(proceso)
porcentaje_anual<-sum(porcentajes[1],porcentajes[2],porcentajes[3])
cat("A lo largo de un año, la máquina estará en funcionamiento el",porcentaje_anual*100,"% del tiempo.")
## A lo largo de un año, la máquina estará en funcionamiento el 91.22807 % del tiempo.
cat("A lo largo de un año, la máquina estará en funcionamiento ",porcentaje_anual*52,"semanas")
## A lo largo de un año, la máquina estará en funcionamiento 47.4386 semanas
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?
beneficios_costes<-c(1000,500,400,-700)
cat("El beneficio semanal a largo plazo es de",sum(beneficios_costes*porcentajes),"€")
## El beneficio semanal a largo plazo es de 584.2105 €
9. 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.
# Definimos estados
estados <- c("bajo", "medio", "alto", "fallido")
n=2
# Matriz de transición
pmat2 <- matrix(data = c(0.8,0.1,0.06,0.04,
0,0.75,0.19,0.06,
1,0,0,0,
1,0,0,0),
byrow = TRUE, nrow = 4,
dimnames = list(estados, estados))
# CMTD
proceso2 <- new("markovchain", states = estados,
byrow = TRUE, transitionMatrix = pmat2,
name = "planificacion")
# Verificamos los datos introducidos
proceso2
## planificacion
## A 4 - dimensional discrete Markov Chain defined by the following states:
## bajo, medio, alto, fallido
## The transition matrix (by rows) is defined as follows:
## bajo medio alto fallido
## bajo 0.8 0.10 0.06 0.04
## medio 0.0 0.75 0.19 0.06
## alto 1.0 0.00 0.00 0.00
## fallido 1.0 0.00 0.00 0.00
porcentajes2<-steadyStates(proceso2)
porcentaje_anual2<-sum(porcentajes2[1],porcentajes2[2],porcentajes2[3])
beneficios_costes2<-c(1000,500,-600,-700)
primera<-sum(beneficios_costes*porcentajes)
segunda<-sum(beneficios_costes2*porcentajes2)
if(segunda>primera)
cat("Si, merece la pena. El beneficio semanal a largo plazo después de la modificación es de",segunda,"€. Mientras que los beneficios con la anterior política de mantenimiento eran de",primera,"€")
## Si, merece la pena. El beneficio semanal a largo plazo después de la modificación es de 671 €. Mientras que los beneficios con la anterior política de mantenimiento eran de 584.2105 €
if(segunda<primera)
cat("No, no merece la pena. El beneficio semanal a largo plazo después de la modificación es de",segunda,"€. Mientras que los beneficios con la anterior política de mantenimiento eran de",primera,"€")
if(segunda==primera)
cat("Da igual la política de mantenimiento porqué se preveen los mismos beneficios.El beneficio semanal a largo plazo después de la modificación es de",segunda,"€. Mientras que los beneficios con la anterior política de mantenimiento eran de",primera,"€")