Ejercicio 1: Soldadura de barras

Planteamiento:

Se tienen dos longitudes aleatorias:

  • \(X_1 \sim N(30, 0.81)\) → media = 30 cm, varianza = 0.81 (desviación estándar = 0.9)
  • \(X_2 \sim N(18, 0.3^2)\) → media = 18 cm, desviación estándar = 0.3 cm

Cada barra soldada tiene longitud total: \[ Y = X_1 + X_2 \]

Se simularán 500 barras y se analizará cuántas están fuera del rango de especificaciones:

\[ \text{Límite inferior (LSL)} = 45, \quad \text{Límite superior (USL)} = 55 \]


# Semilla y parámetros
set.seed(424)
n <- 500 # número de barras simuladas
x1 <- rnorm(n, mean = 30, sd = 0.9) # x1 ~ Normal(30, 0.81)
x2 <- rnorm(n, mean = 18, sd = 0.3) # x2 ~ Normal(18, 0.09)
y <- x1 + x2 # Longitud total

# límites
LSL <- 45
USL <- 55

# estadísticos empíricos
mu_sim <- mean(y)
sigma_sim <- sd(y)
fuera <- sum(y < LSL | y > USL)
p_fuera_sim <- fuera / n

# índices de capacidad
Cp <- (USL - LSL) / (6 * sigma_sim)
Cpk <- min((USL - mu_sim) / (3 * sigma_sim), (mu_sim - LSL) / (3 * sigma_sim))

# Resultados
sigma_sim; 
## [1] 0.9409034
p_fuera_sim; 
## [1] 0.002
Cp; 
## [1] 1.771347
Cpk
## [1] 1.068884
# histograma con límites y anotaciones
hist(y, breaks = 20, main = "Distribucion de longitudes soldadas",
xlab = "Longitud total (cm)", col = "lightblue")
abline(v = c(LSL, USL), col = "red", lwd = 2, lty = 2)
abline(v = mu_sim, col = "darkgreen", lwd = 2)
legend("topright", legend = c("Limite inferior", "Limite superior", "Media"),
col = c("red", "red", "darkgreen"), lty = c(2,2,1), lwd = 2)


# Etiqueta con Cp y Cpk
mtext(sprintf("Cp = %.3f Cpk = %.3f", Cp, Cpk), side = 3)

# Interpretación
mu_sim <- mean(y)
sigma_sim <- sd(y)
p_fuera_sim <- mean(y < LSL | y > USL)
Cp <- (USL - LSL) / (6 * sigma_sim)
Cpk <- min((USL - mu_sim) / (3 * sigma_sim), (mu_sim - LSL) / (3 * sigma_sim))

if (Cp >= 1.33 & Cpk >= 1.33) {
interpretacion <- "El proceso está bajo control y es capaz de cumplir las especificaciones."
} else if (Cp >= 1.33 & Cpk < 1.33) {
interpretacion <- "El proceso es capaz pero no está bien centrado respecto al objetivo."
} else {
interpretacion <- "El proceso no es capaz de cumplir con las especificaciones de manera consistente."
}

cat(sprintf("Media (sim): %.3f cm\nDesv. estándar (sim): %.3f cm\nProb. fuera (sim): %.4f\nCp: %.3f\nCpk: %.3f\nConclusión: %s\n",
mu_sim, sigma_sim, p_fuera_sim, Cp, Cpk, interpretacion))
## Media (sim): 48.017 cm
## Desv. estándar (sim): 0.941 cm
## Prob. fuera (sim): 0.0020
## Cp: 1.771
## Cpk: 1.069
## Conclusión: El proceso es capaz pero no está bien centrado respecto al objetivo.

Ejercicio 2: Estimación del tiempo para reprocesar 200 piezas (10 réplicas)

Planteamiento:

  • Número de defectos por pieza: Binomial(n = 3, p = 0.8) (media = 2.4).
  • Tiempo por defecto: Exponencial(rate = 0.2) → media por defecto = 5 min.
  • Para cada pieza el tiempo = suma de los tiempos de sus defectos.
  • Objetivo: calcular cuánto tiempo toma procesar 200 piezas. Hacer 10 réplicas.

Cálculo teórico rápido:

La esperanza de tiempo por pieza = \(E[K]\cdot(1/\lambda) = 2.4 \times 5 = 12\) min. Para 200 piezas: \(200 \times 12 = 2400\) minutos ≈ 40 horas.

set.seed(424)

n_piezas <- 200
n_replicas <- 10

# Parámetros
n_def_max <- 3
p_def <- 2.4 / n_def_max # = 0.8
lambda <- 0.2 # tasa para exponencial (media = 1/lambda = 5)

simular_una_repl <- function(n_piezas, n_def_max, p_def, lambda) {
k <- rbinom(n_piezas, size = n_def_max, prob = p_def)
tiempos_pieza <- sapply(k, function(ki) {
if (ki == 0) return(0)
sum(rexp(ki, rate = lambda))
})
tiempo_total <- sum(tiempos_pieza)
list(tiempo_total = tiempo_total, tiempos_pieza = tiempos_pieza, n_defectos = k)
}

