Saltar al contenido principal

Simpy - Ejercicio 1

Modelos de Simulación


import simpy
import random

# Configuración
TASA_LLEGADA = 10
TASA_SERVICIO = 12
TIEMPO_SIMULACION = 8 * 60 # en minutos

def cliente(env, nombre, caja):
print(f'{nombre} llega a la tienda en el minuto {env.now}')
with caja.request() as req:
yield req # Espera hasta que la caja esté disponible
print(f'{nombre} empieza a ser atendido en el minuto {env.now}')
tiempo_servicio = random.expovariate(TASA_SERVICIO)
yield env.timeout(tiempo_servicio) # Tiempo que tarda en ser atendido
print(f'{nombre} sale de la tienda en el minuto {env.now}')

def generador_clientes(env, tasa_llegada, caja):
i = 0
while True:
yield env.timeout(random.expovariate(tasa_llegada)) # Tiempo hasta el próximo cliente
i += 1
env.process(cliente(env, f'Cliente {i}', caja))

# Crea el entorno de simulación
env = simpy.Environment()

# Crea la caja registradora
caja = simpy.Resource(env, capacity=1)

# Comienza el proceso de generación de clientes
env.process(generador_clientes(env, TASA_LLEGADA, caja))

# Ejecuta la simulación
env.run(until=TIEMPO_SIMULACION)

Este script simula un día de trabajo de 8 horas en una tienda con una sola caja registradora. Los clientes llegan de acuerdo con un proceso de Poisson y el tiempo que tarda en atender a un cliente es una variable aleatoria exponencial.

En el script, primero se definen dos funciones: cliente y generador_clientes. La función cliente representa el comportamiento de un cliente individual en la tienda, mientras que generador_clientes genera nuevos clientes con un tiempo entre llegadas que sigue una distribución exponencial.

Se crea un entorno de simulación y una caja registradora. Luego, se inicia el proceso de generación de clientes y se ejecuta la simulación durante un tiempo especificado (en este caso, 8 horas).