Eventi e processi non deterministici

Simulazione a eventi discreti in Python

Diogo Costa (PhD, MSc)

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

Non determinismo degli eventi

NOTA: I termini "evento" e "processo" sono usati in modo intercambiabile.

Cos'è la non determinazione di un evento (o processo)?

  • Impossibile prevedere il processo con precisione
  • Il processo è detto "non deterministico"

Perché contano i processi deterministici?

  • Attività naturali e umane spesso sono non deterministiche
  • Ogni volta si ripetono in modo diverso
  • La durata non è stimabile con precisione
  • Possono influire molto sull'output del sistema
Simulazione a eventi discreti in Python

Esempi di processi o eventi non deterministici

Mondo naturale

  • Quando un vulcano erutterà
  • Il momento esatto in cui pioverà
  • Quando e dove colpirà un fulmine
  • Quando e dove si formerà un tornado

Processi guidati o avviati dall'uomo

  • Quando una macchina si romperà
  • Quando si avrà bisogno del bagno
  • Quando un neonato inizierà a piangere
  • Se un volo commerciale sarà in ritardo
Simulazione a eventi discreti in Python

Rappresentare eventi non deterministici nei modelli a eventi discreti

Processi non deterministici

  • Producono impatti non ripetibili sul sistema
  • Durata esatta sconosciuta

Statistica

  • Rappresenta la variabilità della durata dei processi
  • Il pacchetto random è utile per questo

  • Esempio: 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])

Simulazione a eventi discreti in Python

Rappresentare eventi non deterministici con SimPy

  • Nessun metodo specifico per gestire processi non deterministici

  • Variabilità della durata calcolata come nei modelli non basati su SimPy

  • Passa le statistiche corrette 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]))
Simulazione a eventi discreti in Python

Passiamo alla pratica!

Simulazione a eventi discreti in Python

Preparing Video For Download...