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 )


  1. A lo largo de un año, ¿cuánto tiempo, en porcentaje, estará funcionando la máquina?
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.


  1. A lo largo de un año, ¿cuántas semanas estará operativa la máquina (recuerda que un año tiene 52 semanas)?
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,"€")