Nichtdeterministische Ereignisse und Prozesse

Diskrete-Ereignis-Simulation mit Python

Diogo Costa (PhD, MSc)

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

Nichtdeterminismus von Ereignissen

HINWEIS: Die Begriffe „Ereignis“ und „Prozess“ werden austauschbar verwendet.

Was ist Nichtdeterminismus bei Ereignissen/Prozessen?

  • Ablauf lässt sich nicht genau vorhersagen
  • Der Prozess gilt als „nichtdeterministisch“

Warum sind deterministische Prozesse wichtig?

  • Viele natürliche und menschliche Abläufe sind nichtdeterministisch
  • Jedes Auftreten verläuft anders
  • Dauer nicht exakt bestimmbar
  • Kann den Systemoutput stark beeinflussen
Diskrete-Ereignis-Simulation mit Python

Beispiele nichtdeterministischer Prozesse/Ereignisse

Natur

  • Zeitpunkt eines Vulkanausbruchs
  • Genaue Regenzeit
  • Zeit und Ort eines Blitzeinschlags
  • Zeit und Ort einer Tornadobildung

Menschengetriebene/-initiierte Prozesse

  • Zeitpunkt eines Maschinenausfalls
  • Moment, in dem man aufs Klo muss
  • Moment, in dem ein Baby zu weinen beginnt
  • Ob ein Linienflug verspätet ist
Diskrete-Ereignis-Simulation mit Python

Nichtdeterministische Ereignisse in ereignisdiskreten Modellen abbilden

Nichtdeterministische Prozesse

  • Wirken nicht reproduzierbar aufs System
  • Exakte Dauer unbekannt

Statistik

  • Bildet die Dauerstreuung von Prozessen ab
  • Das Paket random hilft dabei

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

Diskrete-Ereignis-Simulation mit Python

Nichtdeterministische Ereignisse mit SimPy abbilden

  • Es gibt keine speziellen Methoden für nichtdeterministische Prozesse

  • Dauerstreuung wie bei nicht-SimPy-Modellen berechnen

  • Die passenden Statistiken an .timeout() übergeben DNT_CURLY_TAG_3

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]))
Diskrete-Ereignis-Simulation mit Python

Lass uns üben!

Diskrete-Ereignis-Simulation mit Python

Preparing Video For Download...