Taller final de técnica de válidación y simulación

  1. Una barra de longitud x1 será unida mediante soldadura a otra de longitudx2. Si x1 sigue una distribución normal con media de 30 cm y varianza de 0.81, y x2, una distribución normal con media de 18 cm y desviación típica de 0.3, simule la soldadura de 500 barras, tome en cuenta que las especificaciones de diseño son de 50 ± 5 cm . y determine el estimador dela probabilidad de que una barra esté fuera de especificaciones. También calcule los coeficientes de capacidad Cp y Cpk de este proceso. ¾Considera que está bajo control? NOTA: Consulte lo que es el indice de capacidad Cp y Cpk, y lo que es estar un procesos bajo control estadístico
n <- 500  
media_x1 <- 30
sd_x1 <- 0.9
media_x2 <- 18
sd_x2 <- 0.3

LSL <- 45  
USL <- 55   


#  Simulación de las longitudes
set.seed(1002)
x1 <- rnorm(n, mean = media_x1, sd = sd_x1)
x2 <- rnorm(n, mean = media_x2, sd = sd_x2)

# Longitud total
L <- x1 + x2

#  Probabilidad de estar fuera de especificaciones
fuera <- ifelse(L < LSL | L > USL, 1, 0)
prob_fuera <- mean(fuera)

cat("Probabilidad de estar fuera de especificaciones:", prob_fuera, "\n")
## Probabilidad de estar fuera de especificaciones: 0.002
#  Cálculo de Cp y Cpk
media_L <- mean(L)
sd_L <- sd(L)

Cp <- (USL - LSL) / (6 * sd_L)
Cpk <- min((USL - media_L) / (3 * sd_L), (media_L - LSL) / (3 * sd_L))

cat("Cp =", Cp, "\n")
## Cp = 1.835275
cat("Cpk =", Cpk, "\n")
## Cpk = 1.107048
# gráfica
hist(L, breaks = 20, col = "skyblue", main = "Distribución de Longitudes Totales",
     xlab = "Longitud (cm)")
abline(v = c(LSL, USL), col = "red", lwd = 2, lty = 2)
abline(v = media_L, col = "darkgreen", lwd = 2)
legend("topright", legend = c("LSL", "USL", "Media"), 
       col = c("red", "red", "darkgreen"), lty = c(2,2,1), lwd = 2,"\n")

Solo el 0.2 % de las barras queda fuera de los límites de diseño (45–55 cm). Esto indica que el proceso produce casi todas las barras dentro del rango permitido, o sea, es muy confiable.

El índice Cp mide la capacidad potencial del proceso (qué tan amplio es el rango de tolerancia comparado con la variación real). Como Cp > 1.33 el proceso tiene capacidad suficiente para cumplir las especificaciones. De hecho, 1.835 indica un proceso bastante preciso (poca variabilidad).

El Cpk mide la capacidad real, tomando en cuenta si el proceso está centrado o no. Como Cpk < Cp, eso muestra que el proceso no está perfectamente centrado — la media (48 cm) está ligeramente por debajo del valor nominal (50 cm) .

  1. Cada 20 minutos llegan piezas a una estación de reproceso. El número de defectos que una pieza puede tener com o máximo es 3. Se sabe que estos defectos siguen una distribución Binomial con media 2.4. El tiempo para realizar las reparaciones correspondientes se distribuye exponencial con λ = 0,2 piezas por minuto por cada defecto que tenga la pieza. Determine, ¾cuánto tiempo tomará procesar 200 piezas? Use 10 réplicas.
set.seed(1002)  

n_piezas <- 200
replicas  <- 10

# Parámetros de la binomial (max 3 defectos, media = 2.4 => p = 2.4/3)
size_binom <- 3
p_binom <- 2.4 / size_binom  # = 0.8

# Parámetro exponencial
rate_defecto <- 0.2  # por minuto (mean = 1/0.2 = 5 minutos por defecto)

# Llegadas determinísticas
intervalo_llegada <- 20
arrivals <- seq(0, by = intervalo_llegada, length.out = n_piezas)

sim_total_min <- numeric(replicas)

for (r in 1:replicas) {
  # generar número de defectos por pieza
  k <- rbinom(n_piezas, size = size_binom, prob = p_binom)
  
  # generar tiempos de servicio: suma de k exponentiales
  service <- sapply(k, function(ki) {
    if (ki == 0) return(0)
    rgamma(1, shape = ki, rate = rate_defecto)
  })
  
  # simular cola de servidor único
  finish_prev <- 0
  for (i in seq_len(n_piezas)) {
    start_i <- max(arrivals[i], finish_prev)
    finish_i <- start_i + service[i]
    finish_prev <- finish_i
  }
  # tiempo de finalización de la última pieza
  sim_total_min[r] <- finish_prev
}

# resultados
resumen <- data.frame(
  replica = 1:replicas,
  total_min = sim_total_min,
  total_horas = sim_total_min / 60
)

