Punto #1

# Configuración
set.seed(123)  # Para reproducibilidad
n <- 500       # Número de barras

# Parámetros de las distribuciones
mu1 <- 30
sigma1 <- sqrt(0.81)
mu2 <- 18
sigma2 <- 0.3

# Especificaciones
LSL <- 45
USL <- 55

# Simulación de las barras
x1 <- rnorm(n, mean = mu1, sd = sigma1)
x2 <- rnorm(n, mean = mu2, sd = sigma2)
longitudes <- x1 + x2

# Estimador de probabilidad fuera de especificaciones
fuera_spec <- sum(longitudes < LSL | longitudes > USL) / n

# Estadísticas de la simulación
mu_sim <- mean(longitudes)
sigma_sim <- sd(longitudes)

# Índices de capacidad
Cp <- (USL - LSL) / (6 * sigma_sim)
Cpk <- min((USL - mu_sim)/(3 * sigma_sim), (mu_sim - LSL)/(3 * sigma_sim))

# Resultados
cat("Probabilidad estimada fuera de especificaciones:", round(fuera_spec, 4), "\n")
## Probabilidad estimada fuera de especificaciones: 0
cat("C_p:", round(Cp, 3), "\n")
## C_p: 1.828
cat("C_pk:", round(Cpk, 3), "\n")
## C_pk: 1.108
# Gráfica 
hist(longitudes, breaks = 20, col = "steelblue", border = "black", 
     main = "Histograma de Longitudes de Barras Soldadas",
     xlab = "Longitud (cm)", ylab = "Frecuencia", cex.main=1.5, cex.lab=1.2)
abline(v = LSL, col="red", lwd=3, lty=2)
abline(v = USL, col="red", lwd=3, lty=2)

Cp El índice Cp es una medida de potencial de capacidad de un proceso, es decir, cuánto podría cumplir con los límites de especificación asumiendo que el proceso está centrado entre esos límites.

Cpk El índice Cpk mide la capacidad real de un proceso para producir resultados dentro de las especificaciones, teniendo en cuenta tanto la variabilidad del proceso como el desplazamiento de la media respecto a los límites de especificación.

Punto # 2

set.seed(456)

n_piezas <- 200
n_replicas <- 10
llegada_tiempo <- 20
n_defectos_max <- 3
p_defecto <- 2.4 / n_defectos_max
lambda <- 0.2

simular_proceso <- function(n_piezas) {
  tiempos_reparacion <- numeric(n_piezas)
  for (i in 1:n_piezas) {
    D <- rbinom(1, n_defectos_max, p_defecto)
    tiempos_reparacion[i] <- if (D == 0) 0 else sum(rexp(D, lambda))
  }
  tiempos_llegada <- (0:(n_piezas - 1)) * llegada_tiempo
  tiempos_fin <- numeric(n_piezas)
  tiempos_fin[1] <- tiempos_llegada[1] + tiempos_reparacion[1]
  for (i in 2:n_piezas) {
    tiempos_fin[i] <- max(tiempos_llegada[i], tiempos_fin[i-1]) + tiempos_reparacion[i]
  }
  tiempos_fin[n_piezas]
}

resultados <- replicate(n_replicas, simular_proceso(n_piezas))

print(resultados)
##  [1] 3998.231 3984.700 3994.887 3991.175 3997.193 3983.551 3988.364 3984.240
##  [9] 3982.618 3982.414
cat("Promedio:", mean(resultados), "\nDesviación:", sd(resultados), "\n")
## Promedio: 3988.737 
## Desviación: 6.20383
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.2
df <- data.frame(Réplica = factor(1:n_replicas), Tiempo = resultados)
ggplot(df, aes(Réplica, Tiempo, fill = Réplica)) +
  geom_bar(stat="identity") +
  geom_text(aes(label=round(Tiempo,1)), vjust=-0.5) +
  labs(title="Tiempo para procesar 200 piezas (10 réplicas)", y="Tiempo (minutos)") +
  theme_minimal() +
  theme(legend.position="none")

Número de piezas procesadas: 200 Media de defectos: 2.38 Tiempo total de procesamiento: 4325.79 minutos

punto # 3

set.seed(123)  # Para reproducibilidad 

# Parámetros
n_replicas <- 5
tiempo_jornada <- 600  # minutos (10 horas)

media_carga <- 30
sd_carga <- 10

media_descarga <- 20
sd_descarga <- 5

media_traslado <- 40  # distribución exponencial