resultados <- vector("list", n_replicas)
tiempo_totales <- numeric(n_replicas)
for (i in seq_len(n_replicas)) {
r <- simular_una_repl(n_piezas, n_def_max, p_def, lambda)
resultados[[i]] <- r
tiempo_totales[i] <- r$tiempo_total
}

# imprimir
print(tiempo_totales)
##  [1] 2290.587 2259.013 2362.678 2424.709 2213.614 2380.449 2191.189 2471.723
##  [9] 2616.333 2363.697
print(tiempo_totales/60) # en horas
##  [1] 38.17646 37.65021 39.37797 40.41181 36.89357 39.67414 36.51982 41.19539
##  [9] 43.60555 39.39495
# Resumen
mean_t <- mean(tiempo_totales)
sd_t <- sd(tiempo_totales)

cat(sprintf("Tiempo medio (min) de las réplicas: %.2f (%.2f horas)\n", mean_t, mean_t/60))
## Tiempo medio (min) de las réplicas: 2357.40 (39.29 horas)

Ejercicio 3: Simulación del proceso de entrega de un camión de reparto

Planteamiento:

En este ejercicio se analiza el desempeño de un camión de reparto considerando los tiempos de carga, transporte y descarga en cada viaje. El proceso se modela de la siguiente manera:

  • Tiempo de carga: se distribuye uniformemente entre 20 y 40 minutos (30 ± 10).

  • Tiempo de descarga: se distribuye uniformemente entre 15 y 25 minutos (20 ± 5).

  • Tiempo de transporte: sigue una distribución exponencial con media de 40 minutos (λ = 1/40).

Cada viaje completo incluye: Carga → Transporte → Descarga → Transporte de regreso.

set.seed(424)

# Parámetros generales

tiempo_simulacion <- 10 * 60 # 10 horas = 600 minutos
n_replicas <- 5

#Función de simulación

simular_viajes <- function() {
tiempo <- 0
viajes <- 0

while (tiempo < tiempo_simulacion) {
carga <- runif(1, 20, 40) # Carga uniforme (30 ± 10)
traslado_ida <- rexp(1, rate = 1/40) # Traslado (media = 40)
descarga <- runif(1, 15, 25) # Descarga uniforme (20 ± 5)
traslado_vuelta <- rexp(1, rate = 1/40)

duracion_viaje <- carga + traslado_ida + descarga + traslado_vuelta
tiempo <- tiempo + duracion_viaje

if (tiempo <= tiempo_simulacion) {
  viajes <- viajes + 1
}

}
return(viajes)
}

# Simulación de 5 réplicas
resultados <- replicate(n_replicas, simular_viajes())

# Estadísticas
media_viajes <- mean(resultados)
sd_viajes <- sd(resultados)
error <- qt(0.975, df = n_replicas - 1) * (sd_viajes / sqrt(n_replicas))
ic_inf <- media_viajes - error
ic_sup <- media_viajes + error

# Resultados
cat(paste0(
" RESULTADOS - EJERCICIO 3\n",
sprintf(" Réplicas realizadas: %d\n\n", n_replicas),

"Viajes completados por réplica:\n",
sprintf(" %s\n\n", paste(resultados, collapse = ", ")),

"Estadísticas del proceso:\n",
sprintf(" Media de viajes: %.2f\n", media_viajes),
sprintf(" Desviación estándar: %.2f\n", sd_viajes),
sprintf(" Intervalo de confianza (95%%): [%.2f, %.2f]\n\n", ic_inf, ic_sup),

"Conclusión:\n",
if (media_viajes >= 10) {
"Con los tiempos actuales, la empresa puede cumplir su meta de 10 entregas diarias.\n\n"
} else {
"La empresa NO alcanzaría las 10 entregas diarias. Se recomienda reducir los tiempos de carga o traslado.\n\n"
},

"Recomendaciones:\n",
"- Aumentar la capacidad de carga (permitir cargar más de un camión simultáneamente).\n",
"- Optimizar los tiempos de carga mediante automatización o más personal.\n",
"- Mejorar la eficiencia de las rutas para reducir los traslados.\n",
"- Planificar las descargas para minimizar tiempos muertos.\n"
))
##  RESULTADOS - EJERCICIO 3
##  Réplicas realizadas: 5
## 
## Viajes completados por réplica:
##  3, 4, 5, 5, 4
## 
## Estadísticas del proceso:
##  Media de viajes: 4.20
##  Desviación estándar: 0.84
##  Intervalo de confianza (95%): [3.16, 5.24]
## 
## Conclusión:
## La empresa NO alcanzaría las 10 entregas diarias. Se recomienda reducir los tiempos de carga o traslado.
## 
## Recomendaciones:
## - Aumentar la capacidad de carga (permitir cargar más de un camión simultáneamente).
## - Optimizar los tiempos de carga mediante automatización o más personal.
## - Mejorar la eficiencia de las rutas para reducir los traslados.
## - Planificar las descargas para minimizar tiempos muertos.