TU Chemnitz, Fakultät für Informatik
Lehrstuhl Modellierung u. Simulation
Prof.Dr.Köchel / Flohrer
Erzeugen zufälliger Realisierungen, Arbeitsblatt 4
Der Run - Test
Die von einem beliebigen Zufallszahlen-Generator erzeugte Folge von Elementen x[i], i=1,2,... wird gemäß folgendem Algorithmus in aufsteigend (oder absteigend) geordnete Teilmengen R[k], k=1,2,... -die sogenannten 'RUNS'- zerlegt:
- Initialisierung:
- i := 1
{Index der Zahlenfolge}
- k := 1
{Index der Teilmenge, des Runs}
- H[r] := 0 für r=1,2,...,25
{Feld zur Erfassung des Histogrammes der Run-Längen}
- Erzeuge x[i] und ordne x[i] dem Run R[k] als 1.Element zu
- Inkrementiere i und erzeuge das nächste x[i]
- Gilt x[i] > x[i-1], dann wird auch x[i] dem Run R[k] zugeordnet;
anschließend Fortsetzung bei Schritt 3
- Gilt x[i] <= x[i-1] , dann wird x[i] keinem Run zugeordnet
- Ermittle die Anzahl r der Elemente der Menge R[k] (die "Run-Länge")
und inkrementiere H[r]
- Inkrementiere i, inkrementiere k und setze fort mit Schritt 2
Beispiel (zweistellige Zufallszahlen):
29 88 65 87 08 13 50 63 04 23 25 47 57 91 13 52 62 24 19 94 01 ...
[---] X [] X [------] X [------------] X [---] X [---] X ...
R[1] = {29,88} --> r = 2
R[2] = {87} --> r = 1
R[3] = {13,50,63} --> r = 3
R[4] = {23,25,47,57,91} --> r = 5
R[5] = {52,62} --> r = 2
R[6] = {19,94} --> r = 2
...
Wäre {x[i]} eine Folge "echter" Zufallszahlen (also eine Folge unabhängiger, im Intervall (0,1) gleichverteilter Realisierungen), dann würde die Run-Länge r exakt mit der Wahrscheinlichkeit
p[r] = r / ( r + 1 )!
vorkommen, d.h. im Mittel werden p[r] · 100% der beobachteten Runs genau r Elemente beinhalten.
Daß Runs der Länge 1 mit Wkt. ½ auftreten müssen, kann leicht nachgewiesen werden: Die Chancen für ein absteigendes Paar (ergibt r=1) und für ein aufsteigendes Paar (ergibt r>1) sind bei "echten" Zufallszahlen offensichtlich gleich groß !
Lange Runs sind sehr selten; unter 40 000 Runs ist im Mittel nur einer mit r>=8 Elementen. Runs mit mehr als 20 Elementen treten praktisch nie auf!
Von einem Zufallszahlengenerator wird nun gefordert, daß die gelieferte Zahlenfolge bezüglich der Run-Längen das gleiche Verteilungsgesetz wie bei echten Zufallszahlen aufweist.
Der Vergleich der theoretischen Häufigkeiten h[r] := N · p[r] mit den "beobachteten" Häufigkeiten H[r] des Auftretens der einzelnen Run-Längen erfolgt mittels Chiquadrat-Anpassungstest. Hierzu sollten die relativ selten beobachteten "langen" Runs, z.Bsp. alle Runs mit r >= 8 , zu einer Klasse zusammengefaßt werden (Es sollten mindestens 5 Beobachtungen je Klasse vorliegen).
Anmerkungen:
- Schritt 5 ist erforderlich, da dasjenige x[i], welches das Ende einer aufsteigenden Folge signalisiert, kein 'gerechter' Anfangswert für den nächsten Run wäre.
- Man kann sogar ohne die theoretischen Werte p[r] auskommen, wenn man die Folge x[i] zweimal analysiert: nach aufsteigenden Runs R_up[k] und absteigenden Runs R_down[k]! Dann Test auf Gleichheit beider Verteilungsgesetze.
(Siehe auch
Demo-Programm 'runtest.pas' ).
Jens Flohrer; 29.03.1995