4.12 Soluciones

Ejercicio B-1.

# Matriz de tasas
estados <- c(0, 1, 2, 3, 4)
nestados <- length(estados)

R <- matrix(nrow = nestados, ncol = nestados, data = 0)
lambda <- 1/2
mu <- 1/72 

R[1,2] <- 2*lambda 
R[2,1] <- mu 
R[2,3] <- 2*lambda 
R[3,2] <- 2*mu 
R[3,4] <- 2*lambda 
R[4,3] <- 3*mu 
R[4,5] <- lambda
R[5,4] <- 4*mu

Distribución de probabilidad asociada al evento de interés:

# Matriz de probabilidades de transición
Pmat<-matriz.prob.trans(R, 9, 1)
# Distribución de probabildiad buscada
Pmat[1,]
## [1] 0.0002 0.0020 0.0136 0.1547 0.8295
# valor esperado
esperanza <- round(sum(estados*Pmat[1,]), 1)

Solución con simmer:

replicas <- 2500
envs <- lapply(1:replicas, function(i) {
  maquinas <- mantenimiento(9, 1/2, 1/72, 2)
})
# almacenamos análisis de recursos del sistema
simresource <- as_tibble(get_mon_resources(envs))
# Almacenamos el estado final de la cola en el último instante del sistema
salida <- simresource %>%
  filter(resource == "funcionando") %>% #seleccionamos el recurso adecuado
  group_by(replication) %>%
  summarise(estado = last(system))
# Estimamos la distribución de probabilidad
distrprob <- round(table(salida$estado)/replicas, 3)
esperanza <- sum(as.numeric(names(distrprob))*distrprob)
esperanza
## [1] 3.895

Ejercicio B-2.

# Matriz de tasas
estados <- c("(0, 0)", "(0, 1)", "(0, 2)", "(1, 0)", 
             "(1, 1)", "(1, 2)", "(2, 0)", "(2, 1)", "(2,2)")
nestados <- length(estados)

lambda <- 1/200
R <- matrix(nrow = nestados, ncol = nestados, data = 0)

R[2,1] <- lambda 
R[3,2] <- 2*lambda 
R[4,1] <- lambda 
R[5,2] <- lambda 
R[5,4] <- lambda 
R[6,3] <- lambda 
R[6,5] <- 2*lambda
R[7,4] <- 2*lambda
R[8,5] <- 2*lambda
R[8,7] <- lambda
R[9,6] <- 2*lambda
R[9,8] <- 2*lambda

Probabilidades de transición para el evento de interés:

# Matriz de probabilidades de transición
Pmat<-matriz.prob.trans(R, 6, 1)
# Calculamos la probabilidad buscada
probabilidad <- Pmat[9,5] + Pmat[9,6] + Pmat[9,8] + Pmat[9,9]
probabilidad
## [1] 0.9982

Por tanto, la probabilidad de un fallo que le impida al avión finalizar el viaje es 0.0018.

Ejercicio B-5.

# Matriz de tasas
nestados <- 6
lambda <- 10
mu <- 15
R <- matrix(nrow = nestados, ncol = nestados, data = 0)

R[1,2] <- lambda 
R[2,1] <- mu
R[2,3] <- lambda 
R[3,2] <- mu
R[3,4] <- lambda
R[4,3] <- mu
R[4,5] <- lambda
R[5,4] <- mu
R[5,6] <- lambda
R[6,5] <- mu

Obtenemos ahora la matriz \(M(1)\):

tiempos.ocupacion(R, 1, 1)
##        [,1]   [,2]   [,3]   [,4]   [,5]   [,6]
## [1,] 0.4451 0.2548 0.1442 0.0814 0.0465 0.0280
## [2,] 0.3821 0.2793 0.1604 0.0920 0.0535 0.0326
## [3,] 0.3246 0.2407 0.2010 0.1187 0.0710 0.0441
## [4,] 0.2746 0.2070 0.1780 0.1695 0.1046 0.0663
## [5,] 0.2356 0.1806 0.1598 0.1569 0.1624 0.1047
## [6,] 0.2124 0.1648 0.1489 0.1492 0.1571 0.1677

Estamos interesados en la transición \(X(0) = 0\) a \(X(1) = 0\) que corresponde con el elemento \([1,1]\) de la matriz obtenida. Utilizando simmer:

# Réplicas del proceso
replicas <- 2500
envs <- lapply(1:replicas, function(i) {
  cajero <- cola.MM1K(1, 10, 15, 1, 6)
})
# almacenamos análisis de llegadas del sistema
simarrivals <- as_tibble(get_mon_arrivals(envs))
simresources <- as_tibble(get_mon_resources(envs))
# detectamos los instantes de tiempo donde el sistema esta libre y obtenemos los tiempos correspondientes
res<-c()
for(i in  1:replicas)
{
  temp <- simresources[which(simresources$replication == i), ]
  deltas <- diff(temp$time)
  free <- which(temp$system == 0)
  t_free <- deltas[free]
  res <- c(res, sum(t_free, na.rm = TRUE))
}

El tiempo que el sistema esta libre es de mean(res) horas. En este caso, la estimación obtenida si es más diferente del ressultado teórico. Podrímaos incluir un mayor número de réplicas para intentar conseguir algo más de precisión.

