** Fijar semilla para reproducibilidad **
set.seed(42)
** Parámetros del problema **
n <- 500 # número de simulaciones
mu_x1 <- 30 # media de x1
sd_x1 <- sqrt(0.81) # desviación estándar de x1 = 0.9
mu_x2 <- 18 # media de x2
sd_x2 <- 0.3 # desviación estándar de x2
** Especificaciones de diseño **
LSL <- 45 # límite inferior
USL <- 55 # límite superior
** Simulación de las longitudes **
x1 <- rnorm(n, mean = mu_x1, sd = sd_x1)
x2 <- rnorm(n, mean = mu_x2, sd = sd_x2)
longitud_total <- x1 + x2
** Estadísticos muestrales **
media <- mean(longitud_total)
desv <- sd(longitud_total)
prop_fuera <- mean(longitud_total < LSL | longitud_total > USL)
** Cálculo de Cp y Cpk **
Cp <- (USL - LSL) / (6 * desv)
Cpk <- min(USL - media, media - LSL) / (3 * desv)
** Mostrar resultados **
cat(" Resultados de simulacion \n")
## Resultados de simulacion
cat("n =", n, "\n")
## n = 500
cat("Media estimada =", round(media, 4), "cm\n")
## Media estimada = 47.9665 cm
cat("Desviación estándar =", round(desv, 4), "cm\n")
## Desviación estándar = 0.9258 cm
cat("Proporción fuera de especificaciones =", round(prop_fuera, 4), "\n")
## Proporción fuera de especificaciones = 0
cat("Cp =", round(Cp, 4), "\n")
## Cp = 1.8003
cat("Cpk =", round(Cpk, 4), "\n")
## Cpk = 1.0681
cat("LSL =", LSL, " | USL =", USL, "\n\n")
## LSL = 45 | USL = 55
** Histograma **
hist(longitud_total,
breaks = 25,
col = "lightblue",
main = "Distribución de longitudes totales (x1 + x2)",
xlab = "Longitud (cm)",
border = "gray")
abline(v = c(LSL, USL), col = "red", lty = 2, lwd = 2)
abline(v = media, col = "blue", lwd = 2)
legend("topright", legend = c("LSL", "USL", "Media"),
col = c("red", "red", "blue"), lty = c(2, 2, 1), bty = "n")
** Boxplot **
boxplot(longitud_total,
horizontal = TRUE,
main = "Boxplot de longitudes totales",
xlab = "Longitud (cm)",
col = "lightgreen")
abline(v = c(LSL, USL), col = "red", lty = 2, lwd = 2)
set.seed(123) # reproducibilidad
** Parámetros **
n_piezas <- 200
replicas <- 10
inter_arrival <- 20 # minutos entre llegadas
n_def_max <- 3 # máximo de defectos
p_def <- 2.4 / n_def_max # p = 0.8 para media 2.4
lambda <- 0.2 # tasa exponencial (1/min)
** Función para simular una réplica **
simular_reproceso <- function(n_piezas, inter_arrival, n_def_max, p_def, lambda) {
# Tiempos de llegada
arrivals <- seq(0, by = inter_arrival, length.out = n_piezas)
# Número de defectos por pieza
defects <- rbinom(n_piezas, size = n_def_max, prob = p_def)
# Tiempos de servicio según los defectos
service_times <- sapply(defects, function(d) {
if (d > 0) sum(rexp(d, rate = lambda)) else 0
})
# Simulación del proceso (una sola estación de trabajo)
start <- numeric(n_piezas)
finish <- numeric(n_piezas)
for (i in 1:n_piezas) {
if (i == 1) {
start[i] <- arrivals[i]
} else {
start[i] <- max(arrivals[i], finish[i - 1])
}
finish[i] <- start[i] + service_times[i]
}
total_time <- finish[n_piezas] # tiempo total para 200 piezas
return(list(
tiempo_total_min = total_time,
tiempo_total_horas = total_time / 60,
media_defectos = mean(defects),
prop_sin_defectos = mean(defects == 0)
))
}
** Ejecutar las 10 réplicas **
resultados <- replicate(replicas,
simular_reproceso(n_piezas, inter_arrival, n_def_max, p_def, lambda),
simplify = FALSE)
** Convertir lista a data frame **
df <- data.frame(
replica = 1:replicas,
tiempo_total_min = sapply(resultados, function(x) x$tiempo_total_min),
tiempo_total_horas = sapply(resultados, function(x) x$tiempo_total_horas),
media_defectos = sapply(resultados, function(x) x$media_defectos),
prop_sin_defectos = sapply(resultados, function(x) x$prop_sin_defectos)
)
** Resumen estadístico **
media_tiempo <- mean(df$tiempo_total_min)
desv_tiempo <- sd(df$tiempo_total_min)
resumen <- data.frame(
estadistico = c("Réplicas", "Piezas por réplica",
"Media tiempo total (min)", "Desviación (min)",
"Media tiempo total (horas)"),
valor = c(replicas, n_piezas,
round(media_tiempo, 2), round(desv_tiempo, 2),
round(media_tiempo / 60, 3))
)
print(" Resultados de las 10 replicas ")
## [1] " Resultados de las 10 replicas "
print(df)
## replica tiempo_total_min tiempo_total_horas media_defectos prop_sin_defectos
## 1 1 3993.441 66.55736 2.425 0.005
## 2 2 3997.196 66.61993 2.440 0.010
## 3 3 3987.331 66.45551 2.360 0.010
## 4 4 3987.805 66.46342 2.355 0.010
## 5 5 4003.388 66.72313 2.485 0.005
## 6 6 3981.485 66.35808 2.440 0.005
## 7 7 3999.579 66.65965 2.430 0.005
## 8 8 4001.464 66.69107 2.415 0.005
## 9 9 3982.311 66.37185 2.415 0.015
## 10 10 3989.564 66.49273 2.465 0.010
print(" Resumen estadistico ")
## [1] " Resumen estadistico "
print(resumen)
## estadistico valor
## 1 Réplicas 10.000
## 2 Piezas por réplica 200.000
## 3 Media tiempo total (min) 3992.360
## 4 Desviación (min) 7.850
## 5 Media tiempo total (horas) 66.539
hist(df$tiempo_total_min,
col = "lightblue",
main = "Tiempo total para procesar 200 piezas (10 réplicas)",
xlab = "Tiempo total (minutos)",
border = "gray")
abline(v = mean(df$tiempo_total_min), col = "red", lwd = 2)
legend("topright", legend = c("Media"), col = "red", lty = 1, bty = "n")
set.seed(123)
** Parámetros **
replicas <- 5
tiempo_simulacion <- 10 * 60 # 10 horas = 600 minutos
** Distribuciones Carga: uniforme(20, 40) Descarga: uniforme(15, 25) Traslado: exponencial con media 40 (λ = 1/40) **
simular_camion <- function() {
tiempo_total <- 0
viajes <- 0
while (tiempo_total < tiempo_simulacion) {
carga <- runif(1, 20, 40)
traslado1 <- rexp(1, rate = 1/40)
descarga <- runif(1, 15, 25)
traslado2 <- rexp(1, rate = 1/40)
tiempo_viaje <- carga + traslado1 + descarga + traslado2
if (tiempo_total + tiempo_viaje <= tiempo_simulacion) {
viajes <- viajes + 1
}
tiempo_total <- tiempo_total + tiempo_viaje
}
return(viajes)
}
** Ejecutar 5 réplicas **
viajes <- replicate(replicas, simular_camion())
** Calcular intervalo de confianza (95%) **
media_viajes <- mean(viajes)
desv_viajes <- sd(viajes)
error <- qt(0.975, df = replicas - 1) * (desv_viajes / sqrt(replicas))
IC <- c(media_viajes - error, media_viajes + error)
** Mostrar resultados **
cat(" Resultados \n")
## Resultados
cat("Viajes por réplica:", viajes, "\n")
## Viajes por réplica: 5 3 5 4 5
cat("Media de viajes:", round(media_viajes, 2), "\n")
## Media de viajes: 4.4
cat("Desviación estándar:", round(desv_viajes, 2), "\n")
## Desviación estándar: 0.89
cat("Intervalo de confianza 95%:", paste0("[", round(IC[1], 2), ", ", round(IC[2], 2), "]\n"))
## Intervalo de confianza 95%: [3.29, 5.51]
barplot(viajes,
names.arg = paste("Réplica", 1:replicas),
col = "lightblue",
main = "Número de viajes por réplica en 10 horas",
ylab = "Viajes completados",
ylim = c(0, max(viajes) + 2))
abline(h = media_viajes, col = "red", lwd = 2)
text(x = 1:replicas, y = viajes + 0.5, labels = viajes, col = "blue")
legend("topright", legend = c("Media de viajes"), col = "red", lty = 1, bty = "n")