Simulation diskreter Systeme
„Die Philosophen haben die Welt nur unterschiedlich interpretiert. Es kommt aber darauf an,
sie zu simulieren.“ (Anonymus, frei nach K.Marx)
„... gegenwärtig muss ein komplexes, vollendetes Lehrprogramm für Ingenieure und Manager
die Simulation umfassen...“ (Kiviat 1967)
Literaturauswahl:
Banks, J.(ed.): Handbook of Simulation. John Wiley 1998
Banks/Carson/Nelson/Nicol: Discrete-Event System Simulation. 3rd edit., Prentice-Hall 2001
Bossel, H.: Simulation diskreter Systeme. Vieweg 89
Bratley/Fox/Schrage: A Guide to Simulation. 2nd ed., Springer 87
Davies/O’Keefe: Simulation Modelling with Pascal. Prentice-Hall 89
Devroye, L.: Non-uniform Random Variate Generation. Springer 86
Evans, J.B.: Structures of Discrete Event Simulation. 1988
Fischer/Ahrens: Objektor. Prozeßsimulation in C++. Addison-Wesley 96
Fishman, G.S.: Discrete-Event Simulation. Springer 2001
Hill, D.R.C.: Object-Oriented Analysis and Simulation.Addison-Wesley 1996
Kleijnen, J.P.: Statistical Tools for Simulation Practitioners. Marcel Dekker 1987
Law/Kelton: Simulation Modelling & Analysis. 2nd ed., McGraw Hill 1991
Lewis/Orav: Simulation Methodology for Statisticans, Operations Analysts, and Engineers.
Vol.1, Wadsworth & Brooks 1989
Mehl, H.: Methoden verteilter Simulation. Vieweg 1994
Page, B.: Diskrete Simulation: Eine Einführung mit Modula-2. Springer 1991
Pid, M.: Computer Simulation in Management Science. Wiley 90
Ripley, B.D.: Stochastic Simulation. John Wiley 1987
Sobol, J.M.: Die Monte-Carlo-Methode. Verlag der Wiss. 1974
Zobrist, G.W.; L;eonard, J.V.(eds.): Object-Oriented Simulation. IEEE Press 1997
1
Hinweise zur Literatur:
Sehr gute und umfassende Bücher zur Simulation diskreter Systeme sind
Banks et all 2001, Evans 1988, Fishman 2001, Law/Kelton 1991, Pid 1990.
Statistische Fragen werden ausführlich behandelt in
Fishman 2001, Kleijnen 1987.
Einen ausgezeichneten Überblick über (fast) alle Themenbereiche der Simulation und ihrer
praktischen Anwendung wird in
Banks 1998
gegeben.
Fragen der Simulation stetiger Systeme werden in
Bossel 1989
behandelt.
Für eine Einführung in die objektorientierte Simulation wird
Hill 1996
empfohlen.
Grundlagen der verteilten Simulation bietet
Mehl 1994.
Als wohl wichtigste aktuelle Informationsquelle wird auf die Proceedings der alljährlich
stattfindenden
Winter Simulation Conference
und des
Workshop on parallel and distributed simulation (PADS Conferences)
verwiesen sowie auf die verschiedenen Fachzeitschriften (z.B. Simulation and Modeling,
ACM Transactions on Modeling and Computer Simulation), von denen
Mathematics and Computers in Simulation
in der Bibliothek der TU Chemnitz verfügbar ist.
2
1. Einführung
Gegenwärtig:
a) Betrachtung immer komplexerer Systeme/Probleme
b) Arsenal von Modellen und Analyseverfahren
Wir:
mathematische Modelle
analytische M.
algorithmische M.
- Beschreib. durch analyt.
(funktionale) Ausdrücke
- Widerspiegelung des Originals
durch algorithm. Verknüpfungen
von (elem.) Operationen u. Bed.
- Aussagen durch
(1) analyt. Methoden
(2) numer. Verfahren
(3) qualitative Untersuch.
- Aussagen durch Realisierung des
entsprechenden Algorithmus
auch bezeichnet als
Simulationsmodelle
Aber:
Nicht alle praktisch interessierenden Probleme sind analytisch lösbar !!!
Was tun ?
Eine Möglichkeit - Experimente am/mit Realsystem/Modell Simulation
Anwendungsbreite der Simulation:
- durch Rechner stark erweitert
- wachsende Aktualität
Zur Lösung von Problemen ist Simulation nicht die einzige Möglichkeit, aber:
! Von den gegenwärtig existierenden Verfahren, die in ihrem Anwendungsbereich über
analytische Verfahren hinausgehen, ist die Simulation auf Rechnern das effektivste !!!
1. 1 Was heißt „simulieren“ ?
Duden (1975; Leipzig)
Simulant
- jmd., der eine Krankheit vortäuscht
Simulation - Vortäuschung [einer Krankheit]
Simulator
- Bodenübungsgerät zur Schulung von Flugzeugbesatzungen und
von Kosmonauten
simulieren - [eine Krankheit] vortäuschen; umg. für nachsinnen, grübeln
Wörterbuch der Kybernetik (1967; Berlin)
Simulation:
Nachbildung von speziellen Verhaltensweisen
kybernetischer Systeme mittels anderer kybernetischer
Systeme, im besonderen durch Rechenanlagen.
3
Simulator: Die Nachbildung eines speziellen Systems auf einer Rechenanlage.
Wesentlich für uns:
Bei Simulation wird reales System in einem Ersatzsystem abgebildet.
Dieses Ersatzsystem kann sein ein
(a) physisches Modell ( Herz-Lungen-Maschine; Flug-/Schiffsmodell;
Katze-Maus-Spiel; Laboranlage;...)
oder auch ein
(b) mathematisches Modell (das heute mittels Rechentechnik analysiert wird).
Das Ersatzsystem wird analysiert.
Aussagen/Lösungen für das Ersatzsystem werden auf die Realität übertragen.
1.2 Warum wird simuliert ?
viele Gründe für eine Simulationsstudie; die wichtigsten sind :
(1) Problem mit analytischen oder numerischen Verfahren nicht lösbar.
Bsp.: optimaler Entwurf einer Montageabteilung
(2) Zeitraffer-Effekt
Bsp.: Einführung einer neuen Strategie der Kundenbedienung
(3) Kosten-Effekt
Bsp.: optimale Vorratswirtschaft
(4) zu untersuchende Realsystem ist nicht verfügbar
Bsp.: Mondmobil, Marssonde, ...
(5) Versuch führt zur Zerstörung
Bsp.: Crash-Untersuchungen
(6) Trainings-/Schulungseffekt
Bsp.: Dispatcher; Reaktion auf ungewöhnliche Umstände;...
(7) Überprüfung neuer Ideen, Strategien, Verfahren, ...
Bsp.: Unfallklinik; Ampelverkehr;...
Klar: Simulation ist aufwendiger als analytisches Verfahren
Nur dann simulieren, wenn notwendig !!!
4
1.3 Was heißt „Simulationsstudie“ ?
Bsp. „optimaler Ersatzteilevorrat“
(1) Problemformulierung:
- Produktionsabteilung
- Anzahl Maschinen mit gleichem Verschleißteil
- zur Behebung möglicher Ausfälle Ersatzteile in Lager
- periodische Aufstockung durch Bestellentscheidung (BE)
- „augenblickliche" Lieferung
- Kostenstruktur:
Bedarf > Vorrat
Fehlmengenkosten h EUR/Fehlteil
Bedarf < Vorrat
Lagerkosten g EUR/Lagerteil
Ziel:
Folge von BE, welche die im Mittel je Periode zu erwartenden
Kosten minimiert !
(2) Erarbeitung des Modells:
Klar: Wenn Anzahl Ausfälle bekannt bestellen exakt so viele Teile keine Kosten !!!
ABER: Ausfall zufällig, d.h., kenne für ZV Z – „Anzahl Ausfälle in einer Periode“ - nur
deren Wahrscheinlichkeitsverteilung, d.h.,
Z
0
1
2
...
r
p0
p1
p2
...
pr
=
Was als Zustand (des zu untersuchenden Systems) ?
Zustand := Lagerbestand am Periodenende (vor BE)
Was als Entscheidung (Steuerung, Strategie, Aktion, ...) ?
Entscheidung := Lagerbestand nach BE
Welche Zielfunktion (Bewertungskriterium) ?
K(a) := Kostenerwartungswert einer Periode bei BE a
Welche Nebenbedingungen ?
a 0, d.h., Menge zulässiger BE ist A := { 0, 1, 2, ...r }
Beschreibung der Dynamik:
t N+ = { 1, 2, ... } - Periodennummer
xt
Zustand zum Ztpkt. t (Restvorrat am Ende der t-ten Periode)
Zt
Anzahl Ausfälle in Periode t
at
BE für Periode t
xt= at - Zt
t N+
(1.1)
5
K(at) = E[k(at, Zt)]
t N+
mit
h (a Z ), falls Z a;
k ( a, Z )
g ( Z a), falls Z a, a A;
(3) Datenaufbereitung:
h := 100
g := 300
r := 6
p0 = 0; p1 = p2 = ... = p6 = 1 / 6 {können mit Würfel simulieren}
Lösungswege:
A) Analytisch:
a
K (a ) h (a b) pb g
b 0
r
(b a) p
Da K( . ) - konvexe Funktion (Beweis zu Hause)
a*:
(1.2)
b
b a 1
für optimalen Vorrat gilt
K(a*) K(a* + 1) , d.h., aus (1.2) folgt:
a* ist kleinste ganze Zahl mit (p0 + p1 +...+ pa* ) (g / (h+g)
a* = 5 und K(a*) = K(5) = 216.66 EUR
B) Numerisch:
Berechnungsexperiment, wenn nur K( . ) bekannt, d.h., analytischer Ausdruck für Zielfunktion
liefert folgende Wertetabelle:
a [Stück]
K(a) [EUR]
0
1 050
1
2
750 516.66
3
4
5
6
350
250
216.66
250
a* = 5 und K(a*) = K(5) = 216.66 EUR
C) Simulation:
Was, wenn auch K( . ) unbekannt ?
Eine Möglichkeit - experimentieren mit zu untersuchendem System bzw. mit entsprechendem
Modell
6
Simulieren (Ausfall-)Verhalten der Maschinenteile und bestimmen für unterschiedliche
Vorratsmengen die anfallenden Kosten;
wählen danach jene Vorratsmenge als „optimal“, die in fixierten Anzahl Simulationsläufe
die kleinsten durchschnittlichen Kosten erzeugt hat.
(4) Modellübersetzung
in PS, wenn Simulation auf Rechner; Debugging
(5) Verifikation
Rechnermodell Vorstellungen des Bearbeiters bzw.
Spezifikation
(6) Validierung
Gültigkeitserklärung (hinr. exakte Abb. des Anwendungsbereiches)
(7) Versuchsplanung
Annahme: In jeder Periode gleiche BE .
Abbruchkriterium:
Varianten:
N Perioden
Da E(Z) = 3.5 und g = 3 h >> h opt. BE E(Z)
4 Varianten a(1) = 3, a(2) = 4, a(3) = 5, a(4) = 6.
Informationsgewinnung:
kt( i ) := Kostenwert für Variante a(i) in Periode t, i=1(1)4, t N+ ;
t
K t (i ) : 1 / t kn (i ), i 1(1)4, t N ;
n 1
(8) Versuchsdurchführung:
z.B. folgende Tabelle
t
Zt
kt(3)
Kt(3)
kt(4)
Kt(4)
kt(5)
Kt(5)
kt(6)
Kt(6)
1
2
.
.
N
(9) Ergebnisanalyse (Aufbereitung+Auswertung der Ausgabedaten)
als SCHÄTZUNG für optimale Vorratshöhe und dabei zu erreichende (minimale)
mittlere Kosten dienen
â* = argmin{ KN(i), i=3, 4, 5, 6 } bzw. K* = K(â*) = min{ KN(i), i=3, 4, 5, 6 }
(10) Realisierung und Dokumentation
Umsetz. der Lös.; Dokumentation des Simulationsmodells und seiner Nutzung
7
1.4 Eine Auswahl zu lösender Probleme
z.B. könnte folgender Verlauf des Sim.-experimentes eintreten:
t
Zt
1
Kt(3)
kt(4)
Kt(4)
kt(5)
Kt(5)
kt(6)
Kt(6)
1 200
200
300
300
400
400
500
500
2
3
100
100
200
200
300
300
400
3
2 100
100
200
200
300
300
400
400
4
1 200
125
300
225
400
325
500
425
5
5 600
225
300
240
0
260
100
360
6
6 900
333
600
300
300
267
0
300
7
4 300
329
0
257
100
200
200
286
8
6 900
400
600
300
300
250
0
250
9
6 900
456
600
333
300
256
0
222
1
430
300
330
400
270
500
260
10
kt(3)
0
200
1
Simulationsverlauf (Realisierungen) möglicherweise so, dass als „hinreichend gut“
nicht die wirklich optimale Entscheidung erkannt wird und dass eine relativ starke
Abweichung zwischen Schätzwert und wahrem Erwartungswert besteht.
2
Für anderen Abbruch andere Aussagen.
Problem 1:
Problem der Wahl der Dauer des Experimentes.
Dazu: Ab wann Information sammeln bzw.
wann ist Einschwingphase beendet ?
{+1 Periode große Änder. bzgl. opt. Var. und zugeh. Kosten}
Problem 2:
3
Problem der Schätzung der interessierenden
Größen aus den Versuchsdaten.
Wie Realisierungen entsprechender ZV erhalten ?
Problem 3:
Problem der Generierung von Zufallszahlen.
8
4
Kann nur endlich viele Varianten prüfen.
Problem 4:
5
Auswahl der „besten“ Variante basiert auf Schätzwerten.
Problem 5:
6
Problem der Variantenwahl.
Problem der Wahl (Suche) einer optimalen Variante.
Simulation allein ist noch kein Optimierungsverfahren !
Problem 6:
Problem der Verbindung von Simulation mit
anderen Verfahren.
1.5 Was soll die Informatik beim Simulieren ?
hier nur:
* Algorithmen
* Datenstrukturen
* SW-Technologie
* Simulation und KI z.B.
* Simulation auf Rechensystemen
* Simulation von Rechen- und Kommunikationssystemen
6. Bedeutung der Simulation
- Notwendigkeit der Anwendung
* Untersuchungen der Kettenreaktion bei A-Bombe
* Konfigurierung und Steuerung von Fertigungssystemen
* Ampelsteuerung in einer Stadt
* Steuerung einer Flotte von Transporteinheiten
* Test von Lastverteilungsstrategien für Rechensysteme
* optimale Nutzung verteilter Ressourcen
(Funknetze, Mehr-Lager-Systeme, Arbeitsgruppen, ...)
- Möglichkeiten der Anwendung
* Entwicklungen der IF (HW, SW, Theorien)
* Simulation ist zur Wissenschaft geworden
* Erfahrungen
* Spezialisten
Aber: Realen Anwendungszahlen entsprechen dem nicht !
9
a) umfangreiches Wissen notwendig: Systemanalyse, Mathe, IF, Statistik und
Wahrscheinlichkeitsrechnung, jeweilige Fachgebiet, Erfahrung zu
Modellierung und Versuchsdurchführung
b) psychologische Barrieren
nutzerfreundliche SW
befähigte Nutzer
Verbindung mit anderen Problemanalyse- bzw. -löseverfahren
2. Zufallszahlen
2.1 Die Monte-Carlo-Methode
MCM := Methode der Modellierung von Zufallsgrößen mit dem Ziel, Kenngrößen ihrer
Verteilung zu schätzen.
1. Ideen aus 19. Jahrhundert
Nadelversuch von BUFFON
später erst 1944 : Entw. der A-Bombe
1949 Arbeit von Metropolis/Ulam: „The Monte Carlo Method“ in J.Amer.Statistical
Assoc.;
heute: Anwendung in Physik, Technik, Oper. Research, ...
MCM - Methode der statistischen Experimente; Begriff SIMULATION breiter
Beispiel:
Schätzung der Zahl
brauchen zuf. Ereignis, dessen Wahrscheinlichkeit mit im Zusammenhang
y
1
Mißerfolg
Treffer
x
0
1
werfen im Einheitsquadrat „auf gut Glück“ Punkt z = (x, y)
mittels Realisierung eines Zufallsvektors Z = (X, Y), wobei
X, Y - unabhängig und in [0, 1] gleichverteilt
Bewertung:
1 Treffer , falls Z Viertelkreis
g ( Z )
0 keinTreffer , falls Z Viertelkreis
10
E[ g(Z) ] = / 4
!!!
!!!
gute Schätzung für Erwartungswert ist arithmetische Mittel aus N Versuchen, d.h.,
N
E[ g(Z) ]
1/N
g(Zn) =: (N)
n=1
mit Z1, Z2, ..., ZN unabhängig und wie Z verteilt
(N) = 4 (N)
allg. Prinzip:
1° Entwurf eines zuf. Experimentes
2° Durchführung von N unabhängigen Versuchen
3° Statistische Auswertung
Eigenschaften der Schätzung:
1° erwartungstreu:
E[ (N) ] = E[ g(Z1) ] = / 4 (N) = 4 (N) ist erwartungstreue Schätzung
D2 (N) = 1 / N D2 g(Z1)
2° Varianz:
D2g(Z1) = E[ g(Z1)2 ] - { E[ g(Z1) ] }2 =
= 12 P(Treffer) - 2/16 = /4 - 2/16 =
= /16 ( 4 - )
3° Genauigkeit:
Für welches N gilt z.B. P( (N) - 0.01 ) 0.99
?
einfache Betrachtungen der elementaren Statistik liefern N 179 510
weitere Werte:
P( (500) - 0.01 ) 0.1084 !!!
P( (500) - 0. 1 ) 0.8268 !!!
für P( (N) - 0. 1 ) 0.99 erhält man
N 145 781
11
2. Variante:
gehe von Funktion
wähle ZZ Xn und bestimme
1 x
y f (x )
2
aus
1 X
Y
2
n
n
N 4 1 N Y
N
neue Schätzung
n 1
(a) erwartungstreu
(b) Varianz:
N
D 1N Y
2
n 1
n
n
= 1/N [2/3 - 2/16] BESSER !
2. Variante besser:
1. Nur jeweils eine ZZ.
2. Größere Genauigkeit.
3. Aber muss Wurzel berechnen.
RESÜMEE:
1. Schon für relativ ungenaue Aussagen wird ein gewaltiges Potential an
Zufallszahlen benötigt, d.h., besteht ein enormer (Simulations-)Aufwand.
2. Für eine Steigerung der Konfidenz um
0.1632 wird ein ca. 300-facher (Simulations-) Aufwand benötigt. Die
Genauigkeit der Schätzung ist i.d.R. proportional zu (1/N)1/2.
3. In der Regel existieren viele erwartungstreue Schätzungen. Davon dann eine
beste wählen.
Bem.:
Analog - Schätzung von Integralen.
12
2.2 Generierung gleichverteilter Zufallszahlen
{Lit.: Zielinski: Erzeugung von ZZ. Leipzig 1978, Fachbuchverlag
D.Knuth: The art of computer programming. 1969 Add. Wesley
Zeitschrift „Communications of the ACM“ }
2.2.1 Einführung
Vor. für Simulation: Zahlenfolgen, die „zufällig“ erzeugt wurden
entspr. Vorrichtung ZZ-Generator (Roulett, Würfel, Münze, ...)
physik. Geräte, die bei exakter Bauweise gleichverteilte ZZ erzeugen
oder folg. Zahlenfolge:
1415926535 8979323864 2643383279 5028841971
6 9 3 9 9 3 7 5 1 0 5 8 2 0 9 7 4 9 4 4 5 9 2 3 0 7 8 1 6 4 0 6 2 8 6 2 0 8 9 9 ...
{Folie mit 1 500 Dezimalstellen von
Wozu ? Physikalisch betrachtet stellen diese 1 500 Stellen hinter dem Komma eine
unvorstellbare, nie zu erreichende Präzision dar. Die 2 kanadischen Mathematiker J. und P.
Borwein haben bemerkt, dass 39 Dezimalstellen von ausreichen, um den Umfang eines Kreises
um das bekannte Universum mit einem Fehler zu berechnen, der kleiner ist als die Größe eines
Wasserstoffatoms !
Aus Sicht der Simulation – können die Dezimalstellen als Realisierungen einer glv. ZV mit den
Werten 0, 1, ..., 9 ansehen. Solche Untersuchungen gibt es. 1997 haben 2 japan. Wissenschaftler
der Univ. of Tokyo 3 x 234 51 Milliarden Stellen in mehr als 29 Stunden auf einem
Supercomputer berechnen lassen}
Was heißt „ZZ“ ? ? 100 ist eine ZZ ?
1
2
...
9
0
2
5
5
1
6
? Folgen von ZZ ?
auf Tastatur
nicht zufällig
als Erg. von Würfelversuchen zufällig
Zufälligkeit einer Folge - abhängig davon, wie sie erzeugt wurde, nicht wie sie aussieht
ZZ-Generator:
Vorrichtung, die eine Folge von Zahlen erzeugt, die in zuf. Reihenfolge auftreten.
physik. Geräte Probleme:
1. Wie Exaktheit garantieren ?
2. Wie Exaktheit prüfen ?
3. Wie entspr. Experiment im Rechner organisieren ?
(a) physikal. Prinzipien nutzen (Rauschen in Röhren, Teilchenzerfall, ...)
(b) spez. „Anbau“ am/im Rechner
(c ) Tabellen von ZZ:
1927 TIPPETT: 40 000
1939 KENDALL/BABINGTON-SMITH: 100 000
1955 RAND Corporation: 1 Mio.
13
(d) numer. oder algorithm. Verfahren:
1946 J.v. NEUMANN Quadratmittenverfahren
s0 = 9876
s02 = 97 5353 76
s1 = 5353
s12 = 28 6546 09
s2 = 6546
usw.
aber: (1) sehr viele kleine Zahlen
(2) degeneriert oft in 0 oder kleine Zyklen
obiges Bsp. - nach 56 ZZ ergibt sich
1600 5600 3600 9600 1600
oder für s0 = 9363 ergibt sich
s10 = 0001 und sn = 0000 für n 11
jedoch: Idee verwertbar
Folge durch deterministischen Algorithmus erzeugt
Quasi- oder Pseudo-Zufallszahlen
„Anscheinend zufällig zu sein“ ist eins, wie gut etwas anderes.
statistische Tests
Wir:
a) Gleichverteilung in [0, 1]
b) Transformationen
KNUTH: ...sehen Sie sich die Subroutinen-Bibliothek jeder Rechnerinstallation Ihrer
Organisation an und ersetzen Sie den ZZ-Generator durch einen guten. Versuchen Sie dabei
nicht zu schockiert zu sein über das, was Sie finden.
Heute:
Sehr gute ZZ-Generatoren.
Z. B. neuere Arbeit von P. L’Ecuyer, R. Simard, E.J. Chen, W.D. Kelton: An objectoriented random-number package with many long streams and substreams. Operations
Research, vol. 50 (2002), No. 6, pp. 1073-1075.
Dort u.a. die Home-page von L’Ecuyer
http://www.iro.umontreal.ca/~lecuyer
und weitere Literaturhinweise.
Zum Verständnis der dortigen und weiterer Dinge der folgende Abschnitt.
14
2.2.2 Generatoren von ZZ
Ziel: Algorithmus Folge { s0, s1, ... }, wobei
a) neues Element aus endlich vielen schon erzeugten;
b) Folge insgesamt „gute“ Eigenschaften aufweist.
zentrale Rolle:
in [0, 1) gleichverteilte ZZ
Bez.: U GV(0, 1)
Def. 2.1:
Als (Pseudo-)ZZ-Generator bezeichnet man ein Tupel G = ( S; T; s-T+1, ..., s-1, s0; f; g) mit
folg. Bedeutung:
(i) S - endliche Zustandsmenge.
(ii) T - positiver Integer, die Generierungstiefe (Gedächtnis).
(iii) s0 = (s-T+1, ..., s-1, s0 ) - Anfangszustand (Keim, seed,...) des Generators mit
s-T+1, ..., s-1, s0 S.
(iv) f : S S ... S S heißt Generierungsfunktion; sie ermöglicht eine
Zustandsentwicklung entspr. der Vorschrift
(2.1) si = f(si-T, si-T+1, ..., si-1), i = 1, 2, ... .
(v) g : S [0, 1) heißt Normalisierungsfunktion; sie transformiert den vorliegenden
Zustand si in einen reellen Wert zw. 0 und 1 durch
(2.2) ui = g(si) .
Bem. 2.1: Für Festlegung von G sind vor allem T, f und g zu wählen.
Nun gilt aber, dass S - endlich, f und g - eindeutige Abbildungen sind.
kleinste pos. ganze Zahl p mit Eig.
(2.3)
si+p = si für alle i > i0 für ein i0 0.
Zahl p heißt Periode von G.
3 Probleme:
(P.1) Entwicklung von Generatoren mit maximaler Periode.
(P.2) G. soll entsprechende stochastische Gesetzmäßigkeiten ideal imitieren.
(P.3) G. soll leicht, effizient und portabel implementierbar sein.
Beispiele für Generatorklassen:
(a) Quadrat-Mitten-Verfahren nur noch historisches Interesse
(b) Fibonacci-Verfahren
si = (si-1 + si-2) mod m ,
m - pos. Integer
f(si-1, si-2) = (si-1 + si-2) mod m ;
g(si) = si / m ;
15
Beispiel: m = 8; s0 = 1; s-1 = 2;
n
1
2
3
4
5
6
7
8
9
10
11
12
13
sn-2
2
1
3
4
7
3
2
5
7
4
3
7
2
sn-1
1
3
4
7
3
2
5
7
4
3
7
2
1
sn
3
4
7
3
2
5
7
4
3
7
2
1
3
schlechte Eigenschaften:
starke serielle Korrelation (kleine ZZ folgen auf kleine)
Permutationen sn-1< sn+1 < sn und sn< sn+1 < sn-1 treten nie auf
( c) Kongruenz-Modulo-Verfahren:
Ausgangspunkt: ein Anfangswert s0; sn = f(sn-1); un = g(sn) = sn/m;
Frage: Wie Funktion f wählen ?
y
m-1
y=f(x)
x
0
m-1
Antwort: Nur solche g, die das Quadrat „hinr. dicht“ ausfüllen.
Funktionen der Art
LEHMER 1948:
(MLKG)
y = (a x) mod m
für 0<a<m
Multiplikativer Linearer Kongruenz-Generator
f(s) = ( a s ) mod m;
g(s) = s / m; 1 < a < m
THOMSON 1955: Linearer K.-Generator
(LKG)
f(s) = ( a s + c ) mod m ; c > 0
16
MLKG:
(i) z.Z. am besten untersucht und am breitesten genutzt
(ii) statistisch gesehen besser als LKG;
(iii) für LKG gilt SLKG={0, 1, ...,m}, d.h., ein Wert mehr; ist aber auch der einzige Vorteil;
z.B. a=19, c=1, m=381, s0=0 0, 1, 20, 0, ...;
(iv) SMLKG = { 1, 2, ..., m-1 } bei 1 < a < m und s0 > 0
(v) weit verbreitet ist m = 231 - 1 = 2 147 483 647 mit
a = 16 807 (SIMPL/1) oder a = 630360016 (SIMSCRIPT II.5)
a, m und c legen Güte des Generators fest; g ohne Einfluss;
m - beeinflusst Zufall unwesentlich, aber den Wertebereich;
max. Größe
a - schwerer zu wählen; c auch;
m = 2n war populär Ende der 60er
SIMULA nutzte m = 235 und a = 513 p = 233 !!!
effiziente, aber statistisch brüchige und nicht portable Generatoren
IBM-System/360: RANDU mit f(s) = (65 539 s) mod 231
sehr schlechter zufälliger Output
(d) „Lineare Rekursion mod 2“-Generator:
1965 von Tausworthe ( Mathem. of Computation, 1965, 201-209)
sn = ( a1 sn-1 + a2 sn-2 + ... + aT sn-T + c ) mod 2
Bitfolge;
mod 2 - Operation ist XOR Operation;
unter best. Voraussetzungen gute statistische Eigenschaften;
schnell; leicht implementierbar; Zykluslängen bis 29689 - 1
(e) Kombinationen:
z.B. von MLKG´s
L´Ecuyer in Communic. of the ACM, 1988, 742-749
L´Ecuyer in Communic. of the ACM, 1990, 85-97
L´Ecuyer Operations Research, v. 47, 1999, 159-164
sehr große Zykluslängen und ausgezeichnete statistische Eigenschaften
17
2.2.3 Der MLKG
f(s) = s a mod m , 0 < a < m ; s S = {1, 2, ..., m-1}
(2.4)
a und m beeinflussen Lösungen der Probleme (P.1) bis (P.3)
seit Lehmer breit untersucht Erg.:
effiziente Implementierungen (vgl. Bratley u.a.)
es gibt versch. Aussagen von Tests auf Zufälligkeit
wichtige theoretische Eig. untersucht (Knuth)
Meinung:
MLKG stellt bei guter Wahl der Parameter und korrekter Implementierung eine Art
minimalen Standardgenerator dar, mit dem andere verglichen werden sollten.
1. Zur Periodenlänge:
Klar: Maximale Periodenlänge := m-1.
f(s) = a s mod 2n
a) m - keine Primzahl :
n > 3 Periodenlänge maximal 2n-2 s0 ungerade und a hat die Form
8 k + 3 oder 8 k + 5 für ein Integer k
b) m - Primzahl:
f(s) 0 mit s {1, 2, ..., m-1}
u [1/m, ..., 1 - 1/m]
Lehmer empfahl m = 231 - 1 = 2 147 483 647
Bsp.:
f(s) = 6 s mod 13 {1, 6, 10, 8, 9, 2, 12, 7, 3, 5, 4, 11, 1, ...}
f(s) = 7 s mod 13 {1, 7, 10, 5, 9, 11, 12, 6, 3, 8, 4, 2, 1, ...}
1. Wahl der Parameter wichtig.
2. Generatoren mit voller Periode.
Wie a wählen ?
Definition 2.2:
Ein Integer a heißt primitive Wurzel von m (primitives Element modulo m), wenn
k
a - 1 ein Vielfaches von m für k = m-1 und für kein kleineres k ist.
Satz 2.1
(vgl. Knuth, v.2, S.19)
Ein MLKG mit m als Primzahl ist ein Generator mit voller Periode,
wenn a eine primitive Wurzel von m ist.
18
für m 3 signifikante Anzahl von a-Varianten:
(i) m = 13 hat
a = 2, 6, 7, 11;
31
(ii) m = 2 - 1 hat mehr als 534 Mio.; a = 16 807 ist einer davon;
Wann ist a prim. Wurzel ?
Satz 2.2
(vgl. Knuth, v.2, S.19, Th.C)
Wenn m eine Primzahl ist, so ist a eine primitive Wurzel von m
g.d., w. an mod m 1
für n = 1, 2, ..., m-2.
Fakten für m = 231 - 1:
(1) 534 600 000 primitive Wurzeln 24.89 % aller a-Werte
(2) Kleinste prim. Wurzel ist 7.
(3) a ist primit. Wurzel von m g.d., w. a = 7b mod m, wobei b keinen gemeinsamen Teiler
(außer 1) mit m-1 hat.
(4) Primfaktoren von m-1 sind 2, 3 (2x), 7, 11, 31, 151, 331
(5) Da b = 5 keinen gemeinsamen Teiler mit m-1 hat 75 = 16 807 ist prim. Wurzel von m.
Zus.-fass.: Lösung von (P.1) filtert ca. 75% der möglichen a heraus !
2. Zur stochastischen Gleichförmigkeit:
:= Generator muss [0, 1)-Gleichverteilung repräsentieren !
Klar:
Normalisierung ohne Einfluss auf stochastische Gleichförmigkeit
Aus allen G. mit voller Periode jene mit schlechten statist. Eig. weg
versch. Tests; ACHTUNG: 10 bestandene keine Garantie !!!
übliche Tests:
2 - Test (1900 von Pearson)
Kolmogorov/Smirnov-Test (1933/1939)
empirische Tests (Poker-Test, Run-Test, ...)
damit eigentlich folg. Bed. zu prüfen:
Bed. 1: ZZ sind annähernd gleichverteilt;
Bed. 2: aufeinanderfolgende Paare sind annähernd gleichverteilt;
...
Bed. n: aufeinanderfolgende n-Tupel sind ...; usw.;
Spektral-Test:
1965 von Coveyou/Mac Pherson
signifikantester Test, weil
a) alle guten G. ihn bestehen, und
b) alle bekannten MLKG, die schlecht sind, durchfallen;
19
Idee + Hintergrund an einf. Bsp.: f(s) = a s mod 11
volle Periode bei
(i) a = 7:
1, 7, 5, 2, 3, 10, 4, 6, 9, 8, 1,
(ii) a = 6: 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1,
1-dim. Gleichförmigkeit erfüllt;
2-dim. nicht, da alle 2-dim. Punkte auf Geraden;
(i) scheint „zufälliger“ zu sein als (ii);
MARSAGLIA zeigte 1968 diese theoret. Schwäche aller LKG:
Für jedes k sind die k-Tupel (un, ..., un+k-1) für n=0, 1, ... auf einer Menge von maximal
(k! m)1/k äquidistanten parallelen Hyperebenen im k-dim. Hyperwürfel [0, 1]k angeordnet.
Spektraltest nutzt max. Abstand dk(a, m) zw. benachbarten Hyperebenen der Dimension k bei
MLKG mit Parametern a und m: Je kleiner, desto besser.
Existieren untere Schranken bezüglich a: d*k(m) .
Anhand des Maßes Sk(m, a) := d*k(m) / dk(a, m) schlägt z.B. L´Ecuyer (1988) vor:
(i) m = 2 147 483 399 und a = 40 692 für 32-Bit;
(ii) keinen MLKG mit m < 215 für 16-Bit;
3. Zur Implementierung:
Ziel: Portabler G., in höheren PS implementierbar und mit gleichem Output auf beliebigem
Rechner mit ausreichender Verarbeitungsbreite (32-Bit).
Ausgangspunkt:
MLKG mit a = 16 807
und
m = 231 - 1
einfachste Weg Integer-Version 1:
function Random: real;
{Integer-Version 1}
{Real-Version 1}
const a = 16807.0;
m = 2147483647.0; { var h : real; }
begin
seed:= (a * seed) mod m; {h:= a * seed; seed:=h-m*trunc(h/m);}
Random:= seed/m
end;
Problem: Überlaufgefahr bei a * seed !
Klar:
1. Da a * seed 16807 * (231-1) 1.03 245, so für Integer-Version 1 keine korrekte
Implementierung bei MAXINT < 246 - 1.
2. Real-Version 1 ist korrekt, sofern real-Werte mit 46-Bit Mantisse dargestellt.
Bem.: Wenn Implementier. unkorrekt, so verwerfen. Einfacher Korrektheitstest:
Aus s0 = 1 muß s10 000 = 1 043 618 065 folgen.
20
SCHRAGE (1979/1983)
Idee: Berechnung von a*s so, dass alle Zwischenergebnisse kleiner m sind.
° Triviale Lösung bei m = a q für Integer q
f(s) = a * s mod aq =
a (s mod q)
ABER: m ist Primzahl !!!
° Dann gilt m = a q + r mit q = m div a und r = m mod a.
Vor.: r < q bzw. m mod a < m div a .
Hier: q = 127 773 und r = 2 836; i.allg. q 1 und 1 r a-1.
Ableitung des Verfahrens:
(1) Aus f(s) = as mod m = as - m(as div m)
folgt {HA} mit Addition und anschließender
Subtraktion von m(s div q) :
f(s) = (s) + m (s)
(2) Falls
mit
(2.5)
(s) = a (s mod q) - r (s div q) ,
(2.6)
(s) = s div q - (a s) div m .
(2.7)
r < q , so gilt für alle s S = {1, 2, ..., m-1}: {HA}
(i)
(ii)
(iii)
(s) = 0 1 ;
a(s mod q) und r(s div q) sind in S {0};
(s) m-1.
{ (iii) folgt aus (ii); (ii) folgt aus Vor. r < q und der Form von q und r;
(i) ist Folge von s div q = as div aq und dem Fakt, daß bei 0x-y1 gilt x - y = 01}
(3) Grundidee von Schrage:
Die Operation mit Überlaufgefahr ist in ; dazu aus (i) noch
Verfahren, den Wert von (s) aus Kenntnis von (s) abzuleiten. Da
1 f(s) m-1, folgt aus (2.5), dass
0
1
( s)
g .d ., w. 1 ( s )m 1;
g.d ., w. (m 1) ( s ) 1;
Berechnung von (s) nicht nötig
21
function Random: real;
{Integer-Version 2}
{Real-Version 2}
const
a=16807.0; m=2147483647.0;
q=127773.0; { m div a }
r=2836.0; {m mod a }
var
k: integer; {real }
begin
k:= s div q; { k:= trunc(s/q); }
s:= a * (s - k * q) - k * r;
if s < 0.0 then s:= s + m;
Random:= s / m
end;
{ s-kq = s mod q }
Bem.:
Integer-Version 2 korrekt bei MAXINT 231 - 1. Andernfalls die Real-Version
nutzen. Sie ist korrekt, wenn reals mit 32-Bit Mantisse (einschließlich Vorzeichenbit)
dargestellt.
HA:
(i) Verifikation.
(ii) Was geschieht bei a m ? Zeigen: I.allg. Random nicht korrekt? Warum ?
Bem.:
Voraussetzung war r < q. Park/Miller [C.ACM,10(1988)] zeigen es gibt 23093
solcher Multiplikatoren a; Frage: Welche besser als 16807 im Lichte von (P.2) ?
L´Ecuyer [C.ACM, 6(1988)]: 39373.
2.2.4 Verallgemeinerungen
a) Disjunkte Teilfolgen
Das ist durch verschiedene Keime für MLKG möglich
zu geg. Keim si und posit. Integer j si+j ohne Zwischenelemente
Lemma 2.1:
Für einen MLKG f(s) = as mod m gilt:
sn = ( an s0 ) mod m = [ ( an mod m ) s0 ] mod m , n 1.
Beweis:
Induktiv. HA.
Hinweis: Aus x mod y = z folgt z = x - cy für Integer x, y, c mit
x / y - 1 < c x / y.
22
Formel:
si+j = (aj si) mod m = [ (aj mod m) si ] mod m
(2.8)
versch. Anfangswerte für MLKG mit a=16807 und m=231-1;
alle sind 131 072 Glieder voneinander entfernt:
Folge
Anfangswert
1
748 932 582
2
1 985 072 130
3
1 631 331 038
4
67 377 721
5
366 304 404
HA: Geben Sie effizientes Verfahren an, diese Tabelle fortzuführen !
b) Kombination von Generatoren:
Kombination von 2 ZZ-Folgen {Xn} und {Yn} zu 3. Folge {Zn}:
(1) Zn:= (Xn + Yn) mod m
(2) nutze {Yn}, um {Xn} zu mischen und setze {Zn} gleich dieser
(3) Zn := Xn XOR Yn
WICHMANN/HILL (Appl. Statistics, 1982, 188-190) Kombination von
f1(s) = 171 s mod 30 269
f2(s) = 172 s mod 30 307
f3(s) = 170 s mod 30 323
L´Ecuyer (C. ACM, 6, 1988) auf Basis des Spektraltests:
Kombination von 2 MLKG für 32-Bit Rechner
Kombination von 3 MLKG für 16-Bit Rechner
Marsaglia/Bray (1968):
{Xn} initialisiert Tabelle von z.B. 100 Werten;
{Yn} wählt Element aus als Output Zn;
neues Xn erzeugt und an Stelle des gewählten;
wenn Perioden von {Xn} und {Yn} keine gemeinsamen Teiler, so
hat {Zn} die Periode pZ = pX pY
23
L´Ecuyer, P.: Good parameters and implementations for combined multiple recursive
random number generators.
Operations Research, v.47 (1999), 159-164
einer der dort angegebenen heißt MRG32k3a;
auf Stufe n wird sein Zustand durch ein Vektorpaar beschrieben:
s1, n(x1, n, x1, n+1, x1, n+2)
und
s2, n(x2, n, x2, n+1, x2, n+2)
deren Entwicklung läuft entsprechend der linearen Rekurrenz
x1, n = (1403580 x1, n-2 – 810728 x1, n-3) mod m1
bzw.
x2, n = (527612 x2, n-2 – 1370589 x2, n-3) mod m2
mit
m1 = 232 – 209 = 4294967087 und m2 = 232 – 22853 = 4294944443;
sein Output ist definiert durch
zn = (x1, n – x2, n) mod 4.294.967.087
und
zn / 4294967088
if
un
if
4294967087 / 4294967088
Periodenlänge
zn 0,
zn 0;
p (m13 1)( m23 1))) / 2 2191 3.1 1057
c) Erzeugung komplementärer ZZ:
sei f(s) = a s mod m
und
g(s) = s / m
brauchen un´ = 1 - un , n = 1, 2, ...;
auch folg. Verfahren:
s´n+1 = a s´n mod m;
un´ = s´n / m
mit s´0 = m - s0
Beweis: Induktiv.
d) Folge der ZZ in umgekehrter Reihenfolge:
sei geg. MLKG def. durch sn+1 = a sn mod m , n = 0, 1, ...;
neuer Multiplikator a´= (ap-1) mod m mit p - Periode des G.;
sn+1 = a´ sn mod m erzeugt umgekehrte Reihenfolge;
24
Bsp.:
f(s) = 3 s mod 7
mit s0 = 1
1
3
2
6
4
5
1
4
6
2
3
1
a´ = 36-1 mod 7 = 5
1
5
Bezüglich der stochastischen Gleichförmigkeit - beide gleich.
2.2.5 Eine Auswahl abzulehnender Generatoren
RANDU lebt; in 1985 Pascal-Buch sogar 16-Bit Version
MLKG:
1980 Sim.-buch von Maryanski: a = 20 403, m = 215 p=8 192
1985 Modula-2 Systemhandbuch: a = 13, m = 2 311 p=1 155
1985 LISP-Buch von Gabriel: a = 17, m = 251 p = 125
LKG:
1978 Grogono Einführungsbuch zu Pascal; 1985 sogar 2. Ausgabe; dort:
f(s) = ( 25 173 s + 13 849 ) mod 216
unklare stoch. Eig.;
interessant ist Binärdarst. der Grogono-Folge:
letzte Bit ist zyklisch mit Periode 2; vorletzte Bit ist zyklisch mit Periode 4; usw.;
nur 1. Bit hat volle Periode;
scheint typisch für alle LKG mit voller Periode und m = 2k:
z.B. UNIX: rand ist def. durch
f(s) = (1103515245 s + 12345 ) mod 231
unteren Bits wenig zufällig;
1985 Pascal Buch von Collins: f(s) = (9806 s + 1) mod 131071;
f(37911) = 37911 !!!
Fazit: Es gibt heute ZZ-Generatoren, die allen Ansprüchen genügen !
25
2.3. Erzeugung beliebig verteilter Zufallszahlen
2.3.1. Einleitung
Sprechweise:
Erzeugung einer ZZ = Erzeugung eines möglichen numerischen Wertes, den die ZV
entsprechend der angenommenen Verteilung annehmen kann.
Voraussetzung:
Besitzen in [0, 1) gleichverteilte ZZ.
selten in Praxis entsprechende Transformationen
verschiedene allgemeine Verfahren => spezielle Transformationsalgorithmen
Lit.: Devroye, L. (1986). Non-uniform Random Variate Generation. Springer-Verlag
Vereinbarung:
U
X
–
–
ZV, die in [0, 1) gleichverteilt;
ZV, die entsprechend VF FX(. ) verteilt;
2.3.2. Allgemeine Verfahren
J. von Neuman; Marsaglia; Ahrens; Dieter; ...
Versch. Methoden anwendbar auf stet. Vert. (S), diskrete Vert. (D), Normalvert. (N);
2.3.2.1. Inversion
(Verfahren der Umkehrfunktion)
anwendbar für S, D;
sei X – ZV mit VF FX, sei FX-1 die Inverse, d.h., FX-1(y) = inf{x: FX(x) y}, 0 y 1;
Satz von Smirnov:
Sei U eine in [0, 1) glv. ZV und F eine VF. Wenn gilt U = F(X), dann ist X eine ZV
mit Verteilungsfunktion F.
Bem.:
Wenn F streng wachsend, so existiert F-1 und X = F-1(U).
Anwendung von FX-1 auf eine [0, 1)-glv. ZZ liefert eine ZZ entsprechend FX verteilt.
Beweis:
P(FX-1(U) x) = P(U FX(x)) = FX(x) = P(X x).
geometrische Interpretation:
1
U
x
X = FX-1(U)
26
Algorithmus INV.1:
1. Erzeuge U.
2. X FX-1(U).
3. Gib X zurück.
Geht gut, wenn Inverse leicht bestimmbar:
Cauchy-, Exp.-, logist., Gleich-, Weibullverteilung; indirekt auch Erlangverteilung;
Beispiele:
(1) Exponentialverteilung:
Smirnov =>
X ~ F(x) = 1 – e- x , x 0, >0
X = FX-1(U) = - 1/ ln(1-U) ~ - 1/ lnU
Mit Parameter > 0 exponentiell-verteilte ZZ ergeben sich aus
xn = - 1/ ln un für n 1.
(2) Gleichverteilung in [a, b]:
0, x 0
t a
X ~ F ( x)
, a x b ,a b
b
a
1, b x
X = FX-1(U) liefert
X = a + U (b – a)
In [a, b] glv. ZZ ergeben sich aus
xn = a + un (b – a) für n 1.
(3) Diskrete Verteilung:
w
X ~ 1
p1
w2
p2
...
...
X = FX-1(U) liefert
X = wk g.d., w. p1 + ... + pk-1 < U p1 + ... + pk
oder
X = wk mit k = min{t: U p1+p2+...+pt }
U
0
p1
p1+p2
p1+p2+p3
1
ZZ, die entsprechend der diskreten ZV X verteilt sind, ergeben sich aus
27
xn = wk mit k = min{t: un p1+p2+...+pt } für n 1.
Beispiel:
1
X
0.1
2
0.2
3
0.25
4
0.3
5
0.15
Frage: Mittlere Anzahl D Durchläufe = ? Dopt = ? Algor. ändern !
Bemerkung:
Wenn FX-1(U) nicht leicht zu bestimmen, so verschiedene Näherungen (z.B. über Tabellen
oder funktional).
YUEN (1982) =>
Hashing angewandt auf eine Tafel von Funktionswerten; bestimmt Anfangsintervall,
das die Wurzel von F(X) = U enthält, und sucht diese mit der regula falsi;
(4) Suchverfahren bei diskreten Verteilungen:
a) wenige Werte: Tabelle und lineare Suche; Problem, wie durch Tabelle laufen ?
b) viele Werte (1 bis N): Tabelle und Suchverfahren
z.B. binäre Suche => O(log N) für worst case
1. Setze L 0 und R N.
2. Erzeuge U.
3. Führe aus solange L < R-1
3.1.
Setze X (L+R)/2 .
3.2.
IF U > F(X) THEN L X ELSE R X.
{Vor.: F( L ) < U F( R ).}
4. Gib R zurück.
Verfahren von FOX (1978, Data Structures and Comp. Science Techniques in
Operations Research. Oper. Research, v.26, 686-717)
folg. Bucket-Schema:
beginnt mit N Buckets der Breite 1 => setzt
pi = min{j: F(j) > (i-1)/N} und
qi = min{j: F(j) i/N}, i=1(1)N;
nun gilt
i-1 < N U i => F(pi –1) < U F(qi);
in Bucket i werden Indexe pi und qi gespeichert;
folg. Algorithmus:
1. Erzeuge U.
2. Setze K N U + 1. {K ist glv. auf 1, 2, ..., N.}
3. Durchsuche die Werte pK, pK+1, ..., qK nach jenem Index X, so dass
F(X-1) < U F(X).
4. Gib X zurück.
28
Verfahren von AHRENS/KOHRT (1981, Computer Methods for Efficient Sampling
From Largely Arbitrary Statistical Distributions. Computing, v.26, 19-31)
Gleiche Prinzip, aber mit numerischen Raffinessen; z.B. in Bucket k wird nur pk
gespeichert, wenn pk = qk, andernfalls wird - pk gespeichert;
brauchen 2 Tafeln:
1. Tafel für tabellierte Verteilungsfunktion;
2. Tafel mit m Elementen L(k), wobei m durch Nutzer zu setzen; L(k) – Inhalt
von Bucket k.
!
Wachsendes m beschleunigt den Algorithmus
Faustregel: N < m < 3 N.
!
folg. Algorithmus:
1. Erzeuge U.
2. I m U + 1. {I ist glv. auf 1, 2, ..., m.}
3. IF L(I) > 0 THEN gib L(I) zurück. Stop.
4. {Sonst beginne lin. Suche.} X -L(I).
5. Solange F(X) < U setze X X + 1.
6. Gib X zurück.
Beispiel:
N = 8 m = 10
Tabelle 1
k
F(k)
1
.07
2
.23
3
.44
4
.72
5
.82
6
.87
7
.93
8
1.00
1
-1
2
2
3
-2
4
3
5
-3
6
4
7
4
8
-4
9
-5
2
2
2
3
2
3
4
3
3
5
3
4
6
4
4
7
4
4
8
4
5
9
5
7
10
7
8
Tabelle 2
i
L(i)
10
-7
weil
i
pi
qi
1
1
2
nun z.B. die drei U-Realisierungen 0.245, 0.567, 0.89 transformieren;
2.3.2.2. Verwerfungsmethode
(Acceptance and rejection: AR-Verfahren)
anwendbar für S, D; Dichte: fX(); Verteilungsfunktion: FX();
Inversion braucht Verteilungsfunktion; manchmal jedoch ist nur Dichte explizit gegeben
wichtiges Beispiel::: Normalverteilung
29
es gibt viele AR-Verfahren; gemeinsame Idee (J. v. Neumann 1951 ersten Ideen):
eine voraussichtliche ZZ wird einem zufälligen Test unterworfen, in dessen Ergebnis
entweder ihre Ablehnung oder ihre Annahme erfolgt;
wiederholte Stichproben-Entnahme bis eine bestimmte Bedingung erfüllt ist
! Natürlicher Ausweg, wenn die Inversion nicht möglich ist !!!
Formalisierung der Grundidee:
- Wählen voraussichtliche ZZ laut einer (target) Verteilung mit gY() bzw. GY();
- Rückweisung (Verwerfung/Annahme derart, dass die angenommenen Y die geforderte
Verteilung haben.
Frage: Wie soll gY() aussehen ? verschiedene Bedingungen an die Dichten
2 Dinge beachten:
(1) Realisierungen von Y sollen schnell und exakt erfolgen.
(2) gY() soll fX() so gut wie möglich imitieren (damit der Anteil abgewiesener Y
möglichst klein).
M :
==> Maß für Unterschied:
f X ( x)
max
x : f X ( x ) 0 gY ( x )
ist einfachste Form eines AR-Verfahrens
a) Rechteck-Verwerfung
Vor.: Dichte fX() > 0 in endlichem Intervall [a, b] und dort auch beschränkt.
Wählen gY(x) = 1 / (b – a), x [a, b]. Sei c max f X ( x) , so gilt M = c (b – a).
a x b
Algorithmus AR.1:
Input [fX(), a, b]; speichere [c]; Output [X]
1. Erzeuge gleichverteilt in (a, b) ein Y, sowie ein U.
2. Wenn U c > fX(Y), so gehe zu 1.
3. X:=Y; Exit.
Bemerkung : Durch U c wird in [0, c] ein glv. Z erzeugt. Wenn Z fX(Y), gib X:=Y zurück.
fX(x)
c
x
x
U c
x
0
a
b
Y
30
Der zufällige Vektor (Y, cU) beschreibt einen im Rechteck gleichverteilten
zufälligen Punkt. Ist dieser Punkt oberhalb der Kurve, so erfolgt eine Wiederholung;
andernfalls wird der Y-Wert akzeptiert.
Der Algorithmus AR.1 ist ineffizient, wenn in Schritt 2 mit signifikanter
Wahrscheinlichkeit eine Wiederholung (Ablehnung) erfolgt. Man hat dann auch 2
ZZ als „Müll“. umsonst erzeugt.
Entsprechende Verallgemeinerungen der Grundidee verbessern sowohl die Effizienz
und schwächen auch die Voraussetzung „““ZV fällt in endliches Intervall“ ab.
b) Majorisierende Verwerfung:
Vor.: Es existiert eine majorisierende Dichte gY() so, dass die Konstante M mit
fX(x) M gY(x), x R1, endlich ist.
M gY(x)
fX(x)
x
Algorithmus AR.2:
Input [fX(), gY()]; speichere [M]; Output [X]
1. Erzeuge Y laut gY(), sowie ein U.
2. Wenn U M gY(Y) > fX(Y), so gehe zu 1.
3. X:=Y; Exit.
Bemerkung :
Durch U M gY(Y) wird in [0, M gY(Y) ] ein glv. Z erzeugt. Wenn Z fX(Y), gib X:=Y
zurück.
Anstelle von im Rechteck gleichverteilten Punkten werden nun Punkte erzeugt, die
unter M gY() gleichverteilt sind.
Je enger M gY() an fX( ), desto größer die Wahrscheinlichkeit, dass keine
Wiederholung der Schritte 1 und 2.
Behauptung: Jedes angenommene Y hat die Verteilungsfunktion FX( ).
{Validierung von Algorithmus AR.2}
Beweis:
{Als Hausaufgabe den analogen Beweis für AR.1}
Müssen zeigen, dass P( Y x U M gY(Y) fX(Y) ) = FX(x) für alle x R1. Es gilt
P( Y x U M gY(Y) fX(Y) ) =
P( Y x U M gY(Y) fX(Y) )
P(U M gY(Y) fX(Y) )
= : A/B
Für A erhält man
31
A = P( Y x U M gY(Y) fX(Y) ) =
P( Y U M g
Y
(Y ) f X (Y ) Y y ) gY ( y ) dy
x
=
x
P(U
f X ( y)
f X ( y)
) gY ( y ) dy
gY ( y ) dy FX ( x) / M
M gY ( y )
M
g
(
y
)
Y
B = P(U M gY(Y) fX(Y) ) =
f X ( y)
gY ( y ) dy 1 / M
M gY ( y )
= P( U M gY (Y ) f X (Y ) Y y ) gY ( y ) dy
Somit ist alles gezeigt.
Frage: Wie oft werden im Mittel die Schritte 1 und 2 durchlaufen ?
Antwort:
Wir haben jeweils unabhängige Versuche. Die W. für einen Erfolg ist 1/M je Versuch.
Somit gilt P(erster Erfolg im Versuch k) = (1 – 1/M)k-1 1/M
sowie E[Anzahl Versuche bis zum ersten Erfolg] = M.
Da die Generierungszeit nach dem Verfahren der majorisierenden Verwerfung vor allem
abhängig ist von der Komplexität der Berechnungen im 1. und 2. Schritt sowie von M ergibt
sich als Ziel: M ~ 1.
Bemerkung
Eine Beschleunigung des Tests auf Ablehnung würde eine Verbesserung bringen, da die
Berechnung von fX(Y) / gY(Y) i.d.R. eine langsame Operation ist.
Idee: Möglichst diese Berechnung umgehen.
Marsaglia 1977: Squeeze-Prinzip (Press-Technik)
Versuch, mit hoher W. die Berechnung von f / g zu umgehen.
Suchen 2 Funktionen h1 und h2, die
- leicht zu berechnen sind und
- für die gilt h1(x) fX(x) h2(x).
Algorithmus AR.3:
Input [fX(), gY(), h1( ), h2( )]; speichere [M]; Output [X]
REPEAT
1. Erzeuge Y laut gY(), sowie ein U.
2. W U M gY(Y).
3. accept [ W h1(Y)].
4. IF NOT accept
THEN IF W h2(Y)
THEN accept [ W fX(Y)].
UNTIL accept.
Gib X:=Y zurück.
32
Bemerkung :
In den meisten Fällen erhält die Boole’sche Variable accept ihren Wert aus dem Vergleich
W h1(Y)]. Das entspricht einem schnellen Annahmeschritt.
In den restlichen Fällen wird W > h2(Y) benutzt, ein schneller Verwerfungsschritt.
Nur in den seltenen Fällen, wo h1(Y) < W h2(Y), wird mit fX(Y) verglichen.
Zusammenfassung:
Die Verwerfungsmethode
(i)
kann zu effizienten Algorithmen für konkrete Verteilungen führen, wenn
folgendes erreicht wird:
a) gY( ) ~ fX( ), d.h., M ~ 1;
b) eine Stichprobe entsprechend gY ist leicht zurealisieren;
c) einfache Schranken existieren an fX( ).
(ii)
ist Basis sehr vieler Algorithmen (unerschöpflich); viele erfolgreiche
Anwendungen (u.a. Gamma-, Beta-, Poisson-, Binomial-, Normalverteilung).
2.3.2.3. Kompositionsmethode
anwendbar für S, N, D;
beruht auf Zerlegung von fX( );
a) diskrete Zerlegung:
n
f X ( x) gi ( x) pi ,
i 1
bi
g ( x) dx 1,
i
n
p
i 1i
i
1, 0 pi , i 1(1)n;
a1 a, bn b, 0 gi ( x).
ai
1. Schritt: Durch zufällige Wahl wird entsprechende Dichte gewählt.
2. Schritt: ZZ nach zutreffender Dichte gewählt.
Hoffnung: Es wird eine Zerlegung gefunden, die leicht handhabbaren Dichten größere
Wahrscheinlichkeiten zuteilt.
b) stetige Zerlegung:
fX(x) = gZ(x) dH(z)
1. Schritt: Eine Zufallszahl Z wird laut Verteilungsfunktion H( ) erzeugt.
2. Schritt: Eine Zufallszahl X wird laut der Dichte gZ( ) erzeugt.
Beispiel:
Ahrens/Dieter (1972) in Communications of the ACM, v.15, 873-882,
für N(0,1)-verteilte Zufallszahlen teilen sie Definitionsbereich mit entsprechenden
Proportionen wie folgt auf
33
Bereich ( a ) – 0.9195
Bereich ( b ) – 0.0345
Bereich ( c ) - 0.0155
Bereich ( d ) - 0.0241
Bereich ( e ) – 0.0064
e
d
d
a
a
a
a
c
c
b
-3
-2.11
b
-0.29
0.29
2.11
x
3
Verfahren:
- wählt ZZ entsprechend Trapez-Verteilung (Gebiet a);
{einfach und schnell aus 2 glv. ZZ}
- Gebiet b (die Schwänze der Verteilung) durch verallgemeinertes AR-Verfahren;
- Gebiete c, d, e durch AR-Verfahren mit Rechteck- oder Dreieck-Dichte als Schranke;
mit W. von ca. 0.9195 ist ZZ sehr schnell erzeugt
Zusammenfassung
Die vorgestellten Konzepte (und weitere) liefern eine Vielzahl von Algorithmen.
Nutzer
Frage: Welchen für eine konkrete Anwendung verwenden ?
1. Inversion: Wenn monotone Transformationen von glv. ZZ angestrebt werden (bei
Anwendung von varianzreduzierenden Techniken). Benötigen 1 x U.
2. Rejektion: Bei aufwendigen Simulationsstudien; z.T. in Simulationssoftware
integriert. Benötigen jeweils 2 x U.
3. Normale Nutzer mit PC: Effiziente und leicht programmierbare Algorithmen, die auf
Rejektion und Näherungsverfahren beruhen.
4. Komposition: Oft benutzt, um Schwänze einer Verteilung zu simulieren. Nicht für
monotone Transformationen, da manchmal Rejektion benutzt. Benötigen 2 x U.
34
2.3.2.4. Diskrete Verteilungen
In den meisten Beziehungen einfacher zu simulieren als stetige Verteilungen weil i.allg.
Inversion anwendbar.
x
0 1 ...
F
(
x
)
pi : qx , x 0,1,... .
Sei
,
X
X
p
p
...
i
0
1
0
Sei U in [0, 1] gleichverteilt.
==>
P(qx 1 U qx )
qx
du q
x
qx 1 px P( X x)
q x 1
Def.: q-1 = 0.
X = min{x: qx-1 < U qx } – kann durch entsprechende Suche bestimmt werden; es
existieren aber auch effizientere Verfahren.
(1) Gleichverteilung
a
pa
a, b – Integre, a < b.
a 1 ... b
pa 1 ... pb
Sei
X
X = a + (b – a + 1) U
mit
px = 1/(b-a+1), x = a, a+1, ..., b;
liefert entsprechende Verteilung
Beispiel: Würfel
Kosten: Unabhängig von a und b.
(2) Poisson-Verteilung
0 1 2 ...
mit
Sei
X
p0 p1 p2 ...
Klar:
px+1 = px /(x+1), x = 0, 1, ...;
px
x
x!
e , x = 0, 1, ...; > 0.
p0 = e- =: c.
Bemerkung:
c als Input reduziert Berechnungszeit im Algorithmus.
Benötigen zwei Variable – SUM für die akkumulierten Wahrscheinlichkeiten und
WAKT für die aktuellen Wahrscheinlichkeiten.
Algorithmus P.1:
{stellt Inversion dar}
1. IF < 0, c 0 =R c 1 gehe zu 7.
2. X 0; SUM c; WAKT c.
3. Erzeuge U.
4. IF U SUM OR SUM > 0.000000 OR WAKT < 0.000001 THEN gib X zurück.
5. X X+1.
6. WAKT WAKT / X; SUM SUM + WAKT; gehe zu 4.
7. Gib Fehlermeldung aus und STOP.
35
Manchmal ist selbst ganzzahlig. Dann wird auch Inversion angewandt, aber die Suche in
den Werten für die Verteilungsfunktion ist effektiver möglich.
Sei ganzzahlig und seien Tabellen für p und q für = 1, 2, ..., r vorhanden.
Es gilt:
1 max{ x : U qx }, U q ;
X
min{ x : U qx }, U q .
Hinweis: Man beginnt Suche mit dem Modalwert X = .
Tabelle im „Göhler“ liefert
p =p-1
1
0.367879
2
0.270671
3
0.224042
4
0.195367
...
10
... 0.125110
Aus der rekursiven Beziehung für px bzw. qx folgt
für U < q :
p-n = p-n+1 (-n+1) / ,
q-n = q-n+1 - p-n+1,
n=1 .. ;
n=1 .. ;
sowie für U > q :
p+n = p+n-1 / (n + ) ,
q+n = q+n-1 + p+n,
n=1, 2, ...;
n=1, 2, ...;
Algorithmus P.2:
{für ganzzahliges r; Input pi und qi für i = 1 ..r}
1. IF 0 gehe zu 19.
2. IF < gehe zu 20.
3. SUM q.
4. WAKT p.
5. Erzeuge U.
6. X .
7. IF U > q gehe zu 14.
8. SUM SUM – WAKT.
9. IF U > SUM gib X zurück.
10. WAKT WAKT X / .
absteigende Suche
11. X X-1.
12. IF X = = gib X zurück
13. Gehe zu 8.
14. X X+1.
15. WAKT WAKT / X.
aufsteig.
16. SUM SUM + WAKT.
Suche
17. IF U SUM OR SUM > 0.999999 OR WAKT < 0.000001 gib X zurück.
18. Gehe zu 14.
19. Gib Fehlermeldung „0“aus und STOP.
20. Gib Fehlermeldung „kein ganzzahliges “ aus und STOP.
Die Suche wird mit dem Modalwert begonnen und wird in Abhängigkeit davon, ob U > q ist
oder nicht, aufsteigend oder absteigend fortgesetzt.
Somit reduziert sich die im Mittel benötigte Anzahl von Vergleichen auf
36
E(Anzahl)
=
1 ( n 1) pn p0
n 1
(n ) p
n 1
=
1 q n pn (q p0 )
n 1
n
n p
n 1
n
(1 q )
=
1 2q q p0 2 n pn
n 1
=
1 + 2q + q - p0 - 2 q-1 = 1 + 2 p + q - p0
Algorithmus P.2 hat viele Vorteile, aber eine beschränkte Anwendung - muss
ganzzahlig sein. Wie umgehen ?
Erzeuge 2 Poisson-verteilte ZZ – eine mit Parameter ,
eine zweite mit Parameter - .
Klar- die Summe ist Poisson-verteilt.
Pseudo-Kode:
1. >> Test über Größe von <<
2. Wenn nicht ganzzahlig und <
dann Algorithmus P.1
sonst Algorithmus P.2 in Kombination mit P.1.
Versuche auf IBM 360/75 in Fortran zeigten, dass = 7 optimal war.
Algorithmus P.3:
{ r; pi , qi für i = 1 ..r; c1=e-+; c2=e-; }
1. IF 0 gehe zu 32.
2. X 0 und SUM1 c1.
3. m .
{ganzzahliger Anteil von }
4. f .
5. IF m = 0 gehe zu 24.
{Algorithmus P.1}
6. IF m < and < THEN SUM1 SUM1 * c2 und gehe zu 24.
7. SUM2 qm.
{Beginn von Algorithmus P.2}
8. WAKT2 pm.
9. Erzeuge U.
10. X m.
11. IF U > qm THEN gehe zu 18.
12. SUM2 SUM2 – WAKT2.
13. IF U > SUM2 THEN gib X zurück.
14. WAKT2 WAKT2 * X / m.
15. X X-1.
16. IF X = 0 THEN gehe zu 22.
17. Gehe zu 12.
18. X X+1.
19. WAKT2 WAKT2 * m / X.
20. SUM2 SUM2 + WAKT2.
21. IF U > SUM2 AND SUM2 < 0.999999 AND WAKT2 > 0.000001 THEN gehe zu 18.
22. IF m = THEN gib X zurück.
{Ende von Algorithmus P.2}
23. f - m.
24. WAKT1 SUM1.
{Beginn von Algorithmus P.1}
25. Y 0.
26. Erzeuge U.
37
27. IF U SUM1 OR SUM1 > 0.999999 OR WAKT1 < 0.000001 gib X+Y zurück.
28. Y Y+1.
29. WAKT1 WAKT1 * f / Y.
30. SUM1 SUM1 + WAKT1.
31. Gehe zu 27.
{Ende von Algorithmus P.1}
32. Gib Fehlermeldung aus. STOP
Der Fall „ großes “
- mit wachsendem steigt auch die Verarbeitungszeit
- X N (0,1) mit annehmbarem Fehler für 15;
- für große siehe z.B. FOX/GLYNN: Computing Poisson Probabilities in
Communications of the ACM, April 1988, v.31, No. 4, 440-445
(3) Binomialverteilung
0 1 2 ... n
Sei
X
p0 p1 p2 ... pn
mit
n
px p x (1 p) n x , x = 0, 1, ..., n;
x
0 < p < 1; n > 0.
B(n, p)-Verteilung
px (n x) p
, x 0,1,..., n 1; mit p0 (1 p) n .
(1 p) ( x 1)
Bem.: Inversion braucht im Mittel (1+n p) Vergleiche. Wie verbessern ?
Idee: Wandeln durch vorbereitende Transformation so ab, dass mittlere Anzahl Vergleiche
gleich 1 + n min(p, 1-p) wird.
Basiert auf folgender wichtigen Eigenschaft der Binomialverteilung –
Wenn Y ~ B(n, p), so gilt n-Y ~ B(n, 1-p).
Erzeugen X ~ B(n, p) in folgender Weise
für p 1 / 2 mit Y ~ B(n, p);
Y
X
n Y für p 1 / 2 mit Y ~ B(n,1 p)
Klar:
p x 1
(1 p) n , 0 p 0.5
{n; p; c
}
n
p ,0.5 p 1
1. IF p 0 OR p 1 OR c 1 OR n 0 THEN gehe zu 11.
2. IF p 0.5 THEN qp AND gehe zu 4.
3. q(1-p).
4. SUMc; B q/(1-q); C (n+1)B; WAKT0.
5. Erzeuge U.
6. IF U SUM OR SUM > 0.999999 OR WAKT < =.000001 THEN gehe zu 9.
7. X X+1; WAKT WAKT (C/X – B); SUM SUM+WAKT.
8. Gehe zu 6.
9. IF p 0.5 THEN gib X zurück.
10. X n-X AND gib X zurück.
11. Fehlermeldung AND STOP.
Algorithmus B.1:
38
Bem.: Algorithmus B.1 ist effizient für p ~ 0 oder p ~ 1. CPU-zeit ist proportional zu n.
Weitere Verfahren:
X np
a)
N (0,1)
np(1 p) n
b) px
n
p 0
np
x
x!
e
und Erzeugung mittels AR-Verfahrens
und Erzeugung mittels AR-Verfahren
c) n unabhängige Bernoulli-Versuche. Geht aber nur für kleine n, da man n glv. ZZ braucht.
Ausführungsgeschwindigkeit ist proportional zu n.
d) Bewertung verschiedener Verfahren und ein (damals) neues verfahren in
KACHITVICHYANUKUL/SCHMEISER: Bin. Rand. Variate Generation. Communic. of
the ACM, v.31, No.2, 216-222
(4) Geometrische Verteilung
0 1 2 ...
mit
p x p x (1 p ), x = 0, 1, ...; 0 < p < 1;.
Sei
X
p
p
p
...
1
2
0
EX = p/(1-p); px+1 = px p, x = 0, 1, …; p0 = 1-p; F(x) = 1 – px+1, x=0, 1, ...;
Bezeichnung
Algorithmus GE.1:
1.
2.
3.
4.
5.
6.
7.
X ~ GE(p)
{Inversion}
IF p 0 OR p 1 THEN gehe zu 7.
SUM 1 – p; WAKT SUM; X 0.
Erzeuge U.
IF U SUM OR SUM > 0.999999 OR WAKT < =.000001 THEN gib X zurück.
WAKT WAKT p; SUM SUM + WAKT; X X+1.
Gehe zu 4.
Gib Fehlermeldung aus AND STOP.
Bem.:
CPU-Zeit ist proportional zu p/(1-p), d.h., der Fall p ~ 1 fordert viel Zeit:
z.B. bei p = 0.90 im Mittel 9 Einheiten
oder bei p = 0.95 schon 19 Einheiten.
Ein Ausweg ist die Nutzung der Beziehung zwischen Exponential- und geom. Verteilung:
Sei Y ~ EXP(), so gilt P(x Y x+1) = e-x (1 – e-). Das entspricht gerade px bei p=e-.
Wenn V ~ EXP(1), so gilt X = -V/ln(p) ~ GE(p).
Beweis:
{X = x} = {x Y x+1} = {x -1/ ln(1-U) x+1} = {x ln(1-U)/ln(p) x+1}
X = ln(1-U) / ln(p) .
Dies ist „direkte“ Inversion. Das entsprechende Verfahren ist für p ~ 1 schneller. ln(1-U) kann
durch exp.-verteilte ZZ mit = 1 ersetzt werden, so dass X = -V / ln(p) .
39
Bem.:
Die Variable X kann auch angesehen werden als Anzahl Versuche bis zum ersten Misserfolg
wenn p = P(Erfolg).Dann ergibt sich der einfache
Algorithmus GE.2:
1. X -1 AND U -1.
2. REPEAT
2.1. X X+1.
2.2. Erzeuge U.
UNTIL U > p.
3. Gib X zurück.
Bem.: Im Mittel werden hierbei p/(1-p) G glv. ZZ benötigt.
2.3.2.5. Stetige Verteilungen
(1) Normalverteilung
- ist die gebräuchlichste der stetigen Verteilungen viele Verfahren entwickelt
-
X , 2 ~ N ( , ) :
2
f , 2 ( x)
1
e
2
( x )2
2 2
x2
f ( x)
-
X ~ N (0,1) :
-
X , 2 X
1 2
e , x R1
2
a) BOX-MULLER-Verfahren
(1958)
erzeugt Paare von normalverteilten ZZ; exaktes Verfahren, keine Näherung;
zur Ableitung des Verfahrens
1. Seien X, Y ~ N(0, 1) und unabhängig. Dann gilt für die gemeinsame Dichte
y2
x2
f ( x, y)
1 2
1 2
1
e
e
e
2
2
2
(x2 y2 )
2
2. Transformation zu Polarkoordinaten
x = r cos () und y = r sin ()
r2 = x2 + y2 und = arc tan (y/x)
Für die gemeinsame Dichte g(r, ) der entsprechenden ZV
R
X 2 Y2
= arc tan (Y/X)
und
gilt
r2
r 2
g (r , )
e , r 0, 0 2
2
Beweis:
40
Sei X, Y ~ f(x, y) und eine Transformation x = x(r, ) bzw. y = y(r, ) gegeben.
Aus der Funktionentheorie folgt für die gemeinsame Dichte der entsprechenden ZV R und
die Darstellung
x
x / r x /
1
g ( r , ) f ( x, y )
e
y / r y / 2
2
y2
2
r
cos( ) r sin( )
1 2
e r
sin( ) r cos( )
2
2
Interpretation:
a) Die zwei ZV R2/2 und sind unabhängige ZV !
b) ~ U[0, 2] und R2/2 ~ EXP(1) {wegen P(R2/2 < x) = P(R <
2x
=
r e
2x ) =
r2
2
dr 1 e x
0
3. Unabhängige Erzeugung von R2/2 und ist möglich:
erzeuge U1 ~ U[0, 1] und U2 ~ U[0, 1]; unabhängig; und setze
sowie = 2 U2
R 2 ln U1
4. Rücktransformation liefert 2 unabhängige normalverteilte ZZ:
X cos( 2 U 2 ) 2 ln U1
Y sin( 2 U 2 ) 2 ln U1
Bem.:
- Über Inverse keine Möglichkeit für Erzeugung einer ZZ, aber simultan zwei ZZ geht !!!
- Die ZZ sind nicht monoton in U2.
- Vorsicht in Verbindung mit einem Linearen Kongruenz-Generator – alle Paare (Xn, Yn)
fallen auf eine Spirale. Bei Rechnern mit geringer Wortbreite ist diese theoretisch
exakte Methode fern von Exaktheit in der Praxis.
folgender Algorithmus N.1, wobei zu beachten ist:
W2 – Speichervariable, d.h., speichert letzten zugewiesenen Wert zwischen den
Unterprogrammaufrufen;
A - Indikatorvariable, die anzeigt, ob eine oder zwei ZZ zu liefern sind;
Algorithmus N.1:
1.
2.
3.
4.
5.
6.
7.
8.
9.
{A – anfangs Null gesetzt; C – Konstante 2}
IF A = 1 THEN A 0 AND gib W2 zurück.
Erzeuge U aus U(0, 1).
Erzeuge V aus EXP(1).
B 2 V .
U C U.
W1 B cos(U).
W2 B sin(U).
A 1.
Gib W1 zurück.
41
Bem.: Zuerst wird also W1 zurückgegeben, danach W2. Die Prozedur braucht viel Zeit wegen
Wurzel-, Sinus- und Kosinusberechnung, ist aber einfach zu programmieren. Die Sinus- und
Kosinusberechnung kann umgangen werden durch Modifizierung des BOX-MULLERVerfahrens.
b)(BOX-MULLER-)Polar-Verfahren
Marsaglia (1962) nutzt ein Verfahren zur Erzeugung von Sinus und Kosinus, so dass die
Berechnung trigonometrischer Funktionen umgangen wird
1. Erzeuge U1, U2 von U(0, 1) und setze V1 = 2U1 – 1 sowie V2 = 2U2 – 1.
2. Wenn V12 + V22 > 1 gehe zu 1.
3. Gib zurück
W1 V1 2 ln( V12 V22 ) /(V12 V22 )
und
W2 V2 2 ln( V12 V22 ) /(V12 V22 ) .
Bem.:
Eine Ablehnung in Schritt 2 erfolgt mit W. 1 -/4 0.2146. Folglich benötigt das PolarVerfahren eine zufällige Anzahl ZZ, um ein Paar normalverteilter ZZ zu erzeugen. Versuche
haben ergeben, dass es aber bis zu 30% Zeitersparnis bringt.
Es gibt weitere Verfahren, z.B. über den Zentralen Grenzverteilungssatz.
(2) Exponentialverteilung
[0, )
X
f ( x)
mit
f(x) = e-x , > 0, x 0;
X ~ EXP()
für X* ~ EXP(1) gilt:
X* = - ln(U);
für X ~ EXP() gilt:
X = X* / ;
Es existieren noch weitere Verfahren (AR-Verfahren, Komposition).
(3) Lognormale Verteilung
(ln x ) 2
*
[0, )
X
f ( x)
manchmal sind Zwischenankunftszeiten lognormal verteilt,
mit
f ( x)
1
2 x
2
e
2 2
X ~ LN(µ, 2)
42
Algorithmus LN.1:
1.
2.
3.
4.
5.
6.
IF 0 THEN gehe zu 6.
Erzeuge Y’ aus N(0, 1).
Y µ + Y’.
X eY.
Gib X zurück.
Fehlermeldung.
Bemerkung:
a) Erzeugungszeit ist unabhängig von den Parameterwerten.
b) Manchmal sind E(X) = µX und D2X = X2 anstelle µ und 2 gegeben. Dann ist eine
vorherige Umrechnung sinnvoll. Aus
2
2
2
X e / 2 und X2 e2 (e 1) folgen
ln( X ) 1 / 2 ln(
X2 .
X2
ln(
1) .
und
1
)
X2
X2
(4) Cauchy-Verteilung
X ~ C(, ), wenn f ( x)
Inversion liefert aus U 1 / 2 1 / arctan(
, 0, x R1
[ (x )
x
)
F ( x) 1 / 2 1 / arctan(
es existieren keine Momente; ist der Median; ist ein Skalierungsfaktor
2
2
x
) , dass
X = + tan[(U – ½)] = - / tan(U)
Algorithmus C.1 :
1.
2.
3.
4.
5.
IF 0 THEN gehe zu 5.
Erzeuge U aus U(0, 1).
X - / tan(U).
Gib X zurück.
Fehlermeldung.
andere Verfahren ergeben sich aus theoretischen Eigenschaften der Cauchy-Verteilung
wie z.B.
(I) Wenn Y ~ C(0, 1), so X = Y + ~ C(, ).
(II) Sind Y, Z ~ N(0, 1) und unabhängig, so gilt X = Y/Z ~ C(0, 1).
(III) Sind Y, Z ~ U(-1/2, ½) und unabhängig und Y2 + Z2 ¼, so gilt
X = Y/Z ~ C(0, 1).
43
Algorithmus C.2 :
1.
2.
3.
4.
5.
{nutzt (I) und (II)}
IF 0 THEN gehe zu 5.
Erzeuge Y, Z aus N(0, 1).
X Y/Z + .
Gib X zurück.
Fehlermeldung.
oder
Algorithmus C.3:
{nutzt (I) und (III)}
1.
2.
3.
4.
5.
6.
7.
IF 0 THEN gehe zu 7.
Erzeuge Y, Z aus U(0, 1).
Y Y – ½; Z Z – ½.
IF Y2 + Z2 > 0.25 THEN gehe zu 2.
X Y/Z + .
Gib X zurück.
Fehlermeldung.
(5) Erlang-Verteilung
*
[0, )
X
f
(
x
)
mit
f ( x) e
x
(x) k 1
, 0, k {1,2,...}, x 0
(k 1)!
X ~ Er(, k)
(x)l
, x0
l!
l 0
k 1
F ( x) 1 e x
E(X) = k /
und
D 2 X k / 2 ( E ( X )) 2 / k
Interpretation: X = Y1 + ... + Yk mit Yl ~ EXP(); alle insgesamt unabhängig;
Algorithmus Er.1:
1.
2.
3.
4.
5.
6.
7.
8.
IF 0 OR k -k > 0 THEN gehe zu 8.
X 0.
Erzeuge V aus EXP(1).
X X + V.
IF k=1 THEN X X/ AND gib X zurück.
k k-1.
Gehe zu 3.
Fehlermeldung.
Klar: Mittlere CPU-Zeit ist proportional zu k. Können das k-fache Durchlaufen von Schritt 3
und die Berechnung von lnU etwas vereinfachen.
44
Algorithmus Er.2:
1.
2.
3.
4.
5.
6.
7.
8.
9.
IF 0 OR k -k > 0 THEN gehe zu 8.
X 0.
A 1.
Erzeuge U aus U(0, 1).
A A U.
IF k=1 THEN X -ln(A)/ AND gib X zurück.
k k-1.
Gehe zu 4.
Fehlermeldung.
(6) Weibull-Verteilung
[0, )
X
f ( x)
mit
X ~ W(, ) mit
x
f ( x) x 1e , , 0,
F ( x) 1 e
x
x0
, x0
Klar: Für = 1 ergibt sich EXP(1/), d.h., (X/) ist EXP(1) verteilt.
Algorithmus W.1:
1.
2.
3.
4.
5.
IF 0 OR 0 THEN gehe zu 5.
Erzeuge V von EXP(1).
X ( V)1/ .
Gib X zurück.
Fehlermeldung.
Bemerkung:
Schritt 3 braucht Ln- und Exponential-Berechnung. Wenn 1/ eine ganze Zahl ist, so kann die
Exponentialberechnung umgangen werden durch
Y V
und X als 1/ - faches Produkt von Y.
45