Crear un modelo de eventos discretos con SimPy

Simulación de eventos discretos en Python

Dr Diogo Costa

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Antes de construir el modelo

  • Entender el sistema dinámico

  • Definir objetivo(s) del modelo de eventos discretos

  • Identificar procesos:

    • en paralelo
    • en secuencia
  • Identificar los recursos de SimPy (resource, container, store)

  • Definir la arquitectura del modelo:

    • Identificar variables de estado
    • Flujo de trabajo del modelo
    • Generadores
Simulación de eventos discretos en Python

Sistema dinámico y objetivos del modelo

Entender el sistema dinámico

  • ¿Qué aspectos modulan su comportamiento?
  • ¿Qué procesos/eventos hay que incluir?

Objetivos del modelo

  • A menudo se usa para optimizar sistemas
  • ¿Qué quieres optimizar?

    • Más clientes
    • Tiempos de proceso más rápidos
    • Optimizar la asignación de recursos
  • Variables de estado para monitorizar estos objetivos

Simulación de eventos discretos en Python

Identificar los recursos adecuados de SimPy

Recursos compartidos

simpy.Resource(env, capacity=4)
  • Recursos compartidos entre procesos

Ejemplos

  • Mesas en un restaurante
  • Máquinas en una fábrica
  • Asientos en un teatro
  • Cajeros en una tienda

Contenedores

simpy.Container(env, capacity, 
init=initial_capacity)
  • Recurso que se comporta como un tanque o cesta

  • Añadir y quitar cantidad:

.put() y .get()

Ejemplos

  • Combustible en una gasolinera
  • Carbón en una central térmica de carbón
Simulación de eventos discretos en Python

Identificar los recursos adecuados de SimPy

Store

simpy.Store(env, capacity=4)
  • Recurso tipo almacén con múltiples ítems

  • Capacidad ilimitada (por defecto)

  • Huecos de capacidad para guardar objetos arbitrarios

  • Añadir y quitar ítems:

.put() y .get()

Ejemplos

  • Tiendas que venden múltiples artículos
  • Trastero
  • Taller
  • Hogar
Simulación de eventos discretos en Python

Concatena eventos con operadores bit a bit

SimPy usa operadores bit a bit para concatenar dos eventos

Tipos de operadores en Python

  • Aritméticos, lógicos y de comparación

Operadores bit a bit

  • Cálculos a nivel de bits sobre enteros
  • Esperan dos operandos
    • Ejemplo: a & b, a >> b, a ^ b

En SimPy

  • Los operadores bit a bit generan un evento de condición
  • Espera a ambos o a uno de dos eventos/procesos

Operadores bit a bit relevantes en SimPy

  • Espera a ambos procesos: __and__() o &
  • Espera a cualquiera de los procesos: __or__() o |
Simulación de eventos discretos en Python

¡Vamos a practicar!

Simulación de eventos discretos en Python

Preparing Video For Download...