Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ASIGNATURA
INVESTIGACION DE OPERACIONES
DOCENTE
DR. SIMÓN PEDRO ARGUIJO HERNÁNDEZ
ALUMNOS
JOSÉ MANUEL VIVEROS BARRADAS
SEMESTRE
TERCERO
GRUPO
303A
La simulación se lleva a cabo en cada paso de tiempo definido por t.step mediante
un bucle for. En cada iteración del bucle, se genera un número aleatorio para
determinar si hay una nueva llegada con probabilidad λt.step. Si hay una llegada,
se incrementa el tamaño de la cola; si hay una salida (con probabilidad μt.step), se
reduce la cola, asegurando que nunca sea negativa. Si no ocurre ninguna de estas
dos situaciones, el tamaño de la cola permanece constante.
Actualmente, queue1() no incorpora una semilla aleatoria fija, lo que significa que
en cada ejecución se generan nuevos números aleatorios. Esta falta de
consistencia en los tiempos de llegada y servicio puede resultar en variaciones en
las métricas estadísticas del sistema simulado. Por ejemplo, el tiempo promedio
de espera o el número promedio de clientes en la cola pueden fluctuar de una
ejecución a otra.
Para mitigar esta variabilidad en los resultados de la simulación, se sugiere
establecer una semilla aleatoria fija para queue1(). Este enfoque garantizará que
se generen los mismos números aleatorios en cada ejecución de la función,
brindando así resultados más consistentes y comparables entre simulaciones.
Sus resultados son los mismos que los de su compañero considerando los
mismos parámetros.
La función queue1() utiliza números aleatorios para generar los tiempos de llegada
y los tiempos de servicio de los clientes. Esto significa que los resultados de la
simulación pueden variar, incluso cuando se utilizan los mismos parámetros de
entrada.
Una forma de entender cómo esto es posible es imaginar que estamos simulando
una cola de clientes en un supermercado. Los tiempos de servicio de los clientes
se pueden modelar mediante una distribución exponencial, que es una distribución
de probabilidad que se utiliza para modelar la ocurrencia de eventos aleatorios
que ocurren a intervalos irregulares.
Este código en R hace uso del paquete simmer para llevar a cabo una simulación
de eventos discretos, representando así un proceso médico elemental. El modelo
simula de manera detallada las distintas fases que experimentan los pacientes,
desde su admisión hasta la consulta con el médico y la planificación
administrativa.
library(simmer)
set.seed(42)
env %>%
add_resource("nurse", 1) %>%
add_resource("doctor", 2) %>%
add_resource("administration", 1) %>%
add_generator("patient", patient, function() rnorm(1, 10, 2))
env %>%
run(80) %>%
now()
env %>% peek(3)
env %>%
stepn() %>% # 1 step
print() %>%
stepn(3) # 3 steps
env %>% peek(Inf, verbose=TRUE)
env %>%
run(120) %>%
now()
env %>%
reset() %>%
run(80) %>%
now()
library(simmer)
set.seed(42)
env <- simmer("SuperDuperSim")
La trayectoria del paciente engloba una serie de tareas que deben llevarse a cabo
para culminar el proceso médico. Estas tareas abarcan desde la asignación de
recursos hasta los intervalos de espera y la liberación de dichos recursos.
env %>%
add_resource("nurse", 1) %>%
add_resource("doctor", 2) %>%
add_resource("administration", 1) %>%
add_generator("patient", patient, function() rnorm(1, 10, 2))
Ejecución de la simulación:
env %>%
run(80) %>%
now()
env %>%
stepn() %>%
print() %>%
stepn(3)
env %>%
run(120) %>%
now()
env %>%
reset() %>%
run(80) %>%
now()
Por lo tanto, el código imprime:
Este script emplea el paquete simmer para representar y ejecutar la simulación de
un proceso médico elemental, donde los pacientes atraviesan diversas actividades
y utilizan recursos específicos en un contexto de eventos discretos. La simulación
progresa a través de múltiples etapas, permitiendo la inspección detallada y la
visualización de la dinámica del sistema en diferentes momentos.
Ejemplo 2 con Simmer
library(parallel)
envs %>%
get_mon_resources() %>%
head()
envs %>%
get_mon_arrivals() %>%
head()
library(parallel)
Este script en R hace uso de la librería simmer para crear una trayectoria simple
de simulación y luego presenta los métodos que están disponibles para los objetos
pertenecientes a la clase "trayectoria".
library(simmer)
traj <- trajectory() %>%
seize(resource = "doctor", amount = 1) %>%
timeout(task = 3) %>%
release(resource = "doctor", amount = 1)
methods(class="trajectory")
1. Carga de la biblioteca:
library(simmer)
methods(class="trajectory")
El resultado de la ejecución del código es la siguiente:
Ejemplo 4 con Simmer
library(simmer)
1. Carga de la biblioteca:
library(simmer)
5. Ejecución de la simulación:
library(simmer)
customer <-
trajectory("Customer's path") %>%
log_("Here I am") %>%
timeout(10) %>%
log_("I must leave")
bank <-
simmer("bank") %>%
add_generator("Customer", customer, at(5))
1. Carga de la biblioteca:
library(simmer)
library(simmer)
customer <-
trajectory("Customer's path") %>%
log_("Here I am") %>%
timeout(loop(7, 10, 20)) %>%
log_("I must leave")
bank <-
simmer("bank") %>%
add_generator("Customer", customer, at(2, 5, 12))
1. Carga de la biblioteca:
library(simmer)
customer <-
trajectory("Customer's path") %>%
log_("Here I am") %>%
timeout(loop(7, 10, 20)) %>%
log_("I must leave")
bank <-
simmer("bank") %>%
add_generator("Customer", customer, at(2, 5, 12))
library(simmer)
# setup
set.seed(42)
env <- simmer()
env %>%
add_resource("wash", NUM_MACHINES) %>%
# feed the trajectory with 4 initial cars
add_generator("car_initial", car, at(rep(0, 4))) %>%
# new cars approx. every T_INTER minutes
add_generator("car", car, function() sample((T_INTER-2):(T_INTER+2), 1)) %>%
# start the simulation
run(SIM_TIME)
1. Definición de parámetros:
set.seed(42)
env %>%
add_resource("wash", NUM_MACHINES) %>%
add_generator("car_initial", car, at(rep(0, 4))) %>%
add_generator("car", car, function() sample((T_INTER-2):(T_INTER+2), 1))
5. Ejecución de la simulación:
env %>% run(SIM_TIME)
Resultados
El enfoque paso a paso es más detallado y permite una mejor comprensión del
comportamiento del sistema. Sin embargo, también es más complejo y requiere
más tiempo de ejecución.
En conjunto, los dos enfoques ofrecen una herramienta integral para modelar,
analizar y optimizar sistemas prácticos de colas de clientes.
Estos códigos demuestran cómo usar el paquete simmer para modelar y simular
procesos complejos, asignar recursos y ejecutar simulaciones en entornos
controlados. Las operaciones de inspección son cruciales para comprender el
comportamiento de los sistemas modelados.
Anexos
simmer. (s.f.). Obtenido de simmer: https://r-simmer.org/articles/