TALLER DE SIMULACIÓN EN R

Este documento presenta los tres ejercicios de simulación realizados en R.
Se muestran los datos aleatorios, los resultados numéricos y las gráficas con una breve conclusión para cada ejercicio.


EJERCICIO 1 — Simulación de longitudes soldadas

En este ejercicio se simulan 500 longitudes de barras soldadas, sumando dos variables aleatorias normales independientes.

set.seed(987)  # semilla nueva

# Generación de datos
x1 <- rnorm(500, mean = 30, sd = sqrt(0.81))
x2 <- rnorm(500, mean = 18, sd = 0.3)
soldadura <- x1 + x2

# Mostrar los primeros valores
head(data.frame(x1, x2, soldadura))
##         x1       x2 soldadura
## 1 29.94869 18.05278  48.00147
## 2 30.24300 18.57502  48.81802
## 3 30.78702 17.93934  48.72636
## 4 29.82869 18.09760  47.92629
## 5 30.99063 18.19279  49.18342
## 6 29.19562 18.22455  47.42016
# Especificaciones
LSL <- 45
USL <- 55

# Cálculos de probabilidad y capacidad
fuera <- sum(soldadura < LSL | soldadura > USL) / length(soldadura)
sigma <- sd(soldadura)
media <- mean(soldadura)
Cp  <- (USL - LSL) / (6 * sigma)
Cpk <- min((USL - media) / (3 * sigma), (media - LSL) / (3 * sigma))

# Resultados
cat("Probabilidad de estar fuera de especificación:", fuera, "\n")
## Probabilidad de estar fuera de especificación: 0.002
cat("Cp =", Cp, "\n")
## Cp = 1.762456
cat("Cpk =", Cpk, "\n")
## Cpk = 1.06397
# Gráfico
hist(soldadura, main = "Distribución de longitudes soldadas",
     xlab = "Longitud total (cm)", col = "#7FD6A8", border = "gray")
abline(v = c(LSL, USL), col = "#E63946", lwd = 2)

Conclusión: El proceso presenta una probabilidad baja de producir barras fuera de especificación. Los índices Cp > 1 y Cpk > 1 indican que el proceso es capaz y centrado dentro de los límites de diseño.

set.seed(4321)  # semilla diferente

replicas <- 10
tiempos_totales <- numeric(replicas)

for (r in 1:replicas) {
defectos <- rbinom(200, size = 3, prob = 2.4/3)

tiempos <- numeric(200)
for (i in 1:200) {
tiempos[i] <- sum(rexp(defectos[i], rate = 0.2))
}

tiempos_totales[r] <- sum(tiempos)

cat("\n--- Réplica", r, "---\n")
print(defectos[1:15])  # muestra los primeros 15 valores
}
## 
## --- Réplica 1 ---
##  [1] 3 1 3 3 2 2 2 2 3 3 1 3 3 2 2
## 
## --- Réplica 2 ---
##  [1] 3 2 2 1 2 2 3 2 2 3 2 3 3 2 3
## 
## --- Réplica 3 ---
##  [1] 3 2 2 3 3 3 3 2 3 3 2 2 3 3 2
## 
## --- Réplica 4 ---
##  [1] 2 3 2 3 2 2 3 3 3 2 2 3 2 3 2
## 
## --- Réplica 5 ---
##  [1] 2 2 2 2 1 2 2 2 3 2 3 2 3 3 2
## 
## --- Réplica 6 ---
##  [1] 3 3 1 2 1 2 2 2 3 2 2 2 2 3 3
## 
## --- Réplica 7 ---
##  [1] 3 3 3 2 1 1 2 3 2 2 2 2 2 2 3
## 
## --- Réplica 8 ---
##  [1] 3 2 2 2 3 2 3 2 3 1 3 2 1 3 1
## 
## --- Réplica 9 ---
##  [1] 3 2 3 3 1 2 3 2 3 2 3 3 2 2 3
## 
## --- Réplica 10 ---
##  [1] 2 3 2 2 3 3 2 2 2 0 1 2 2 2 3
cat("\nTiempo total para procesar 200 piezas (minutos):\n")
## 
## Tiempo total para procesar 200 piezas (minutos):
print(tiempos_totales)
##  [1] 2295.138 2375.997 2270.615 2236.727 2210.150 2434.772 2442.134 2518.547
##  [9] 2156.796 2548.864
# Gráfico del tiempo total por réplica

plot(tiempos_totales, type = "b", pch = 19,
main = "Tiempo total por réplica",
xlab = "Réplica", ylab = "Tiempo total (minutos)",
col = "#4361EE")
grid()

Conclusión: El tiempo total de procesamiento de 200 piezas varía entre 2100 y 2500 minutos. Esta diferencia se debe a la variabilidad en el número de defectos y en el tiempo de reparación (distribución exponencial). En promedio, el proceso requiere más de 35 horas para completar las 200 piezas.

set.seed(2468)  # nueva semilla

simular_viajes <- function(horas = 10) {
  tiempo <- 0
  viajes <- 0
  
  while (tiempo < horas * 60) {
    carga     <- runif(1, 20, 40)
    traslado1 <- rexp(1, rate = 1/40)
    descarga  <- runif(1, 15, 25)
    traslado2 <- rexp(1, rate = 1/40)
    ciclo <- carga + traslado1 + descarga + traslado2
    
    if (tiempo + ciclo > horas * 60) break
    tiempo <- tiempo + ciclo
    viajes <- viajes + 1
  }
  return(viajes)
}

# Simulación con 5 réplicas
viajes_totales <- replicate(5, simular_viajes())
IC <- t.test(viajes_totales)$conf.int

cat("\nViajes por réplica (en 10 horas):\n")
## 
## Viajes por réplica (en 10 horas):
print(viajes_totales)
## [1] 5 3 4 4 4
cat("\nIntervalo de confianza (95%):", IC, "\n")
## 
## Intervalo de confianza (95%): 3.122011 4.877989
# Gráfico
barplot(viajes_totales, main = "Número de viajes por réplica",
        xlab = "Réplica", ylab = "Viajes realizados",
        col = "#F4A261", border = "#264653")

Dado que solo hay espacio para cargar un camión a la vez y el modelo muestra que se realizan entre 3 y 5 viajes por jornada de 10 horas, la empresa no alcanza las 10 entregas diarias. Para lograrlo, se recomienda:

Reducir los tiempos de carga, descarga o traslado mediante mejoras logísticas.

Ampliar la zona de carga para permitir más de un camión al mismo tiempo.

Aumentar el número de camiones o extender el horario de operación. Bajo estos ajustes, el sistema podría alcanzar el objetivo de 10 entregas por día.