Marín García, Juan Antonio
Una pequeña tienda de reparaciones. Los clientes llegan y esperan en la fila para ser atendidos. Un empleado recoge el equipo y el encargo de reparación por parte del cliente. Luego pasa el equipo a la sección de reparación (mientras el cliente espera). Cuando esta reparado, el cliente pasa por caja para pagar la reparación y recoger su equipo. Después de pagar, los clientes se retiran de la tienda.
Datos:
El objetivo de este objeto de aprendizaje es que los/as estudiantes puedan comprender y analizar el comportamiento de un sistema de colas, aplicando conceptos de ingeniería de organización, como distribuciones de probabilidad, tiempos de servicio, filas de espera y utilización de recursos.
Puedes ejecutar el codigo en https://rdrr.io/snippets/ (en este caso, las dos primeras líneas de código deben omitirse). Tambien se puede instalar en ordenador R y R-Studio con soft gratuito.
Las/os estudiantes deberán utilizar la información proporcionada sobre las distribuciones de probabilidad, tiempos de servicio y desplazamientos para ejecutar un modelo de simulación del sistema de la tienda de reparaciones. A partir de este modelo, podrán calcular indicadores clave como el tiempo promedio de espera de los clientes, la utilización de los empleados y la longitud de las filas. Con estos datos, podrán evaluar el desempeño del sistema y proponer mejoras.
Se pueden modificar los parámetros del modelo.
install.packages("simmer")
install.packages("dplyr")
library(simmer)
library(dplyr)
# Parámetros del modelo
MEAN_INTERARRIVAL_TIME <- 0.5 # Tiempo medio entre llegadas (minutos)
DELIVERY_TIME_MEAN <- 8 # Tiempo medio para la entrega del equipo (minutos)
DELIVERY_TIME_SD <- 3 # Desviación estándar para la entrega del equipo (minutos)
REPAIR_TIME_MEAN <- 18 # Tiempo medio para la reparación (minutos)
REPAIR_TIME_SD <- 12 # Desviación estándar para la reparación (minutos)
PAYMENT_TIME_MEAN <- 2 # Tiempo medio para el pago (minutos)
PAYMENT_TIME_SD <- 3 # Desviación estándar para el pago (minutos)
TRAVEL_TIME <- 15 / 60 # Tiempo de desplazamiento (15 segundos a minutos)
SIMULATION_TIME <- 100 # Tiempo de simulación (minutos)
run_simulation <- function() {
env <- simmer("RepairShop")
# Crear trayectoria para los clientes
customer_trajectory <- trajectory("customer path") %>%
seize("employee_delivery", 1) %>%
timeout(function() { rnorm(1, DELIVERY_TIME_MEAN, DELIVERY_TIME_SD) }) %>%
release("employee_delivery", 1) %>%
timeout(TRAVEL_TIME) %>%
seize("employee_repair", 1) %>%
timeout(function() { rnorm(1, REPAIR_TIME_MEAN, REPAIR_TIME_SD) }) %>%
release("employee_repair", 1) %>%
timeout(TRAVEL_TIME) %>%
seize("employee_payment", 1) %>%
timeout(function() { rnorm(1, PAYMENT_TIME_MEAN, PAYMENT_TIME_SD) }) %>%
release("employee_payment", 1) %>%
timeout(TRAVEL_TIME)
# Añadir recursos y generadores al entorno de simulación
env %>%
add_resource("employee_delivery", 1) %>%
add_resource("employee_repair", 1) %>%
add_resource("employee_payment", 1) %>%
add_generator("customer", customer_trajectory, function() { rexp(1, 1 / MEAN_INTERARRIVAL_TIME) }) %>%
run(until = SIMULATION_TIME)
arrivals <- get_mon_arrivals(env)
resources <- get_mon_resources(env)
# Resultados
avg_num_in_system <- mean(resources$queue + resources$server)
delivery_utilization <- resources %>% filter(resource == "employee_delivery") %>% summarize(utilization = mean(server / capacity)) %>% .$utilization
repair_utilization <- resources %>% filter(resource == "employee_repair") %>% summarize(utilization = mean(server / capacity)) %>% .$utilization
payment_utilization <- resources %>% filter(resource == "employee_payment") %>% summarize(utilization = mean(server / capacity)) %>% .$utilization
results <- list(
"Tiempo promedio en el sistema (minutos)" = mean(arrivals$activity_time),
"Tiempo máximo en el sistema (minutos)" = max(arrivals$activity_time),
"Tiempo mínimo en el sistema (minutos)" = min(arrivals$activity_time),
"Número de clientes atendidos" = nrow(arrivals),
"Número promedio en el sistema" = avg_num_in_system,
"Utilización de empleados de entrega" = delivery_utilization,
"Utilización de empleados de reparación" = repair_utilization,
"Utilización de empleados de pago" = payment_utilization
)
return(results)
}
# Ejecutar la simulación y mostrar los resultados
results <- run_simulation()
results_df <- as.data.frame(t(unlist(results)))
print(results_df)
Este objeto de aprendizaje permite a los/as estudiantes aplicar conceptos de ingeniería de organización, como análisis de sistemas de colas, en un entorno práctico y realista. Al construir y analizar el modelo de simulación, los/as estudiantes desarrollarán habilidades para comprender, diseñar y optimizar procesos de negocio, lo cual es fundamental en la gestión de operaciones y la mejora de la eficiencia organizacional.