TAREA 04 CADENAS DE MARKOV DE TIEMPO CONTINUO

1. Contexto e información del problema.

Una fábrica de tornillos quiere optimizar su proceso productivo. La cadena de producción se realiza con 6 máquinas. La fabricación está encajada en una jornada diaria de 8 horas sin parada, y la fábrica funciona solo 5 días a la semana (de lunes a viernes).

Cuando hay una o dos máquinas averiadas, la producción se ralentiza, y en consecuencia los beneficios que genera son, respectivamente de 100 y 50€/hora. Mientras que, cuando todas las máquinas están operativas, la producción genera unos beneficios de 200€/hora.

Los tiempos de fallo de cualquier máquina se producen según un PP(\(\lambda\)), donde el tiempo esperado de fallo es una Poisson de media 7 días. Asimismo, los tiempos de reparación son Exponenciales de tasa \(\mu\).

2. Objetivos.

El principal objetio de este informe es proporcionar la información suficiente a la empresa para que pueda fijar el número más adecuado de operarios para su plantilla y para que pueda maximizar beneficios. En caso de que dos escenarios presenten una cifra similar de beneficios se escogería la que tuviera un mayor número de horas en funcionamiento las máquinas para poder abastecer la demanda y no perder clientes.

En este caso, estudiaremos los tiempos de averias y los beneficios obtenidos con 1,2 y 3 trabajadores.

3.Metodología.

En primer hemos simulado los valores de \(\lambda\) y \(\mu\) utilizando los comandos rpois y runif respectivamente. A continuación creamos la matriz de tasas con los datos obtenidos del enunciado y definimos el proceso utilizando las Cadenas de Markov de tiempo continuo -> comando “ctmc” .

La única función que se ha utilizado es la de “tiempos.ocupacion”.

Simulación de \(\lambda\) y \(\mu\)

Cálculo de tasa de fallo \(\lambda\)

# Simulación del tiempo esperado de fallo con distribución de Poisson
set.seed(1)
tiempo_esperado <- rpois(1, 7)

lambda <- tiempo_esperado / (24*7)

\(\lambda\)=0.0297619

Cálculo de tasa de reparación \(\mu\)

# Simulación del tiempo esperado de reparación con distribución uniforme
set.seed(1)
tiempo_esperado <- runif(1, 2, 24)
 
# Cálculo de la tasa de reparación mu
mu <- 1 / tiempo_esperado

\(\mu\)=0.1275317

4.Resultados Numéricos

1 Reparador

Creamos la matriz de tasas y definimos el proceso.

Así la matriz de tasas \(R\) resulta:

# Matriz de tasas
estados <- as.character(0:6)
nestados <- length(estados)

R_fun <- matrix(nrow = nestados, ncol = nestados, data = 0,
            dimnames=list(estados,estados))

R_fun[1,2] <- 6*lambda 
R_fun[2,1] <- mu
R_fun[2,3] <- 5*lambda
R_fun[3,2] <- mu
R_fun[3,4] <- 4*lambda 
R_fun[4,3] <- mu
R_fun[4,5] <- 3*lambda
R_fun[5,4] <- mu
R_fun[5,6] <- 2*lambda
R_fun[6,5] <- mu
R_fun[6,7] <- 1*lambda
R_fun[7,6] <- mu
# definimos el proceso

Q_fun=R_fun-diag(apply(R_fun,1,sum))
maquinas_fun <- new("ctmc", states = estados,byrow = TRUE, 
               generator = Q_fun,name = "maquinas")

1.1.1 Si la fábrica inició la semana con todas las máquinas operativas y ha estado funcionando durante 8 horas consecutivas cada día y trabajan 5 días a la semana. (40h/semana)

¿Cuántas horas ha tenido todas las máquinas operativas?

T=8*5
tocupa=tiempos.ocupacion(R_fun,T,1)
# comprobamos que cubren las 8 horas
apply(tocupa,1,sum)
##       0       1       2       3       4       5       6 
## 40.0000 40.0000 40.0001 40.0000 39.9999 40.0000 40.0000
cat("\n Tiempo con todas las máquinas funcionando: ",tocupa[1,1],"horas.")
## 
##  Tiempo con todas las máquinas funcionando:  12.5881 horas.

1.1.2 ¿Cuántas horas ha estado el operario trabajando?

cat("\n Tiempo con el reparador ocupado: ",sum(tocupa[1, 2:7]),"horas.")
## 
##  Tiempo con el reparador ocupado:  27.4119 horas.
cat("\n ES decir, el tiempo con el reparador ocupado ha sido de: ",sum(tocupa[1, 2:7])/ T*100,"%","de sus horas lectivas.")
## 
##  ES decir, el tiempo con el reparador ocupado ha sido de:  68.52975 % de sus horas lectivas.