Ejercicio B-6.

Sea \(X(t)\) el número de artículos en stock en el tiempo \(t\), e \(Y(t)\) el estado de la máquina en el tiempo \(t\). El conjunto de estados de este proceso viene dado por:

\[S = \{1 = (0, 1), 2 = (1, 1), 3 = (2, 1), 4 = (3, 1), 5 = (4, 0), 6 = (3, 0)\}.\] En la situación inicial nos encontramos en el estado \(5 = (4, 0) = (X(0), Y(0))\) y estamos interesados en el tiempo en que la máquina estará después de 24 horas en los estados \(1, 2, 3\) o \(4\), es decir:

\[m_{51}(24) + m_{52}(24) + m_{53}(24) + m_{54}(24)\] En esta situación tenemos que la tasa de producción es \(\lambda = 60/10 = 6\) y la de demanda es \(\mu = 5\), de forma que la matriz de tasas viene dada por:

nestados <- 6
lambda <- 6
mu <- 5
R <- matrix(nrow = nestados, ncol = nestados, data = 0)

R[1,2] <- lambda 
R[2,1] <- mu
R[2,3] <- lambda 
R[3,2] <- mu
R[3,4] <- lambda
R[4,3] <- mu
R[4,5] <- lambda
R[5,6] <- mu
R[6,3] <- mu

Obtenemos ahora la matriz \(M(24)\):

mmat<-tiempos.ocupacion(R, 24, 1)
mmat
##        [,1]   [,2]   [,3]   [,4]   [,5]   [,6]
## [1,] 4.0004 4.6322 5.4284 2.9496 3.5097 3.4798
## [2,] 3.8602 4.6639 5.4664 2.9703 3.5345 3.5047
## [3,] 3.7697 4.5553 5.5361 3.0084 3.5802 3.5503
## [4,] 3.7207 4.4965 5.4656 3.0608 3.6431 3.6132
## [5,] 3.7063 4.4793 5.4448 2.9586 3.7204 3.6906
## [6,] 3.7380 4.5173 5.4905 2.9835 3.5503 3.7204

La cantidad buscada viene dada por:

sum(mmat[5, 1:4])
## [1] 16.589

Ejercicio B-9.

maquinas <- 4
estados <- maquinas + 1
operarios <- 2
lambda <- 1/2
mu <- 1/72
lambdas <- pmin(maquinas - (0:(maquinas-1)), operarios)*lambda
mus <- (1:(maquinas-1))*mu
# Debemos quitar el último elemento de lambda y el primero de mu para usar la función definida
probs <- distr.lim.nm(estados, lambdas, mus)
probs
## [1] 1.540618e-05 1.109245e-03 3.993283e-02 9.583879e-01 5.546226e-04

Así, a largo plazo, todas las máquinas funcionan el 89,6% del tiempo (\(p_4 = p[5]\)). Ambos operarios están ocupados siempre que el sistema está en el estado \(0\), \(1\) o \(2\). Por lo tanto, la fracción de tiempo a largo plazo en que ambos reparadores están ocupados viene dada por \(p_0 + p_1 + p_2\):

sum(probs[1:3])
## [1] 0.04105748

Ejercicio B-10.

maxcola <- 5
estados <- maxcola + 1
lambda <- 10
mu <- 15
lambdas <- rep(lambda, maxcola)
mus <- rep(mu, maxcola)
# Distribución límite
probs <- distr.lim.nm(estados, lambdas, mus)
probs
## [1] 0.36541353 0.24360902 0.16240602 0.10827068 0.07218045 0.04812030

Ejercicio B-11.

Recordemos que el espacio de estados es \(\{1, 2,...,9\}\) y nos intersa obtener la probabilidad del sujconjunto \(\{1, 2, 3, 4, 7\}\). Obtenemos en primer lugar la matriz de tasas:

# Estados del sistema
nestados <- 9
lambda <- 1/20
# Matriz de tasas
R <- matrix(nrow = nestados, ncol = nestados, data = 0)
R[2,1] <- lambda 
R[3,2] <- 2*lambda 
R[4,1] <- lambda 
R[5,2] <- lambda 
R[5,4] <- lambda 
R[6,3] <- lambda 
R[6,5] <- 2*lambda
R[7,4] <- 2*lambda
R[8,5] <- 2*lambda
R[8,7] <- lambda
R[9,6] <- 2*lambda
R[9,8] <- 2*lambda
# Resolución  de las ecuaciones de balance
ps <- distr.lim.general(R)
ps
## [1] 1 0 0 0 0 0 0 0 0

Ejercicio B-12.

# Estados del sistema
nestados <- 3
# Matriz de tasas
R <- matrix(nrow = nestados, ncol = nestados, data = 0)
R[1,1] <- 0 
R[1,2] <- 1/4
R[1,3] <- 1/4
R[2,1] <- 3/4
R[2,2] <- 0
R[2,3] <- 1/4
R[3,1] <- 1/2
R[3,2] <- 1/6
R[3,3] <- 0
# Resolución  de las ecuaciones de balance
ps <- distr.lim.general(R)
# Expresando en porcentajes
round(100*ps, 2)
## [1] 54.55 18.18 27.27