print(resumen)
##    replica total_min total_horas
## 1        1  3992.630    66.54383
## 2        2  3995.640    66.59400
## 3        3  4011.277    66.85461
## 4        4  3998.674    66.64457
## 5        5  3991.375    66.52292
## 6        6  3988.517    66.47529
## 7        7  3985.299    66.42165
## 8        8  3994.284    66.57140
## 9        9  3984.051    66.40084
## 10      10  3991.602    66.52670
cat("\nResumen:\n")
## 
## Resumen:
cat("Media (min):", mean(sim_total_min), "\n")
## Media (min): 3993.335
cat("SD (min):  ", sd(sim_total_min), "\n")
## SD (min):   7.731255
# IC 95% aproximado para la media
alpha <- 0.05
se <- sd(sim_total_min) / sqrt(replicas)
tcrit <- qt(1 - alpha/2, df = replicas - 1)
cat("IC 95% para la media (min):", mean(sim_total_min) - tcrit*se, " - ", mean(sim_total_min) + tcrit*se, "\n")
## IC 95% para la media (min): 3987.804  -  3998.865
cat("IC 95% para la media (horas):", (mean(sim_total_min) - tcrit*se)/60, " - ", (mean(sim_total_min) + tcrit*se)/60, "\n")
## IC 95% para la media (horas): 66.4634  -  66.64776
  1. Un camión de reparto tarda 30 ± 10 minutos en ser cargado, 20 ± 5 minutos en ser descargado, y 40 minutos con distribución exponencial en trasladarse, ya sea de su base al lugar de entrega, o del lugar de entrega a su base.
  1. Simule el sistema por 10 horas y realice 5 réplicas
  2. Calcule un intervalo de conanza para el número de viajes que se pueden hacer en un día.
set.seed(1002)

replicas <- 5
sim_horas <- 10
sim_min <- sim_horas * 60     

# Parámetros
mean_load <- 30
sd_load   <- 10

mean_unload <- 20
sd_unload   <- 5

rate_travel <- 1/40   # exponencial con media 40 min

# Función auxiliar para generar tiempos normales truncados a >= 0.1
rnorm_pos <- function(n, mean, sd) {
  x <- rnorm(n, mean, sd)
  x[x < 0.1] <- 0.1
  x
}

viajes_10h <- numeric(replicas)

for (r in 1:replicas) {
  tiempo <- 0
  viajes <- 0
  while (tiempo <= sim_min) {
    # generar tiempos del siguiente viaje
    t_load  <- rnorm_pos(1, mean_load, sd_load)
    t_trav1 <- rexp(1, rate = rate_travel)
    t_unld  <- rnorm_pos(1, mean_unload, sd_unload)
    t_trav2 <- rexp(1, rate = rate_travel)
    
    t_viaje <- t_load + t_trav1 + t_unld + t_trav2
    
    # si al sumar el viaje nos pasamos de sim_min, no contamos ese viaje completado
    if (tiempo + t_viaje > sim_min) break
    
    tiempo <- tiempo + t_viaje
    viajes <- viajes + 1
  }
  viajes_10h[r] <- viajes
}

# Convertir a viajes por día (24 h) por escala lineal
viajes_dia <- viajes_10h * (24/10)   # factor 2.4

resumen <- data.frame(
  replica = 1:replicas,
  viajes_10h = viajes_10h,
  viajes_dia = viajes_dia
)

print(resumen)
##   replica viajes_10h viajes_dia
## 1       1          5       12.0
## 2       2          4        9.6
## 3       3          5       12.0
## 4       4          4        9.6
## 5       5          4        9.6
# Estadísticas y IC 95% para la media de viajes por día
media <- mean(viajes_dia)
sdev  <- sd(viajes_dia)
n     <- length(viajes_dia)
se    <- sdev / sqrt(n)
tcrit <- qt(0.975, df = n - 1)
IC_inf <- media - tcrit * se
IC_sup <- media + tcrit * se

cat("\nMedia viajes/día:", media, "\n")
## 
## Media viajes/día: 10.56
cat("SD:", sdev, "\n")
## SD: 1.314534
cat("IC 95% para la media (viajes/día): [", IC_inf, ",", IC_sup, "]\n")
## IC 95% para la media (viajes/día): [ 8.92779 , 12.19221 ]
  1. Sólo hay espacio para cargar un camión a la vez. Si la em presa necesita realizar al menos 10 entregas por día, ¾qué recom endaciones daría para lograrlo? Justifique su respuesta y establezca sus supuestos.

Con base a la simulación anterior, el camión realiza en promedio unas 11 entregas por día, lo que cumple con el objetivo mínimo de 10. Sin embargo, debido a la variabilidad de los tiempos, algunos días podrían tener menos viajes.

Para garantizar al menos 10 entregas diarias se recomienda:

Reducir los tiempos de carga y descarga, por ejemplo optimizando la organización o el personal, lo que aumentaría la eficiencia.

Optimizar las rutas de traslado, evitando congestión o mejorando la logística de entrega.

Agregar un segundo punto de carga si se utilizan varios camiones, para eliminar cuellos de botella.

Con estas acciones, se reduciría el tiempo total por viaje y se aseguraría un flujo constante de entregas a lo largo del día.