1.1.3 Si con 3 máquinas estropeadas la fábrica ha de parar la producción, ¿qué proporción del tiempo para la fábrica durante una semana?

cat("\n  El tiempo que la fábrica ha de parar la producción ha sido de: ",sum(tocupa[1, 4:7])/ 40*100,"%","de sus horas lectivas.")
## 
##   El tiempo que la fábrica ha de parar la producción ha sido de:  19.8555 % de sus horas lectivas.

1.2 Sabiedo que cuando hay una o dos máquinas averiadas, la producción se ralentiza, y en consecuencia los beneficios que genera son, respectivamente de 100 y 50€/hora. Mientras que, cuando todas las máquinas están operativas, la producción genera unos beneficios de 200€/hora.

beneficios=matrix(c(200, 100, 50, 0, 0, 0, 0), ncol = 1)
t1=8
t2=40
g=tiempos.ocupacion(R_fun,t1,1) %*%beneficios;
g2=tiempos.ocupacion(R_fun,t2,1) %*%beneficios;

¿ Cuánto será el beneficio esperado en una jornada de si sabemos que ha la fábrica ha empezado el día con todas las máquinas en funcionamiento?

cat("Beneficio esperado de una jornada de 8 horas empezando con todas las máquinas operativas ",round(g[1,],2),"€")
## Beneficio esperado de una jornada de 8 horas empezando con todas las máquinas operativas  1238.73 €

¿Y durante una semana?

cat("Beneficio esperado de una semana empezando con todas las máquinas operativas:",round(g2[1,],2),"€")
## Beneficio esperado de una semana empezando con todas las máquinas operativas: 4048.39 €

1.3 Con los mismos costes especificados previamente para los tiempos de avería y de funcionamiento, y considerando que el sueldo de los reparadores es de 1500€/mes (neto) por reparador:

¿Cuál será la ganancia esperada por producción teniendo en cuenta el salario del trabajador y siuponiendo que el mes tiene cuatro semanas lectivas completas?

sueldo=1500
beneficios=matrix(c(200, 100, 50, 0, 0, 0, 0), ncol = 1)
g=steadyStates(maquinas_fun)%*%beneficios
cat("\n Beneficio mesnsual con 1 trabajador:",round(g*4*8*5-sueldo,2),"€")
## 
##  Beneficio mesnsual con 1 trabajador: 7817.55 €

2 Reparadores

Creamos la matriz de tasas y definimos el proceso.

Así la matriz de tasas \(R\) resulta:

# Matriz de tasas
estados <- as.character(0:6)
nestados <- length(estados)

R_fun <- matrix(nrow = nestados, ncol = nestados, data = 0,
            dimnames=list(estados,estados))


R_fun[1,2] <- 6*lambda 
R_fun[2,1] <- mu
R_fun[2,3] <- 5*lambda
R_fun[3,2] <- 2*mu
R_fun[3,4] <- 4*lambda 
R_fun[4,3] <- 2*mu
R_fun[4,5] <- 3*lambda
R_fun[5,4] <- 2*mu
R_fun[5,6] <- 2*lambda
R_fun[6,5] <- 2*mu
R_fun[6,7] <- 1*lambda
R_fun[7,6] <- 2*mu
# definimos el proceso

Q_fun=R_fun-diag(apply(R_fun,1,sum))
maquinas_fun <- new("ctmc", states = estados,byrow = TRUE, 
               generator = Q_fun,name = "maquinas")

1.1.1 Si la fábrica inició la semana con todas las máquinas operativas y ha estado funcionando durante 8 horas consecutivas cada día y trabajan 5 días a la semana. (40h/semana)

¿Cuántas horas ha tenido todas las máquinas operativas?

T=8*5
tocupa=tiempos.ocupacion(R_fun,T,1)
# comprobamos que cubren las 8 horas
apply(tocupa,1,sum)
##       0       1       2       3       4       5       6 
## 39.9999 40.0000 40.0000 40.0000 40.0000 40.0001 40.0000
cat("\n Tiempo con todas las máquinas funcionando: ",tocupa[1,1],"horas.")
## 
##  Tiempo con todas las máquinas funcionando:  14.525 horas.

1.1.2 ¿Cuántas horas han estado los 2 operarios trabajando a la vez?

