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.

Che cos'è la non-deterministicità di un evento (o processo)?

  • Impossibilità di prevedere con precisione un processo
  • Il processo è detto "non deterministico"

Perché i processi deterministici sono importanti?

  • Le 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

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

Processi guidati o avviati dall'uomo

  • Momento in cui una macchina si romperà
  • Quando si sente il bisogno di andare in bagno
  • Quando un neonato inizia a piangere
  • Se un volo commerciale avrà ritardo
Simulazione a eventi discreti in Python

Rappresentare eventi non deterministici nei modelli a eventi discreti

Processi non deterministici

  • Producono effetti 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 per 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
  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...