La longitud total de la barra (L) es la suma de las longitudes\(x_1\) y \(x_2\): \(L = x_1 + x_2\).
Distribuciones:
\(x_1 \sim N(\mu_1 = 30, \sigma_1^2 = 0.81) \implies \sigma_1 = \sqrt{0.81} = 0.9\)
\(x_2 \sim N(\mu_2 = 18, \sigma_2 = 0.3) \implies \sigma_2^2 = 0.3^2 = 0.09\)
Suma de Normales Independientes: La suma \(L\) también sigue una distribución normal:
\(\mu_L = \mu_1 + \mu_2 = 30 + 18 = 48\)
\(\sigma_L^2 = \sigma_1^2 + \sigma_2^2 = 0.81 + 0.09 = 0.90\)
\(\sigma_L = \sqrt{0.90} \approx 0.9487\)
Parámetros de Diseño: \(50 \pm 5\) cm.
Límite Superior de Especificación (\(\text{LSE}\)): \(50 + 5 = 55\) cm.
Límite Inferior de Especificación (\(\text{LIE}\)): \(50 - 5 = 45\) cm.
set.seed(2025)
n_sim <- 500
mu1 <- 30; var1 <- 0.81; sd1 <- sqrt(var1)
mu2 <- 18; sd2 <- 0.3; var2 <- sd2^2
LSL <- 45; USL <- 55
x1 <- rnorm(n_sim, mean = mu1, sd = sd1)
x2 <- rnorm(n_sim, mean = mu2, sd = sd2)
X <- x1 + x2
fuera <- sum(X < LSL | X > USL)
prop_fuera <- fuera / n_sim
muX <- mu1 + mu2
varX <- var1 + var2
sdX <- sqrt(varX)
Cp <- (USL - LSL) / (6 * sdX)
Cpk <- min((muX - LSL) / (3 * sdX), (USL - muX) / (3 * sdX))
cat("Resultados PUNTO 1 (N = ", n_sim, ")\n")
## Resultados PUNTO 1 (N = 500 )
cat("Proporción fuera de especificación (estimada):", round(prop_fuera, 4), "\n")
## Proporción fuera de especificación (estimada): 0.002
cat("Número fuera:", fuera, "\n")
## Número fuera: 1
cat("Media teórica de X:", muX, "\n")
## Media teórica de X: 48
cat("Sd teórica de X:", round(sdX, 6), "\n")
## Sd teórica de X: 0.948683
cat("Cp teórico:", round(Cp, 6), "\n")
## Cp teórico: 1.756821
cat("Cpk teórico:", round(Cpk, 6), "\n")
## Cpk teórico: 1.054093
hist(X, breaks = 30, main = "Histograma: longitudes soldadas (X = x1 + x2)",
xlab = "Longitud (cm)")
abline(v = c(LSL, USL), col = "black", lwd = 2)
abline(v = muX, col = "green", lwd = 2)
Este problema requiere una simulación replicada para estimar el tiempo total.
Llegada de piezas: Cada 20 minutos (tiempo determinístico).
Número de defectos (\(D\)): \(D \sim \text{Binomial}(n = 3, \mu = 2.4)\).
La media de una Binomial es \(n \times p\). Por lo tanto, \(p = \mu / n = 2.4 / 3 = 0.8\).
\(D \sim \text{Binomial}(n = 3, p = 0.8)\).
Tiempo de Reparación (\(T_{rep}\)): \(T_{rep} \sim \text{Exponencial}(\lambda)\), donde \(\lambda = 0.2\) piezas/minuto por cada defecto.
La tasa de la distribución Exponencial en R es el valor \(rate\), que es \(1 / \text{media}\).
El tiempo medio de reparación para una pieza con \(D\) defectos es \(\mu_{rep} = 1 / \lambda \times D\). Si \(\lambda\) es piezas por minuto por defecto, se interpreta como \(D \times \text{Tasa Base}\).
Interpretación más estándar: La media del tiempo de servicio es \(\frac{1}{rate}\). Aquí se asume que la tasa de servicio es \(0.2\) veces el número de defectos.
Tiempo de Reparación \(\sim \text{Exponencial}(\text{rate} = 0.2 \times D)\). Usaremos esta interpretación.
Alternativamente, si \(0.2\) es la media del tiempo de servicio por defecto, entonces \(T_{rep} \sim \text{Exponencial}(\text{rate} = 1/(0.2 \times D))\).
set.seed(2025)
replicas <- 10
n_piezas <- 200
n_def_max <- 3
p_def <- 2.4 / n_def_max # = 0.8
lambda <- 0.2 # tasa por minuto por defecto
total_tiempos <- numeric(replicas)
for (r in 1:replicas) {
# generar número de defectos por pieza
defects <- rbinom(n_piezas, size = n_def_max, prob = p_def)
# para cada pieza, generar la suma de tiempos exponenciales (una por defecto)
tiempos_por_pieza <- sapply(defects, function(k) {
if (k == 0) return(0)
sum(rexp(k, rate = lambda))
})
total_tiempos[r] <- sum(tiempos_por_pieza)
}
resultados_A <- data.frame(replica = 1:replicas, tiempo_total_min = total_tiempos)
print(resultados_A)
## replica tiempo_total_min
## 1 1 2282.225
## 2 2 2521.651
## 3 3 2341.573
## 4 4 2669.930
## 5 5 2442.110
## 6 6 2233.805
## 7 7 2455.319
## 8 8 2257.371
## 9 9 2451.513
## 10 10 2432.707
cat("Media (min):", mean(total_tiempos), " Desv (min):", sd(total_tiempos), "\n")
## Media (min): 2408.82 Desv (min): 133.6199
set.seed(2025)
replicas <- 10
n_piezas <- 200
arrival_interval <- 20 # min entre llegadas
sim_total_finish <- numeric(replicas)
for (r in 1:replicas) {
arrival_times <- seq(0, by = arrival_interval, length.out = n_piezas)
# generar defectos y tiempos de servicio por pieza
defects <- rbinom(n_piezas, size = n_def_max, prob = p_def)
service_times <- sapply(defects, function(k) if(k==0) 0 else sum(rexp(k, rate = lambda)))
# Simular procesamiento FIFO: server starts service at max(arrival, finish_prev)
finish_time_prev <- 0
for (i in seq_len(n_piezas)) {
start_service <- max(arrival_times[i], finish_time_prev)
finish_time_prev <- start_service + service_times[i]
}
sim_total_finish[r] <- finish_time_prev # tiempo en el que se procesa la pieza 200
}
data.frame(replica = 1:replicas, tiempo_fin_min = sim_total_finish)
## replica tiempo_fin_min
## 1 1 3985.040
## 2 2 4000.437
## 3 3 3989.086
## 4 4 3980.445
## 5 5 4001.416
## 6 6 3995.696
## 7 7 4017.478
## 8 8 3995.066
## 9 9 3988.419
## 10 10 3985.301
cat("Media tiempo fin (min):", mean(sim_total_finish), "sd:", sd(sim_total_finish), "\n")
## Media tiempo fin (min): 3993.838 sd: 10.78261
Este problema es una simulación de eventos discretos. Usaremos una simulación simple, modelando los tiempos de ciclo.
Tiempos de Actividad (Uniforme: \(a \pm b \implies U(a-b, a+b)\)):
Carga (\(T_c\)): \(U(30-10, 30+10) = U(20, 40)\) minutos.
Descarga (\(T_d\)): \(U(20-5, 20+5) = U(15, 25)\) minutos.
Tiempo de Traslado (\(T_{tr}\)): Exponencial con media de 40 minutos.
\(\text{Media} = 1 / \text{rate}\). Entonces, \(\text{rate} = 1 / 40\).
Este tiempo ocurre dos veces por viaje (ida y vuelta): \(T_{tr, ida}\) y \(T_{tr, vuelta}\).
Tiempo de Ciclo por Viaje (\(T_{ciclo}\)): \(T_c + T_{tr, ida} + T_d + T_{tr, vuelta}\)
El supuesto clave para el inciso (c) es que solo hay un camión. Si hubiera más, la restricción de carga es importante. Asumiendo un solo camión (el más restrictivo).
set.seed(2025)
replicas <- 5
sim_time <- 10 * 60 # 10 horas en minutos = 600
rate_travel <- 1 / 40 # lambda para exponencial (por minuto)
results_trips <- numeric(replicas)
for (r in 1:replicas) {
t <- 0
trips <- 0
while (t < sim_time) {
carga <- rnorm(1, mean = 30, sd = 10)
# evita tiempos negativos en normales (si muy extremos)
if (carga < 0) carga <- 0
viaje_ida <- rexp(1, rate = rate_travel)
descarga <- rnorm(1, mean = 20, sd = 5)
if (descarga < 0) descarga <- 0
viaje_vuelta <- rexp(1, rate = rate_travel)
ciclo <- carga + viaje_ida + descarga + viaje_vuelta
t <- t + ciclo
if (t <= sim_time) trips <- trips + 1
# si t > sim_time, ese viaje no cuenta completo dentro del periodo
}
results_trips[r] <- trips
}
data.frame(replica = 1:replicas, viajes_en_10h = results_trips)
## replica viajes_en_10h
## 1 1 5
## 2 2 5
## 3 3 5
## 4 4 4
## 5 5 4
cat("Media viajes en 10h:", mean(results_trips), " SD:", sd(results_trips), "\n")
## Media viajes en 10h: 4.6 SD: 0.5477226
n <- length(results_trips)
m <- mean(results_trips)
s <- sd(results_trips)
alpha <- 0.05
se <- s / sqrt(n)
tcrit <- qt(1 - alpha/2, df = n - 1)
IC_lower <- m - tcrit * se
IC_upper <- m + tcrit * se
cat("IC 95% para viajes en 10h: [", round(IC_lower,2), ",", round(IC_upper,2), "]\n")
## IC 95% para viajes en 10h: [ 3.92 , 5.28 ]
scenario_runs <- function(mean_carga = 30, sd_carga = 10, sim_time = 600, reps = 500) {
set.seed(123)
res <- numeric(reps)
for (i in 1:reps) {
t <- 0; trips <- 0
while (t < sim_time) {
carga <- rnorm(1, mean = mean_carga, sd = sd_carga); if(carga<0) carga<-0
viaje_ida <- rexp(1, rate = rate_travel)
descarga <- rnorm(1, mean = 20, sd = 5); if(descarga<0) descarga<-0
viaje_vuelta <- rexp(1, rate = rate_travel)
ciclo <- carga + viaje_ida + descarga + viaje_vuelta
t <- t + ciclo
if (t <= sim_time) trips <- trips + 1
}
res[i] <- trips
}
c(mean = mean(res), sd = sd(res))
}
base <- scenario_runs(mean_carga = 30)
reduce_load <- scenario_runs(mean_carga = 20) # reducir carga
extend_time <- scenario_runs(mean_carga = 30, sim_time = 12*60) # jornada 12h
base; reduce_load; extend_time
## mean sd
## 4.1560000 0.9578617
## mean sd
## 4.548000 1.064877
## mean sd
## 5.084000 1.029107
Con el modelo base (carga 30 min media, descarga 20, trans. media 40 ida y 40 vuelta) se calcula la media de viajes en 10 horas.
Si la media de viajes en 10h es menor que 10 (objetivo), entonces para lograr ≥ 10 entregas en 10h tienes opciones:
Reducir tiempo de carga (p. ej. optimizar procesos, personal extra para preparación, pre-empaque): el escenario reduce_load muestra el efecto si la media baja de 30 a 20 min.
Aumentar jornada: pasar de 10h a 12h (o más) incrementa viajes proporcionalmente; extend_time simula 12 horas.
Reducir tiempos de viaje: optimizar rutas o vehículos más rápidos; disminuir la media de la exponencial (esto reduce considerablemente ciclo).
Si hay múltiples camiones y un solo muelle de carga, habría que estudiar cuellos por el muelle: agregar un segundo muelle reduce la espera para cargar si hay múltiples camiones.
Combinación: pequeñas mejoras en carga + ruta suelen ser más coste-efectivas que duplicar la flota.
En la entrega final puedo cuantificar exactamente cuánto debes reducir carga o viaje para alcanzar 10 entregas (p. ej. “Reducir la carga a X minutos permitirá alcanzar 10 viajes con probabilidad Y%”)