1. Simulación de Soldadura de Barras (Variables Normales)

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.

PROBLEMA 1: Soldadura de Barras

set.seed(2025)

n_sim <- 500

Especificaciones del enunciado

mu1 <- 30; var1 <- 0.81; sd1 <- sqrt(var1)
mu2 <- 18; sd2 <- 0.3; var2 <- sd2^2
LSL <- 45; USL <- 55

Simular x1 y x2 independientes

x1 <- rnorm(n_sim, mean = mu1, sd = sd1)
x2 <- rnorm(n_sim, mean = mu2, sd = sd2)
X <- x1 + x2

Estimador de probabilidad fuera de especificaciones

fuera <- sum(X < LSL | X > USL)
prop_fuera <- fuera / n_sim

Estadísticos teóricos (combinación de normales)

muX <- mu1 + mu2
varX <- var1 + var2
sdX <- sqrt(varX)

Cp <- (USL - LSL) / (6 * sdX)
Cpk <- min((muX - LSL) / (3 * sdX), (USL - muX) / (3 * sdX))

Resultados

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

Histograma con límites

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)

2. Simulación de Estación de Reproceso (Binomial y Exponencial)

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

PROBLEMA 2 - A: suma simple de tiempos de reparación (10 réplicas)

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

B) Llegadas cada 20 minutos y una sola estación (cola determinística de llegadas)

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

3. Simulación de Logística de Camiones (Distribuciones Uniformes y Exponencial)

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

Simulación de un camión (un solo camión, ciclos sucesivos)

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

B) Intervalo de confianza (por ejemplo 95%) usando t-student sobre las 5 réplicas

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 ]

C) Escenario: ¿cómo lograr al menos 10 entregas por día (10h)?

Probar reduciendo tiempo de carga promedio, o aumentando horas, o asumir segunda rampa (si hubiera >1 camión)

Vamos a simular 3 escenarios y comparar medias:

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))
}

Escenarios de ejemplo:

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

Interpretación y recomendaciones (punto 3 (C)):

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%”)