ZUFALLSZAHLEN

Werbung
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
Herunterladen