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) .
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
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 ]
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.