# Función para simular una réplica
simular_reparto <- function(jornada) {
  tiempo_total <- 0
  entregas <- 0
  
  while(tiempo_total < jornada) {
    # Carga (Normal)
    carga <- rnorm(1, mean = media_carga, sd = sd_carga)
    if(carga < 0) carga <- 0  # evitar tiempos negativos
    
    # Traslado ida (Exponencial)
    traslado_ida <- rexp(1, rate = 1/media_traslado)
    
    # Descarga (Normal)
    descarga <- rnorm(1, mean = media_descarga, sd = sd_descarga)
    if(descarga < 0) descarga <- 0
    
    # Traslado vuelta (Exponencial)
    traslado_vuelta <- rexp(1, rate = 1/media_traslado)
    
    # Sumar tiempo total de esta entrega
    tiempo_entrega <- carga + traslado_ida + descarga + traslado_vuelta
    
    # Actualizar tiempo acumulado
    tiempo_total <- tiempo_total + tiempo_entrega
    
    # Si no se excede la jornada, contar entrega
    if(tiempo_total <= jornada) {
      entregas <- entregas + 1
    }
  }
  
  return(entregas)
}

#  5 réplicas
resultados <- sapply(1:n_replicas, function(x) simular_reparto(tiempo_jornada))

# Mostrar resultados
resultados
## [1] 4 4 3 5 6
mean(resultados)  # Promedio de entregas por réplica
## [1] 4.4
# Crear un data frame para graficar
df <- data.frame(
  Réplica = factor(1:n_replicas),
  Entregas = resultados
)

# Graficar con ggplot2
library(ggplot2)

ggplot(df, aes(x = Réplica, y = Entregas, fill = Réplica)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = Entregas), vjust = -0.5) +
  labs(title = "Número de entregas en 5 réplicas (10 horas de simulación)",
       x = "Réplica",
       y = "Entregas completadas") +
  theme_minimal() +
  theme(legend.position = "none")

Punto B

# Función para contar viajes completos en un día
viajes_por_dia <- function(sim_time = 600) {
  tiempo_total <- 0
  viajes <- 0
  
  while(tiempo_total < sim_time) {
    carga <- max(rnorm(1, 30, 10), 0)
    traslado_ida <- rexp(1, rate = 1/40)
    descarga <- max(rnorm(1, 20, 5), 0)
    traslado_vuelta <- rexp(1, rate = 1/40)
    
    ciclo <- carga + traslado_ida + descarga + traslado_vuelta
    tiempo_total <- tiempo_total + ciclo
    
    if(tiempo_total <= sim_time) {  # solo contar viajes completos
      viajes <- viajes + 1
    }
  }
  
  return(viajes)
}

set.seed(123)
n_replicas <- 10000  # cantidad grande para mayor precisión
viajes <- numeric(n_replicas)

for(i in 1:n_replicas) {
  viajes[i] <- viajes_por_dia(600)
}

# Calcular intervalo de confianza del 95%
IC_95 <- quantile(viajes, probs = c(0.025, 0.975))
IC_95
##  2.5% 97.5% 
##     2     6
# El vector IC_95 te da el rango dentro del cual caerá el número de viajes en un día con 95% de confianza.

# Por ejemplo, si IC_95 = 5 7, significa que con un 95% de probabilidad, el camión hará entre 5 y 7 viajes en un día.

Punto C

#   supuestos:
# 1. Jornada laboral: 8 horas (480 min)
# 2. Tiempos promedios: carga = 30 min, descarga = 20 min, traslado = 40 min
# 3. Solo hay espacio para cargar un camión a la vez
# 4. Tiempo total por entrega: carga + traslado ida + descarga + traslado vuelta

# Tiempo promedio por entrega
tiempo_entrega <- 30 + 40 + 20 + 40  # 130 min

# Jornada laboral
jornada <- 480  # min

# Entregas posibles con 1 camión
entregas_1_camion <- jornada / tiempo_entrega
entregas_1_camion  # ≈ 3.69 entregas/día
## [1] 3.692308
# Número mínimo de camiones para alcanzar al menos 10 entregas/día
objetivo <- 10
camiones_necesarios <- ceiling(objetivo / entregas_1_camion)
camiones_necesarios  # 4 camiones
## [1] 3
# Recomendaciones:
recomendaciones <- c(
  "Incrementar la flota a 4 camiones para alcanzar 10 entregas/día.",
  "Optimizar la cola de carga o construir espacio adicional para carga simultánea.",
  "Reducir tiempos de carga y descarga mediante procesos más eficientes.",
  "Planificar rutas óptimas para minimizar tiempos de traslado.",
  "Distribuir camiones en paralelo para maximizar la eficiencia de la jornada."
)