Enunciado original:
Una barra de longitud x1 será unida mediante soldadura a otra de longitud x2. Si x1 sigue una distribución normal con media de 30 cm y varianza de 0.81, y x2 una distribución normal con media de 18 cm y desviación típica de 0.3, simule la soldadura de 500 barras. Tome en cuenta que las especificaciones de diseño son de 50 ± 5 cm y determine el estimador de la probabilidad de que una barra esté fuera de especificaciones.
También calcule los coeficientes de capacidad Cp y Cpk de este proceso. ¿Considera que está bajo control?
set.seed(323)
n <- 500
x1 <- rnorm(n, mean = 30, sd = sqrt(0.81))
x2 <- rnorm(n, mean = 18, sd = 0.3)
X <- x1 + x2
LSL <- 45
USL <- 55
prop_out <- mean(X < LSL | X > USL)
prop_out
## [1] 0
sigmaX <- sd(X)
Cp <- (USL - LSL) / (6 * sigmaX)
Cpk <- min((mean(X) - LSL)/(3*sigmaX), (USL - mean(X))/(3*sigmaX))
Cp; Cpk
## [1] 1.775963
## [1] 1.09054
A continuación se presenta la explicación del punto y después se incluyen secciones separadas de código, cada una comentada y organizada.
set.seed(123)
n <- 500
x1 <- rnorm(n, mean = 30, sd = sqrt(0.81))
x2 <- rnorm(n, mean = 18, sd = 0.3)
X <- x1 + x2
LSL <- 45
USL <- 55
prop_out <- mean(X < LSL | X > USL)
prop_out
## [1] 0
sigmaX <- sd(X)
Cp <- (USL - LSL) / (6 * sigmaX)
Cpk <- min((mean(X) - LSL)/(3*sigmaX), (USL - mean(X))/(3*sigmaX))
Cp; Cpk
## [1] 1.828435
## [1] 1.108189
Soldadura de barras
set.seed(123)
n <- 500
x1 <- rnorm(n, mean = 30, sd = sqrt(0.81))
x2 <- rnorm(n, mean = 18, sd = 0.3)
X <- x1 + x2
LSL <- 45; USL <- 55
# Estimador probabilidad fuera de especificación
prop_out <- mean(X < LSL | X > USL)
prop_out
## [1] 0
# Índices Cp y Cpk
sigmaX <- sd(X)
Cp <- (USL - LSL) / (6 * sigmaX)
Cpk <- min((mean(X) - LSL)/(3*sigmaX), (USL - mean(X))/(3*sigmaX))
Cp; Cpk
## [1] 1.828435
## [1] 1.108189
Enunciado original:
Cada 20 minutos llegan piezas a una estación de reproceso. El número de defectos que una pieza puede tener como máximo es 3. Se sabe que estos defectos siguen una distribución Binomial con media 2.4.
El tiempo para realizar las reparaciones correspondientes se distribuye exponencial con λ = 0.2 piezas por minuto por cada defecto que tenga la pieza.
Determine cuánto tiempo tomará procesar 200 piezas. Use 10 réplicas.
set.seed(42)
replicas <- 10
n_piezas <- 200
lambda <- 0.2
p <- 0.8
simulate_run <- function(n){
arrivals <- seq(0, by = 20, length.out = n)
finish_prev <- 0
finishes <- numeric(n)
for(i in 1:n){
k <- rbinom(1, size = 3, prob = p)
repair_time <- ifelse(k == 0, 0, sum(rexp(k, rate=lambda)))
start <- max(arrivals[i], finish_prev)
finish <- start + repair_time
finishes[i] <- finish
finish_prev <- finish
}
return(finish_prev)
}
results <- replicate(replicas, simulate_run(n_piezas))
results
## [1] 3980.148 3984.449 4018.806 3992.825 3994.959 3988.237 3998.612 4006.503
## [9] 3988.521 3994.283
mean(results)
## [1] 3994.734
sd(results)
## [1] 11.23617
: Estación de reproceso (200 piezas, 10 réplicas)**
A continuación se explica cada sub‑punto y se agregan trozos de código separados.
set.seed(42)
replicas <- 10
n_piezas <- 200
lambda <- 0.2
p <- 0.8
simulate_run <- function(n){
arrivals <- seq(0, by = 20, length.out = n)
finish_prev <- 0
finishes <- numeric(n)
for(i in 1:n){
k <- rbinom(1, size = 3, prob = p)
repair_time <- ifelse(k == 0, 0, sum(rexp(k, rate=lambda)))
start <- max(arrivals[i], finish_prev)
finish <- start + repair_time
finishes[i] <- finish
finish_prev <- finish
}
return(finish_prev)
}
results <- replicate(replicas, simulate_run(n_piezas))
results
## [1] 3980.148 3984.449 4018.806 3992.825 3994.959 3988.237 3998.612 4006.503
## [9] 3988.521 3994.283
mean(results)
## [1] 3994.734
sd(results)
## [1] 11.23617
Estación de reproceso (200 piezas, 10 réplicas)
set.seed(42)
replicas <- 10
n_piezas <- 200
lambda <- 0.2
p <- 0.8
simulate_run <- function(n){
arrivals <- seq(0, by = 20, length.out = n)
finish_prev <- 0
finishes <- numeric(n)
for(i in 1:n){
k <- rbinom(1, size = 3, prob = p)
repair_time <- ifelse(k == 0, 0, sum(rexp(k, rate=lambda)))
start <- max(arrivals[i], finish_prev)
finish <- start + repair_time
finishes[i] <- finish
finish_prev <- finish
}
return(finish_prev)
}
results <- replicate(replicas, simulate_run(n_piezas))
results
## [1] 3980.148 3984.449 4018.806 3992.825 3994.959 3988.237 3998.612 4006.503
## [9] 3988.521 3994.283
mean(results); sd(results)
## [1] 3994.734
## [1] 11.23617
Enunciado original:
Un camión de reparto tarda 30 ± 10 minutos en ser cargado, 20 ± 5 minutos en ser descargado, y 40 minutos con distribución exponencial en trasladarse, ya sea de su base al lugar de entrega o del lugar de entrega a su base.
set.seed(2025)
replicas <- 5
limite <- 10 * 60
simulate_trucks <- function(t_limit){
t <- 0
trips <- 0
while(TRUE){
load_time <- max(rnorm(1,30,10),0)
unload_time <- max(rnorm(1,20,5),0)
t <- t + load_time
t <- t + rexp(1, rate=1/40)
t <- t + unload_time
t <- t + rexp(1, rate=1/40)
if(t <= t_limit) trips <- trips + 1 else break
}
return(trips)
}
results10 <- replicate(replicas, simulate_trucks(limite))
results10
## [1] 3 4 4 4 6
Sistema de reparto (10 horas, 5 réplicas)
Se muestran bloques separados de código para mayor claridad.
set.seed(2025)
replicas <- 5
limite <- 10 * 60
simulate_trucks <- function(t_limit){
t <- 0
trips <- 0
while(TRUE){
load_time <- max(rnorm(1,30,10),0)
unload_time <- max(rnorm(1,20,5),0)
t <- t + load_time
t <- t + rexp(1, rate=1/40)
t <- t + unload_time
t <- t + rexp(1, rate=1/40)
if(t <= t_limit) trips <- trips + 1 else break
}
return(trips)
}
results10 <- replicate(replicas, simulate_trucks(limite))
results10
## [1] 3 4 4 4 6
: Sistema de reparto (10 horas, 5 réplicas)**
set.seed(2025)
replicas <- 5
limite <- 10 * 60
simulate_trucks <- function(t_limit){
t <- 0
trips <- 0
while(TRUE){
load_time <- max(rnorm(1,30,10),0)
unload_time <- max(rnorm(1,20,5),0)
t <- t + load_time
t <- t + rexp(1, rate=1/40)
t <- t + unload_time
t <- t + rexp(1, rate=1/40)
if(t <= t_limit) trips <- trips + 1 else break
}
return(trips)
}
results10 <- replicate(replicas, simulate_trucks(limite))
results10
## [1] 3 4 4 4 6
set.seed(99)
reps <- 5000
trips24 <- replicate(reps, simulate_trucks(24*60))
quantile(trips24, c(0.025, 0.5, 0.975))
## 2.5% 50% 97.5%
## 8 11 13
mean(trips24)
## [1] 10.6914
para viajes por día (24 h)
Se separa el análisis en una sección específica.
set.seed(99)
reps <- 5000
trips24 <- replicate(reps, simulate_trucks(24*60))
quantile(trips24, c(0.025, 0.5, 0.975))
## 2.5% 50% 97.5%
## 8 11 13
mean(trips24)
## [1] 10.6914
para viajes por día (24 h)
set.seed(99)
reps <- 5000
trips24 <- replicate(reps, simulate_trucks(24*60))
quantile(trips24, c(0.025, 0.5, 0.975))
## 2.5% 50% 97.5%
## 8 11 13
mean(trips24)
## [1] 10.6914