cat("\n Tiempo con los 2 operarios trabajando a la vez: ",sum(tocupa[1, 3:7]),"horas.")
## 
##  Tiempo con los 2 operarios trabajando a la vez:  10.8683 horas.
cat("\n ES decir, el tiempo con los 2 operarios trabajando a la vez ha sido de: ",(sum(tocupa[1, 3:7])/ 40)*100,"%","de sus horas lectivas.")
## 
##  ES decir, el tiempo con los 2 operarios trabajando a la vez ha sido de:  27.17075 % de sus horas lectivas.

1.1.3 Si con 3 máquinas estropeadas la fábrica ha de parar la producción, ¿qué proporción del tiempo para la fábrica durante una semana?

cat("\n  El tiempo que la fábrica ha de parar la producción ha sido de: ",sum(tocupa[1, 4:7])/ 40*100,"%","de sus horas lectivas.")
## 
##   El tiempo que la fábrica ha de parar la producción ha sido de:  9.36525 % de sus horas lectivas.

1.2 Sabiedo que cuando hay una o dos máquinas averiadas, la producción se ralentiza, y en consecuencia los beneficios que genera son, respectivamente de 100 y 50€/hora. Mientras que, cuando todas las máquinas están operativas, la producción genera unos beneficios de 200€/hora.

beneficios=matrix(c(200, 100, 50, 0, 0, 0, 0), ncol = 1)
t1=8
t2=40
g=tiempos.ocupacion(R_fun,t1,1) %*%beneficios;
g2=tiempos.ocupacion(R_fun,t2,1) %*%beneficios;

¿ Cuánto será el beneficio esperado en una jornada de si sabemos que ha la fábrica ha empezado el día con todas las máquinas en funcionamiento?

cat("Beneficio esperado de una jornada de 8 horas empezando con todas las máquinas operativas ",round(g[1,],2),"€")
## Beneficio esperado de una jornada de 8 horas empezando con todas las máquinas operativas  1250.16 €

¿Y durante una semana?

cat("Beneficio esperado de una semana empezando con todas las máquinas operativas:",round(g2[1,],2),"€")
## Beneficio esperado de una semana empezando con todas las máquinas operativas: 4721.77 €

1.3 Con los mismos costes especificados previamente para los tiempos de avería y de funcionamiento, y considerando que el sueldo de los reparadores es de 1500€/mes (neto) por reparador:

¿Cuál será la ganancia esperada por producción teniendo en cuenta el salario del trabajador y suponiendo que el mes tiene cuatro semanas lectivas completas?

sueldo=1500
beneficios=matrix(c(200, 100, 50, 0, 0, 0, 0), ncol = 1)
g=steadyStates(maquinas_fun)%*%beneficios
cat("\n Beneficio mesnsual con 2 trabajadores:",round(g*4*8*5-sueldo*2,2),"€")
## 
##  Beneficio mesnsual con 2 trabajadores: 13178.43 €

3 Reparadores

Creamos la matriz de tasas y definimos el proceso.

Así la matriz de tasas \(R\) resulta:

# Matriz de tasas
estados <- as.character(0:6)
nestados <- length(estados)

R_fun <- matrix(nrow = nestados, ncol = nestados, data = 0,
            dimnames=list(estados,estados))


R_fun[1,2] <- 6*lambda 
R_fun[2,1] <- mu
R_fun[2,3] <- 5*lambda
R_fun[3,2] <- 2*mu
R_fun[3,4] <- 4*lambda 
R_fun[4,3] <- 3*mu
R_fun[4,5] <- 3*lambda
R_fun[5,4] <- 3*mu
R_fun[5,6] <- 2*lambda
R_fun[6,5] <- 3*mu
R_fun[6,7] <- 1*lambda
R_fun[7,6] <- 3*mu
# definimos el proceso

Q_fun=R_fun-diag(apply(R_fun,1,sum))
maquinas_fun <- new("ctmc", states = estados,byrow = TRUE, 
               generator = Q_fun,name = "maquinas")

1.1.1 Si la fábrica inició la semana con todas las máquinas operativas y ha estado funcionando durante 8 horas consecutivas cada día y trabajan 5 días a la semana. (40h/semana)

¿Cuántas horas ha tenido todas las máquinas operativas?

T=8*5
tocupa=tiempos.ocupacion(R_fun,T,1)
# comprobamos que cubren las 8 horas
apply(tocupa,1,sum)
##       0       1       2       3       4       5       6 
## 40.0001 40.0000 40.0000 39.9999 40.0001 40.0000 40.0001
cat("\n Tiempo con todas las máquinas funcionando: ",tocupa[1,1],"horas.")
## 
##  Tiempo con todas las máquinas funcionando:  14.7773 horas.

