ZUFALLSZAHLEN WPG Informatik / Mathematik BG/BRG Bad Ischl A. Lindner A. Lindner WPG Inf / M Zufallszahlen 1 BEDEUTUNG VON ZUFALLSZAHLEN Beispiel: Computertip für Lotto in einer Trafik. • • • • Wie kann ein (elektronisches) Gerät, das nach einem deterministischen Prinzip arbeitet, zufällig verteilte Zahlen ermitteln? Kann man z.B. mit einem Roulette zufällig verteilte Zahlen erzeugen? Sind diese Zahlen wirklich zufällig verteilt? Was bedeutet „zufällig“? Anwendungen in der EDV: • Simulation von natürlichen Vorgängen, um Phänomene mit zufälligem Verhalten darzustellen. Beispiele: radioaktiver Zerfall von Teilchen Eintreten von Kunden in Bank zufällige Wanderung eines Teilchens in einer Lösung (Diffusion) ......................... Simulationen werden durchgeführt, wenn die tatsächliche Durchführung - zu teuer, - zu gefährlich (Atombombenexplosionen, Kriegsszenarien,...), - zu langwierig wären. • Simulationen für mathematische Berechnungen: Monte Carlo Methode (nach John von Neumann): Beispiel: Berechnung von π durch Näherung • Testen von Programmen Untersuchung des Programms hinsichtlich Fehlerquellen bei zufälliger Eingabe . • Bereich Glückspiel: Computer - Lottotip, Glücksspielautomaten, ... • Programmierung von Spielen Kartenmischen, Flugsimulator: zufällige Windböen,.... 2 ZUFALLSZAHLENGENERATOREN Alle Zufallszahlen, die von einer Maschine erzeugt werden, müssen einem deterministischen Prinzip unterliegen und können damit nicht wirklich „zufällig“ sein. Man nennt diese Zahlen deshalb auch Pseudozufallszahlen. 2000/01 Seite 2 A. Lindner WPG Inf / M Zufallszahlen Beispiel: Eine Folge von Würfen mit einem normalen Spielwürfel ergab: 2,5,3,4,4,1,6,3,2,3,1,1,2,6,5,3,4 Ist das eine zufällige Folge von Zahlen, eine Zufallsfolge? Die Kennzeichen einer Zufallsfolge sind: • Die Zahlen entstammen einem bestimmten gegebenen Zahlenbereich. • Sie sind regellos verteilt, d.h. es gibt kein offensichtliches Gesetz, mit dem man mit Kenntnis der ersten n Zahlen auf die (n+1)te Zahl schließen kann. • Sie entstammen einer bestimmten Wahrscheinlichkeitsverteilung, d.h. jede Zahl tritt mit einer bestimmten vorgegebenen Wahrscheinlichkeit auf. Praktisch alle höheren Programmiersprachen (z.B. Turbo Pascal: Random oder Random(6); Basic: rnd), Tabellenkalkulationen (z.B. Excel: =Zufallszahl() ), Mathematikprogramme und Taschenrechner (z.B. TI 34: random) verfügen über Zufallszahlengeneratoren, die folgende Gestalt haben können. 2.1 Lineare Kongruenzmethode (D.H. Lehmer) Viele Zufallszahlengeneratoren arbeiten nach dieser Methode, die auf der Iteration z i+1 := (a . z i + c) mod p basiert. p heißt Modul, a Faktor, c Verschiebung. Mod (modulo) bezeichnet den ganzzahligen Rest bei der Division durch p. Der Benutzer muss dabei den Startwert z0 selbst wählen oder irgendwie vorgeben lassen (z.B. durch die Systemzeit). Beispiel: a) Die Iteration mit den Werten a = 5, c = 1, p = 16 mit Startwert 1 liefert Berechnung Wert 1 (Startwert) 6 15 12 ............. ............. (5 . 1 + 1) mod 16 = (5 . 6 + 1) mod 16 = (5 . 15 + 1) mod 16 = (5 . 12 + 1) mod 16 = ............ Für dieses sehr einfache Beispiel ergibt sich somit die Zufallsfolge n= zn = 2000/01 1 1 2 6 3 15 4 12 5 13 6 2 7 11 8 8 9 9 10 14 11 7 12 4 13 5 14 10 15 3 16 17 18 0 1 6 19 15 Seite 3 A. Lindner WPG Inf / M Zufallszahlen Ab der 17ten Stelle wiederholt sich die Folge und ist somit periodisch und nicht mehr richtig zufällig. Solche Zufallsfolge sind unbrauchbar! Dieser Folge sieht man ihren Makel sofort an, aber wie erkennt man das bei anderen Zufallsfolgen? Dazu das nächste Beispiel b) Die Iteration mit den Werten a = 3421, c = 1, p = 216 (= 65536) und Startwert 1 zi+1 := (3421 . zi + 1) mod 65536 ergibt für die ersten 60 Pseudozufallszahlen (zeilenweise von links gelesen) 1 15775 24941 7915 38297 12535 34949 16323 3422 30148 60826 10848 7574 21692 22866 4312 41255 48181 8947 17633 23935 21581 40139 5753 34348 4162 2376 29374 27172 35066 17600 20214 63997 16891 1833 21767 25365 29907 47553 11615 43498 46896 44774 16012 4002 10152 18462 20100 39939 64625 14223 54493 59355 61449 47335 14837 54296 29198 29172 36170 22928 43078 59116 32514 17593 9495 51621 5603 55633 44911 57277 15803 23606 42076 41458 31352 3950 24148 57514 60400 Ist die eine Zufallsfolge? Um diese Frage zu beantworten benötigt man Verfahren der höheren Mathematik, die wir hier nicht erwähnen. Ein einfacher und anschaulicher Test ist allerdings die visuelle Umsetzung, die jeweils 2 Zufallszahlen als Koordinaten eines Punktes deutet und sie im Bereich [0; 65536[ x [0; 65536[ darstellt. Dabei ergibt sich für obige Zufallsfolge mit Startwert 0 (ergibt dann als 1.Zufallszahl 1) und bei 10.000 Zufallszahlen (d.h. 5.000 eingezeichneten Punkten) folgendes Bild. Abbildung auf Folie: c) Im Gegensatz dazu ergibt die nur leicht veränderte Iterationsvorschrift zi+1 := (3423 . zi + 1) mod 65536 folgende Zufallsfolge: 1 289 2625 7009 13441 21921 32449 45025 59649 10785 2000/01 3424 6208 6944 5632 2272 62400 54944 45440 33888 20288 54945 16321 45281 10753 43809 13377 50529 24193 65441 43201 53952 30112 4224 41824 11840 45344 11264 40672 2496 27808 62785 50785 40833 32929 27073 23265 21505 21793 24129 28513 20512 35584 48608 59584 2976 9856 14688 17472 18208 16896 23521 38145 54817 8001 28769 51585 10913 37825 1249 32257 34176 22624 9024 58912 41216 21472 65216 41376 15488 53088 2689 43937 21697 1505 48897 32801 18753 6753 62337 54433 29408 56768 16544 39808 61024 14656 31776 46848 59872 5312 Seite 4 A. Lindner WPG Inf / M Zufallszahlen Der optische Test auf zufällige Verteilung zeigt dabei folgendes Bild: Abbildung auf Folie: Aufgabe Tabellenkalkulation: Erzeuge durch die im Beispiel b) und c) besprochenen Iterationen die Zufallszahlen, und stelle diese entsprechend der Abbildung auf der Folie in einem Diagramm dar! Offensichtlich müssen die Parameter in der Iterationsvorschrift einigen Bedingungen genügen, um eine zufällige Generierung von (Pseudo)Zufallszahlen zu gewährleisten. Bedingungen für die Werte a, c und p: In der Praxis sollte ∗ der Wert p möglichst groß gewählt werden (größer als 220); ∗ a sollte zwischen √p und p liegen; ∗ c ungerade sein; ∗ a bei der Division durch 4 den Rest 3 ergeben. Außerdem hilft manchmal dem unkundigen Zufallszahlenerzeuger auch noch der folgende Satz (ohne Beweis): p sei eine Primzahl mit p > 2; a, c ∈ ². Durch die Iteration z:=(a.z + c) mod p beginnend mit einem Startwert z0 < p wird eine Zufallsfolge z0 , z1 , z2 , .....erzeugt. In dieser Folge sind genau dann p aufeinanderfolgende Zahlen paarweise verschieden, wenn c nicht durch p teilbar ist und wenn a ≡ 1 mod p gilt. Wählt man ohne Überlegen irgendwelche Zahlen p, a und c, so erhält man praktisch fast immer einen unbrauchbaren Zufallszahlengenerator. In der Literatur werden folgende Werte vorgeschlagen: p 2 -1 235 248 259 31 a 75 223 +1 513 1313 c 0 1 29.741.096.258.473 0 Anfangswert beliebig; ≠ 0 beliebig beliebig 555555 Bemerkung: Durch den oben beschriebenen Algorithmus erhält man ganze Zufallszahlen im Intervall [0; 65536[. Um eine Zufallszahl im Intervall [0; 1[ zu bekommen, muss man nur durch p, also hier 65536, dividieren. 2000/01 Seite 5 A. Lindner WPG Inf / M Zufallszahlen 2.2 Quadratmittenmethode (John von Neumann (1903-57) 1946) Diese Methode hat eigentlich mehr historischen Wert, da sie der erste Zufallszahlengenerator war, aber heute eigentlich kaum mehr verwendet wird. Der Algorithmus ist auf folgende Art erklärt: Man startet mit einer beliebigen n-stelligen Zahl, bildet das Quadrat, wählt als nächstes Folgenglied die durch die mittleren n Ziffern gebildeten Zahl usw. Ein Beispiel sagt mehr als 1000 Worte: Startwert 12345, also n = 5 123452 = 152.399.025, somit nächste Zahl 23.9902 =575.520.100, somit nächste Zahl 55.2012 =3.047.150.401, somit nächste Zahl 23.990; 55.201; 47.150; 23.122 46.268 40.727 .................................... Da man in diesem Beispiel n = 5 festgelegt hat, sind alle Zufallszahlen aus dem Intervall [0; 99.999]. Zufallszahlen in [0; 1[ werden durch Division durch 100.000 erhalten. 2.3 HP - Methode für Taschenrechner Viele neuere Taschenrechner-Modelle haben bereits einen Zufallszahlengenerator integriert. Um mit einem älteren Taschenrechner eine Zufallsfolge zu erzeugen, findet sich in einer Grebrauchsanweisung folgender Algorithmus (empfohlen von der Firma Hewlett Packard): Eingabe z ∈ [0;1] z := z + π z := z*z*z*z z := z*z z := z - [z] Ausgabe z [] bedeutet hier die Gaußklammer-Funktion (Größe-Ganzes-Funktion). Man wählt also einen beliebigen Startwert aus dem Intervall [0; 1], addiert π dazu, berechnet die 8.Potenz dieser Summe und verwendet nur die Nachkommastellen des Ergebnisses als Zufallszahl. m.a.W.: z0 ∈ [0;1] z := (z0 + π)8 2000/01 Seite 6 A. Lindner WPG Inf / M Zufallszahlen z1 := z - [z] .................. Ein Tipp- oder Rechenfehler irgendwo in diesem Algorithmus ist nicht weiter tragisch (solange das Ergebnis in [0; 1] bleibt), da dies praktisch nur einen neuen Startwert für eine weitere Zufallsfolge bedeutet. 2.4 Verfahren von D.H. Lehmer 1951 Der Algorithmus besitzt folgende Form: Man beginnt mit einer n-stelligen natürlichen Zahl x0 , bildet x0 2 und multipliziert die Ausgangszahl mit der „rechten Hälfte“ von x0 2 ; man erhält dann x1 als „linke Hälfte“ des Produkts usw. Ohne Beispiel fast unverständlich: x0 = 12345 (Startwert) x02 = 152.399.025 12345 * 99.025 = 1.222.463.625 x1 = 12.224 x12 = 149.426.176 12.224 * 26.176 = 319.975.424 x2 = 31.997 x22 = 1.023.808.009 31.997 * 08.009 = 256.263.973 x3 = 25.626 .................................... 2.5 Weitere Zufallszahlengeneratoren Es seien hier noch zwei weitere Algorithmen angegeben, die in Zufallszahlengeneratoren Verwendung finden: ∗ Der Fibonacci - Generator zi+2 = (zi + zi+1) mod p bestimmt eine Pseudozufallszahl im Bereich von 0 bis m-1. zi und zi+1 müssen als Startwerte vorgegeben werden. p wird beispielsweise als 228 gewählt. ∗ Der Generator mit zi+1 = (2R . zi + c) mod p , R > 2 und geradem c mit p = 225 erzeugt brauchbare Pseudozufallszahlen. 2000/01 Seite 7 A. Lindner WPG Inf / M Zufallszahlen Es gibt aber noch eine Reihe weiterer Generatoren (wie z.B. einer basierend auf der logistischen Gleichung x n+1 := r . x n .(1 - x n) ), die hier nicht mehr alle besprochen werden. 2.6 Programmierung Der Kern des Programms für Zufallszahlen, die nach der linearen Kongruenzmethode erzeugt werden, ist folgender: const a=91; c=1;p=347 ; Var z: longint; Procedure Initialisierung; Var h,m,s,s100: Word; Begin GetTime(h,m,s,s100); z:=h + m*60 + s*3600; End; {Zufälligen Startwert wählen} Function ZZ01:Real; Begin z:=(a*z+c) mod p; ZZ01:=z/p End; {Zufallszahl zwischen 0 und 1} {Zeit holen} {Startwert zufällig aus der Zeit berechnen} Function ZZ(anf,ende:Integer): Integer; Begin ZZ:=Trunc(anf+(ende+1-anf)*ZZ01); End; 3 { Ganze Zufallszahlen} { zwischen anf und ende (inkl.)} TESTS FÜR ZUFALLSZAHLEN Wenn man auf irgend eine Art und Weise Pseudozufallszahlen ermittelt, ist man auch immer an der Qualität dieser Zufallszahlen interessiert. Auskunft darüber geben Verfahren der höheren Mathematik (→ χ2 - Test). Es gibt aber auch ein paar leichter verständliche Tests: 1. Run - Test Hier wird das Auftreten langer Sequenzen („Runs“) von z.B. geraden Ziffern, Ziffern kleiner als 5 oder Primzahlen beobachtet. Die Häufigkeiten dieses Auftretens müssen mit den nach der Kombinatorik berechneten Wahrscheinlichkeiten gut übereinstimmen. 2000/01 Seite 8 A. Lindner WPG Inf / M Zufallszahlen 2. Maximum - Test Es wird überprüft, ob der Anteil der Dreierblöcke abc mit a < b und c < b etwa 28,5% ist, wie man auf Grund der Wahrscheinlichkeitsrechnung erwarten müsste. 3. Poker - Test Hier wird die Häufigkeit der verschiedenen Arten von 5 Blöcken (vgl. 5 Pokerkarten) mit den berechneten Wahrscheinlichkeiten verglichen. siehe Abbildung: Folie 4 ANDERS VERTEILTE ZUFALLSZAHLEN Auf welchem Weg man gleichverteilte Zufallszahlen ermitteln kann, seien es ganze Zahlen von 0 bis p oder Dezimalzahlen im Intervall [0; 1[, haben wir nun ausführlich besprochen. Doch für viele Simulationen braucht man entweder Zufallszahlen aus einem anderen Intervall oder überhaupt anders verteilte Zufallszahlen. Beispiele: • Simulation des Lottospiels: Zufallszahlen von 1 bis 45. • Simulation für die Dauer eines Telefonats oder die Lebensdauer eines Transistors: exponentialverteilte Zufallszahlen. • Simulation für die Größe eines Messwertes: normalverteilte Zufallszahlen. Hier helfen nun einige schlaue Behauptungen: Vorwissen aus der M Gleichverteilung La;b: a) Wahrscheinlichkeitsdichte Verteilungsfunktion f(x) = 1/(b-a) F(x) = (x-a)/(b-a) Gleichverteilte Zufallszahlen Wenn x eine auf [0;1[ gleichverteilte Zufallszahl ist, so ist (a + (b - a)).x eine auf dem Intervall [a; b[ gleichverteilte Zufallszahl. Beweis: eh klar. q.e.d. Beispiel: x sei in [0; 1[ gleichverteilt, dann ist (1 + (7 - 1)).x im Intervall [1; 7[ gleichverteilt. Um damit den Vorgang des Würfelns zu simulieren, muss man nur mehr aus den zufälligen Dezimalzahlen ganze Zahlen machen, z.B. durch die Integer - oder Gaußklammer-Funktion. In TP heißt der entsprechende Befehl trunc(); beim TI92 int() oder floor(), bei Excel Ganzzahl(). b) Exponentialverteilte Zufallszahlen Wenn x eine auf [0;1[ gleichverteilte Zufallszahl ist, so ist - 1/α . ln(x) eine mit dem Parameter α exponentialverteilte Zufallszahl. Beweis: (für Genießer) F = P(-1/α.lnx < z) = P(ln x > -α.z) = P(x > e-α.z) = 1 - P((x < e-α.z) = 1 - FL0,1( e-α.z) = 1 - (e-α.z 0)/(1 - 0) = 1 - e-α.z = FEα q.e.d. Exponentialverteiltung Eα: 2000/01 Wahrscheinlichkeitsdichte f(x) = α.e- α.x; Seite 9 A. Lindner WPG Inf / M Zufallszahlen Verteilungsfunktion F(x) = 1 - e- α.x c) Normalverteilte Zufallszahlen (Methode 1) Wenn x1 ,x2 , ...xn auf [0;1[ gleichverteilte Zufallszahlen sind, so ist x: = n n xi − i =1 2 ∑ n 12 eine N0;12 - verteilte Zufallszahl. (Es ist günstig, n = 12 zu setzen.) Beweis: schwierig! q.e.d. Normalverteilte Zufallszahlen (Methode 2) Wenn x1 ,x2 auf [0;1[ gleichverteilte Zufallszahlen sind, so sind x: = − 2.ln( x1 ).sin(2πx 2 ) und y: = − 2.ln( x1 ).cos(2πx 2 ) 2 unabhängige N0;12 - verteilte Zufallszahlen. Beweis: viel zu schwer! q.e.d. Aufgaben: 1) Erzeuge in Excel 300 gleichverteilte Zufallszahlen und zähle ihre Häufigkeit im Intervall [0; 1[. Transformiere sie auf exponentialverteilte Zufallszahlen (Parameter α = 1) und bestimme deren Häufigkeit im Bereich [0; 3[. Stelle beide Häufigkeiten in 2 entsprechenden Diagrammen dar! 2) Erzeuge wieder 12 mal 300 Zufallszahlen und tranformiere sie nach Methode 1 (n = 12) auf eine Tabelle von N0;12- normalverteilten Zufallszahlen. Zeige deren Verteilung in einem Diagramm und vergleiche mit den richtigen Werten einer Normalverteilung (Klassenbreite 0,1; von -2 bis +2). 3) Wie 2), nur nach Methode 2! 5 LITERATUR ♦ ♦ ♦ ♦ ♦ Rechenberg: Was ist Informatik, Wien 1994 Kempermann: Zahlentheoretische Kostproben, Frankfurt 1994 Duden Informatik, Mannheim 1993 Schülerduden Mathematik II, Mannheim1982 Dewdney: Der Turing Omnibus, Berlin 1995 2000/01 Seite 10