Pseudo-náhodnost událostí a metod

Diskrétní simulace událostí v Pythonu

Diogo Costa (PhD, MSc)

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

Randomizace procesů (nebo událostí)

Co je randomizace?

  • Proces, při němž je něco náhodné
  • Zde: záznam náhodných událostí (nebo procesů)
  • Užitečné pro simulaci nedeterministických procesů

Poznámka: Počítače ze své podstaty nedokáží generovat skutečně náhodná čísla.

  • Aktuální čas a jiné vnější proměnné se často používají ke zvýšení náhodnosti generátoru.
Diskrétní simulace událostí v Pythonu

Náhodné vs. pseudo-náhodné

„Skutečně" náhodné generování

  • Čísla jsou skutečně náhodná
  • Náhodnost omezena inherentními vlastnostmi stroje

Pseudo-náhodné generování

  • Čísla jsou generována na základě pravděpodobnostních rozdělení
  • Statistické rozdělení se projevuje s rostoucím počtem vzorků

Příklad: Továrna s ručním montážním úkolem

Bodový graf znázorňující dobu trvání konkrétní ruční montáže při opakovaném provádění.

  • Pravděpodobnostní rozdělení je vhodnější pro generování pseudo-náhodného dalšího výskytu
Diskrétní simulace událostí v Pythonu

Balíčky pro pseudo-randomizaci

Lze použít několik statistických balíčků:

  • NumPy
  • SciPy
  • statsmodels
  • pandas
  • Random
  • scikit-learn

Balíček Random

  • Generování náhodných a pseudo-náhodných čísel

Naše zaměření

  • Metody běžně používané v modelech diskrétních událostí
Diskrétní simulace událostí v Pythonu

Náhodné číslo v daném rozsahu

Náhodné celé číslo v daném rozsahu

Metoda:

random.randint(start, end)

Příklad: Náhodné celé číslo mezi 3 (včetně) a 9 (nezahrnuto)

random.randint(3, 9)
5

Náhodné desetinné číslo v daném rozsahu

Metoda:

random.uniform(start, end)

Příklad: Náhodné desetinné číslo mezi 3 a 9

random.uniform(3, 9)
6.4557754
Diskrétní simulace událostí v Pythonu

Náhodné vzorky a sekvence

Náhodný výběr ze sekvence

Metoda:

random.sample(mylist, k=number_samples)

Příklad: 2 náhodné prvky ze seznamu

mylist = ["apple", "banana", "cherry"]
random.sample(mylist, k=2)
['cherry', 'banana']

Zamíchání seznamu (změna pořadí prvků)

Metoda:

random.shuffle(mylist)

Příklad: Náhodné přeuspořádání prvků seznamu

mylist = ["book", "pencil", "eraser"]
random.shuffle(mylist)
['eraser', 'pencil', 'book']
Diskrétní simulace událostí v Pythonu

Gaussovo a exponenciální rozdělení

Gaussovo rozdělení

Metoda:

random.gauss(average, standard_dev)

Příklad: Pseudo-náhodné desetinné číslo s průměrem 100 a směrodatnou odchylkou 50

random.gauss(100, 50)
123.59383

Exponenciální rozdělení

Metoda:

random.expovariate(lambda)
  • pokud lambda>0, výsledky [0, infinity]
  • pokud lambda<0, výsledky [-infinity, 0]

Příklad: Pseudo-náhodné desetinné číslo s exponenciálním rozdělením, lambda = 1,5: random.expovariate(1.5)

0.2234355
Diskrétní simulace událostí v Pythonu

Pojďme cvičit!

Diskrétní simulace událostí v Pythonu

Preparing Video For Download...