Eventos y procesos no deterministas

Simulación de eventos discretos en Python

Diogo Costa (PhD, MSc)

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

No determinación de eventos

NOTA: “evento” y “proceso” se usan indistintamente.

¿Qué es la no determinación de eventos/procesos?

  • Imposibilidad de predecir el proceso con precisión
  • El proceso se considera «no determinista»

¿Por qué importan los procesos deterministas?

  • Muchas actividades naturales y humanas son no deterministas
  • Cada vez ocurren de forma distinta
  • Su duración no se puede determinar con precisión
  • Pueden afectar mucho al resultado del sistema
Simulación de eventos discretos en Python

Ejemplos de procesos o eventos no deterministas

Mundo natural

  • Momento en que un volcán hará erupción
  • Momento exacto en que lloverá
  • Cuándo y dónde caerá un rayo
  • Cuándo y dónde se formará un tornado

Procesos impulsados o iniciados por humanos

  • Momento en que se rompe una máquina
  • Momento en que alguien necesita ir al baño
  • Momento en que un bebé empieza a llorar
  • Si un vuelo comercial se retrasará
Simulación de eventos discretos en Python

Representar eventos no deterministas en modelos de eventos discretos

Procesos no deterministas

  • Impacto no repetible en el sistema
  • Duración exacta desconocida

Estadística

  • Representa la variabilidad en la duración
  • El paquete random ayuda con esto

  • Ejemplo: random.randint(start, end)

import random

# Non-deterministic processes
process_1 = [5, 15]

while time < simulation_time:

   # Update simulation time: process_1
   time += random.randint(
               process_1[0], 
               process_1[1])

Simulación de eventos discretos en Python

Representar eventos no deterministas con SimPy

  • No hay métodos específicos para tratar procesos no deterministas

  • La variabilidad de duración se calcula igual que en modelos sin SimPy

  • Pasa las estadísticas correctas a .timeout()

import random

# Non-deterministic processes
process_1 = [5, 15]

while True:

  # Update simulation time: process_1
  yield env.timeout(random.randint(
         process_1[0], 
         process_1[1]))
Simulación de eventos discretos en Python

¡Vamos a practicar!

Simulación de eventos discretos en Python

Preparing Video For Download...