Als Zufallszahl wird das Ergebnis von speziellen Zufallsexperimenten bezeichnet.
Zufallszahlen werden bei verschiedenen Methoden der Statistik benötigt, z. B. bei der Auswahl einer Stichprobe aus einer Grundgesamtheit, bei der zufälligen Verteilung von Versuchstieren auf verschiedene Versuchsgruppen (Randomisierung), bei der Monte-Carlo-Simulation u. a.
Zur Erzeugung von Zufallszahlen gibt es verschiedene Verfahren. Diese werden als Zufallszahlengeneratoren bezeichnet. Ein entscheidendes Kriterium für Zufallszahlen ist, ob das Ergebnis der Generierung als unabhängig von früheren Ergebnissen angesehen werden kann oder nicht.
Echte Zufallszahlen
Echte Zufallszahlen werden mithilfe physikalischer Phänomene erzeugt: Münzwurf, Würfel, Roulette, Rauschen elektronischer Bauelemente, radioaktive Zerfallsprozesse oder quantenphysikalische Effekte. Diese Verfahren nennen sich physikalische Zufallszahlengeneratoren, sind jedoch zeitlich oder technisch recht aufwendig.
Für manche Zwecke, z. B. bei der Erzeugung kryptographischer Schlüssel, werden echte Zufallszahlen benötigt.
Pseudozufallszahlen
In der realen Anwendung genügt häufig eine Folge von Pseudozufallszahlen, das sind scheinbar zufällige Zahlen, die nach einem festen, reproduzierbaren Verfahren erzeugt werden. Sie sind also nicht zufällig, da sie sich vorhersagen lassen, haben aber ähnliche statistische Eigenschaften (gleichmäßige Häufigkeitsverteilung, geringe Korrelation) wie echte Zufallszahlenfolgen. Solche Verfahren nennt man Pseudozufallszahlengeneratoren.
Die meisten höheren Programmiersprachen stellen Funktionen zum Erzeugen von Pseudozufallszahlen bereit.
Ein einfacher Zufallsgenerator kann auch mit einfachen Sprachelementen neu programmiert werden. Das folgende Programm in Pseudocode Implementierung eines linearen Kongruenzgenerators mit , und . Es erzeugt 10 Zufallszahlen, die in einem Array gespeichert werden.
Für die Zufallszahlen wird der Datentyp Integer mit 64 Bit verwendet.
// Funktion, die die Zufallszahlen erzeugt // Der Parameter count definiert die Anzahl der Zufallszahlen function linearCongruentialGenerator(int64 y0, int64 m, int a, int b, int count) { int64[] randomNumbers := int64[count] // Initialisiert das Array für die Zufallszahlen randomNumbers[0] := y0 // Startwert für den Zufallszahlengenerator for i := 1 to count - 1 do { // Erzeugt eine Zufallszahl aus der vorherigen Zufallszahl randomNumbers[i] := (a * randomNumbers[i - 1] + b) mod m } return randomNumbers // Gibt das Array mit den Zufallszahlen als Rückgabewert zurück }
Standardzufallszahlen
Standardzufallszahlen sollen als Realisationen unabhängiger, auf gleichverteilter Zufallsvariablen gelten können.
Ein Verfahren zur Erzeugung solcher Sequenzen heißt Standardzufallszahlengenerator. Solche Generatoren sollten schnell und die erzeugten Folgen auf unproblematische Weise leicht reproduzierbar sein. Meistens handelt es sich bei Standardzufallszahlengeneratoren um Kongruenzgeneratoren.
Zufallszahlen mit vorgegebener Verteilung
Die Inversionsmethode ermöglicht zumindest prinzipiell die Erzeugung von Zufallszahlen aus jeder univariaten Wahrscheinlichkeitsverteilung mit gegebener Verteilungsfunktion durch eine geeignete Transformation von Standardzufallszahlen. Dazu werden Standardzufallszahlen mit der verallgemeinerten inversen Verteilungsfunktion in die Zufallszahlen
transformiert. Die resultierenden Zufallszahlen können dann als Realisationen unabhängig und identisch verteilter Zufallsvariablen mit der Verteilungsfunktion gelten.
Es wurden verschiedene Ansätze zur Vereinfachung oder Beschleunigung der Zufallszahlenerzeugung für spezielle Verteilungen oder Verteilungsfamilien entwickelt, z. B. die Verwerfungsmethode, die Kompositionsmethode und verschiedene direkte Verfahren.
Einzelnachweise
- ↑ Rosetta Code: Linear congruential generator
- ↑ GeeksforGeeks: Linear Congruence method for generating Pseudo Random Numbers
- ↑ Horst Rinne: Taschenbuch der Statistik. 4. Auflage. Harri Deutsch, Frankfurt am Main 2008, ISBN 978-3-8171-1827-4, S. 208–213.