Icke-deterministiska händelser och processer

Diskret händelsesimulering i Python

Diogo Costa (PhD, MSc)

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

Icke-determinism i händelser

OBS: Termerna "händelse" och "process" används omväxlande.

Vad är icke-determinism i händelser (eller processer)?

  • En process som inte kan förutsägas korrekt
  • Kallas för en "icke-deterministisk" process

Varför är deterministiska processer viktiga?

  • Natur- och mänskliga aktiviteter innefattar ofta icke-deterministiska processer
  • Varje gång de inträffar sker de på olika sätt
  • Deras varaktighet kan inte bestämmas exakt
  • Kan ha stor påverkan på systemets utfall
Diskret händelsesimulering i Python

Exempel på icke-deterministiska processer och händelser

Naturvärlden

  • När en vulkan utbryter
  • Exakt när det börjar regna
  • Tid och plats för blixtslag
  • Tid och plats där en tornado bildas

Mänskliga eller mänskligt initierade processer

  • När en maskin går sönder
  • När man behöver gå på toaletten
  • När ett spädbarn börjar gråta
  • Om ett flygplan blir försenat
Diskret händelsesimulering i Python

Att representera icke-deterministiska händelser i diskret-händelsemodeller

Icke-deterministiska processer

  • Ger orepeterbar påverkan på systemet
  • Okänd exakt varaktighet

Statistik

  • Representerar variabilitet i processers varaktighet
  • Paketet random är användbart för detta

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

Diskret händelsesimulering i Python

Att representera icke-deterministiska händelser med SimPy

  • Inga specifika metoder för att hantera icke-deterministiska processer

  • Variabilitet i händelsers varaktighet beräknas som för modeller utan SimPy

  • Skicka rätt statistik till .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]))
Diskret händelsesimulering i Python

Nu kör vi en övning!

Diskret händelsesimulering i Python

Preparing Video For Download...