Nedeterministické události a procesy

Diskrétní simulace událostí v Pythonu

Diogo Costa (PhD, MSc)

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

Nedeterminismus událostí

POZNÁMKA: Pojmy „událost" a „proces" jsou používány zaměnitelně.

Co je nedeterminismus události (nebo procesu)?

  • Neschopnost přesně předpovědět průběh procesu
  • Proces je označován jako „nedeterministický"

Proč jsou deterministické procesy důležité?

  • Přírodní i lidské aktivity často zahrnují nedeterministické procesy
  • Pokaždé probíhají jinak
  • Jejich trvání nelze přesně určit
  • Mohou mít výrazný vliv na výstup systému
Diskrétní simulace událostí v Pythonu

Příklady nedeterministických procesů nebo událostí

Přírodní svět

  • Okamžik erupce sopky
  • Přesný okamžik příchodu deště
  • Čas a místo úderu blesku
  • Čas a místo vzniku tornáda

Lidsky řízené nebo iniciované procesy

  • Okamžik poruchy stroje
  • Okamžik pocitu potřeby jít na toaletu
  • Okamžik, kdy začne plakat dítě
  • Zda bude komerční let zpožděn
Diskrétní simulace událostí v Pythonu

Reprezentace nedeterministických událostí v modelech diskrétních událostí

Nedeterministické procesy

  • Způsobují neopakovatelné dopady na systém
  • Přesná délka trvání je neznámá

Statistika

  • Vyjadřuje variabilitu délky trvání procesů
  • K tomu je užitečný balíček random

  • Příklad: 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])

Diskrétní simulace událostí v Pythonu

Reprezentace nedeterministických událostí pomocí SimPy

  • Žádné specifické metody pro práci s nedeterministickými procesy

  • Variabilita délky událostí se počítá stejně jako u modelů bez SimPy

  • Správné statistiky předejte do .timeout() 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]))
Diskrétní simulace událostí v Pythonu

Pojďme si procvičit!

Diskrétní simulace událostí v Pythonu

Preparing Video For Download...