Zdarzenia i procesy niedeterministyczne

Symulacja zdarzeń dyskretnych w Pythonie

Diogo Costa (PhD, MSc)

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

Niedeterminizm zdarzeń

UWAGA: Terminy „zdarzenie" i „proces" stosowane zamiennie.

Czym jest niedeterminizm zdarzenia (lub procesu)?

  • Niemożność dokładnego przewidzenia przebiegu procesu
  • Proces określany jako „niedeterministyczny"

Dlaczego procesy deterministyczne są ważne?

  • Procesy naturalne i ludzkie często są niedeterministyczne
  • Za każdym razem przebiegają inaczej
  • Ich czas trwania nie może być dokładnie określony
  • Mogą znacząco wpływać na wynik systemu
Symulacja zdarzeń dyskretnych w Pythonie

Przykłady procesów i zdarzeń niedeterministycznych

Świat przyrody

  • Moment erupcji wulkanu
  • Dokładny moment opadu deszczu
  • Czas i miejsce uderzenia pioruna
  • Czas i miejsce powstania tornada

Procesy inicjowane przez człowieka

  • Moment awarii maszyny
  • Moment odczucia potrzeby skorzystania z toalety
  • Moment, w którym dziecko zaczyna płakać
  • Czy lot komercyjny zostanie opóźniony
Symulacja zdarzeń dyskretnych w Pythonie

Reprezentowanie zdarzeń niedeterministycznych w modelach dyskretnych

Procesy niedeterministyczne

  • Wywołują niepowtarzalny wpływ na system
  • Czas trwania jest nieznany

Statystyki

  • Reprezentują zmienność czasu trwania procesów
  • Pomocny jest pakiet random

  • Przykład: 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])

Symulacja zdarzeń dyskretnych w Pythonie

Reprezentowanie zdarzeń niedeterministycznych w SimPy

  • Brak dedykowanych metod obsługi procesów niedeterministycznych

  • Zmienność czasu trwania obliczana jak w modelach bez SimPy

  • Przekaż odpowiednie statystyki do .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]))
Symulacja zdarzeń dyskretnych w Pythonie

Czas na ćwiczenia!

Symulacja zdarzeń dyskretnych w Pythonie

Preparing Video For Download...