1.1.2 ¿Cuántas horas han estado los 3 operarios trabajando a la vez?

cat("\n Tiempo con los 3 operarios trabajando a la vez: ",sum(tocupa[1, 4:7]),"horas.")
## 
##  Tiempo con los 3 operarios trabajando a la vez:  2.6149 horas.
cat("\n Es decir, el tiempo con los 3 operarios trabajando a la vez ha sido de: ",(sum(tocupa[1, 4:7])/ 40)*100,"%","de sus horas lectivas.")
## 
##  Es decir, el tiempo con los 3 operarios trabajando a la vez ha sido de:  6.53725 % de sus horas lectivas.

1.1.3 Si con 3 máquinas estropeadas la fábrica ha de parar la producción, ¿qué proporción del tiempo para la fábrica durante una semana?

cat("\n  El tiempo que la fábrica ha de parar la producción ha sido de: ",sum(tocupa[1, 4:7])/ 40*100,"%","de sus horas lectivas.")
## 
##   El tiempo que la fábrica ha de parar la producción ha sido de:  6.53725 % de sus horas lectivas.

1.2 Sabiedo que cuando hay una o dos máquinas averiadas, la producción se ralentiza, y en consecuencia los beneficios que genera son, respectivamente de 100 y 50€/hora. Mientras que, cuando todas las máquinas están operativas, la producción genera unos beneficios de 200€/hora.

beneficios=matrix(c(200, 100, 50, 0, 0, 0, 0), ncol = 1)
t1=8
t2=40
g=tiempos.ocupacion(R_fun,t1,1) %*%beneficios;
g2=tiempos.ocupacion(R_fun,t2,1) %*%beneficios;

¿ Cuánto será el beneficio esperado en una jornada de si sabemos que ha la fábrica ha empezado el día con todas las máquinas en funcionamiento?

cat("Beneficio esperado de una jornada de 8 horas empezando con todas las máquinas operativas ",round(g[1,],2),"€")
## Beneficio esperado de una jornada de 8 horas empezando con todas las máquinas operativas  1251.34 €

¿Y durante una semana?

cat("Beneficio esperado de una semana empezando con todas las máquinas operativas:",round(g2[1,],2),"€")
## Beneficio esperado de una semana empezando con todas las máquinas operativas: 4839.47 €

1.3 Con los mismos costes especificados previamente para los tiempos de avería y de funcionamiento, y considerando que el sueldo de los reparadores es de 1500€/mes (neto) por reparador:

¿Cuál será la ganancia esperada por producción teniendo en cuenta el salario del trabajador y suponiendo que el mes tiene cuatro semanas lectivas completas?

sueldo=1500
beneficios=matrix(c(200, 100, 50, 0, 0, 0, 0), ncol = 1)
g=steadyStates(maquinas_fun)%*%beneficios
cat("\n Beneficio mesnsual con 3 trabajadores:",round(g*4*8*5-sueldo*3,2),"€")
## 
##  Beneficio mesnsual con 3 trabajadores: 12711.49 €

5.Conclusiones

Analizando los tres escenarios plantados podemos afirmar que la opción menos viable de las 3 es la de contratar a un solo trabajador, pese a que se aprovechen el 68.52% de las horas trabajadas, la tasa más alta de las 3. El beneficio mensual que obtendría la fábrica con solo un empleado sería de 7.817,55€, habiendo deducido el sueldo del empleado,es el más bajo de los 3 escenarios. Además, la fábrica estaría casi el 20% del tiempo parada.


Por otra parte, en los escenarios con 2 y 3 trabajadores las situaciones analizadas son más parejas y dependiendo de los objetivos de la empresa podría variar su decisión final pero, en este caso, que estamos analizando como obtener mayor rentabilidad en detrenimiento de maximizar la actividad productiva, la mejor opción sería contratar a 2 trabajadores.


El beneficio mensual que obtendría la fábrica con 2 empleados sería de 13.178,43€ y con 3 empleados sería de 12.711,49€. Además, cuando son 2 trabajadores estos estarían trabajando un 27,17% del tiempo a la vez, mientras que con 3 trabajadores solo estarían trabajando a la vez los 3 un 6,35% del tiempo. Asimismo, con 2 trabajadores, en una semana todas las máquinas estarían en funcionamiento 14,52 h mientras que con 3 trabajadores estarían 14,77 h , casi el mismo tiempo.


El único punto a favor de tener a 3 empleados contratados es que la fábria solo se detendría un 6,53% del tiempo mientras que con 2 operarios se detendría un 9,36% un número ligeramente superior.