Pseudo-Zufallsereignisse und -methoden

Diskrete-Ereignis-Simulation mit Python

Diogo Costa (PhD, MSc)

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

Randomisierung von Prozessen/Ereignissen

Was ist Randomisierung?

  • Etwas zufällig machen
  • Hier: Ereignisse/Prozesse zufällig machen
  • Nützlich, um nicht-deterministische Prozesse zu simulieren

Wichtig: Computer können konstruktionsbedingt keine echten Zufallszahlen erzeugen.

  • Aktuelle Zeit u. a. externe Variablen werden oft genutzt, um den Generator zufälliger zu machen.
Diskrete-Ereignis-Simulation mit Python

Echt vs. pseudozufällig

„Echte“ Zufallszahlen

  • Zahlen wirklich zufällig
  • Zufälligkeit durch Maschinenlimits beschränkt

Pseudozufallszahlen

  • Zahlen basieren auf Wahrscheinlichkeitsverteilungen
  • Verteilung wird mit mehr Stichproben sichtbar

Beispiel: Fabrik mit manueller Montageaufgabe

Streudiagramm der Dauer einer manuellen Montage über viele Wiederholungen.

  • Wahrscheinlichkeitsverteilung ist besser geeignet, um das nächste pseudozufällige Ereignis zu erzeugen
Diskrete-Ereignis-Simulation mit Python

Pakete für Pseudozufallszahlen

Mehrere Statistik-Pakete sind nutzbar:

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

Paket Random

  • Erzeugt zufällige und pseudozufällige Zahlen

Unser Fokus

  • Methoden, die in diskreten Ereignismodellen üblich sind
Diskrete-Ereignis-Simulation mit Python

Zahl in gegebenem Bereich zufällig wählen

Zufalls‑Integer in einem Bereich

Methode:

random.randint(start, end)

Beispiel: Zufalls‑Integer zwischen 3 (inkl.) und 9 (exkl.)

random.randint(3, 9)
5

Zufällige Fließkommazahl in einem Bereich

Methode:

random.uniform(start, end)

Beispiel: Zufällige Float zwischen 3 und 9

random.uniform(3, 9)
6.4557754
Diskrete-Ereignis-Simulation mit Python

Stichproben und Sequenzen

Zufallsstichprobe aus einer Sequenz

Methode:

random.sample(mylist, k=number_samples)

Beispiel: 2 zufällige Elemente aus einer Liste

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

Liste mischen (Reihenfolge ändern)

Methode:

random.shuffle(mylist)

Beispiel: Liste zufällig neu anordnen

mylist = ["book", "pencil", "eraser"]
random.shuffle(mylist)
['eraser', 'pencil', 'book']
Diskrete-Ereignis-Simulation mit Python

Gauß- und Exponentialverteilung

Gauß-Verteilung

Methode:

random.gauss(average, standard_dev)

Beispiel: Pseudozufällige Float mit Mittelwert 100 und Std.-Abw. 50

random.gauss(100, 50)
123.59383

Exponentialverteilung

Methode:

random.expovariate(lambda)
  • wenn lambda>0, Werte [0, infinity]
  • wenn lambda<0, Werte [-infinity, 0]

Beispiel: Pseudozufällige Float mit Exponentialverteilung und lambda 1.5: random.expovariate(1.5)

0.2234355
Diskrete-Ereignis-Simulation mit Python

Lass uns üben!

Diskrete-Ereignis-Simulation mit Python

Preparing Video For Download...