Pseudo-losowe zdarzenia i metody

Symulacja zdarzeń dyskretnych w Pythonie

Diogo Costa (PhD, MSc)

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

Losowość procesów (i zdarzeń)

Czym jest losowość?

  • Proces nadawania czemuś losowego charakteru
  • W tym przypadku: losowanie zdarzeń (lub procesów)
  • Przydatne do symulowania procesów niedeterministycznych

Ważna uwaga: Komputery z zasady nie są w stanie generować naprawdę losowych liczb.

  • Aby zwiększyć losowość generatora, często wykorzystuje się bieżący czas i inne zmienne zewnętrzne.
Symulacja zdarzeń dyskretnych w Pythonie

Losowe vs. pseudo-losowe

Generowanie „prawdziwie" losowe

  • Liczby naprawdę losowe
  • Losowość ograniczona przez właściwości maszyny

Generowanie pseudo-losowe

  • Liczby generowane na podstawie rozkładów prawdopodobieństwa
  • Rozkład statystyczny ujawnia się wraz ze wzrostem liczby próbek

Przykład: Fabryka z ręcznym zadaniem montażowym

Wykres punktowy przedstawiający czas trwania określonego montażu ręcznego w kolejnych powtórzeniach.

  • Rozkład prawdopodobieństwa jest lepszym podejściem do generowania pseudo-losowego kolejnego zdarzenia
Symulacja zdarzeń dyskretnych w Pythonie

Pakiety do pseudo-losowości

Można użyć kilku pakietów statystycznych:

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

Pakiet Random

  • Generowanie liczb losowych i pseudo-losowych

Nasz zakres

  • Metody powszechnie stosowane w modelach symulacji dyskretnej
Symulacja zdarzeń dyskretnych w Pythonie

Losowa liczba z danego zakresu

Losowa liczba całkowita z danego zakresu

Metoda:

random.randint(start, end)

Przykład: Losowa liczba całkowita między 3 (włącznie) a 9 (wyłącznie)

random.randint(3, 9)
5

Losowa liczba zmiennoprzecinkowa z danego zakresu

Metoda:

random.uniform(start, end)

Przykład: Losowa liczba zmiennoprzecinkowa między 3 a 9

random.uniform(3, 9)
6.4557754
Symulacja zdarzeń dyskretnych w Pythonie

Losowe próbki i sekwencje

Losowa próbka z sekwencji

Metoda:

random.sample(mylist, k=number_samples)

Przykład: 2 losowe elementy z listy

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

Tasowanie listy (zmiana kolejności elementów)

Metoda:

random.shuffle(mylist)

Przykład: Losowa zmiana kolejności elementów listy

mylist = ["book", "pencil", "eraser"]
random.shuffle(mylist)
['eraser', 'pencil', 'book']
Symulacja zdarzeń dyskretnych w Pythonie

Rozkłady Gaussa i wykładniczy

Rozkład Gaussa

Metoda:

random.gauss(average, standard_dev)

Przykład: Pseudo-losowa liczba zmiennoprzecinkowa ze średnią 100 i odchyleniem standardowym 50

random.gauss(100, 50)
123.59383

Rozkład wykładniczy

Metoda:

random.expovariate(lambda)
  • jeśli lambda>0, wyniki [0, infinity]
  • jeśli lambda<0, wyniki [-infinity, 0]

Przykład: Pseudo-losowa liczba zmiennoprzecinkowa z rozkładu wykładniczego z lambda równą 1.5: random.expovariate(1.5)

0.2234355
Symulacja zdarzeń dyskretnych w Pythonie

Czas na ćwiczenia!

Symulacja zdarzeń dyskretnych w Pythonie

Preparing Video For Download...