25 Zufallszahlen: Wie kommt der Zufall in den Rechner?

Ähnliche Dokumente
38. Algorithmus der Woche Zufallszahlen Wie kommt der Zufall in den Rechner?

Zufallszahlenerzeugung

15 Grundlagen der Simulation

Zufallszahlen erzeugen

Zufallszahlen in AntBrain

Lineare Kongruenzgeneratoren und Quicksort

Wahrscheinlichkeitsrechnung und Statistik

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 8. Zufallszahlen Generatoren Anwendungen

Algorithmen und Datenstrukturen SS Übungsblatt 1: Grundlagen

7 Zufallszahlen, Simulation

Wahrscheinlichkeitsrechnung und Statistik

7 Die Sätze von Fermat, Euler und Wilson

Einführung in die Informatik Turing Machines

Probabilistische Algorithmen

Modellierung- und Simulation Mathis Plewa ( )

Einführung in die Informatik Turing Machines

Zufallszahlen. Diskrete Simulation. Zufallszahlengeneratoren - Zufallszahlen

Informationssicherheit III

Fakultät für Informatik und Automatisierung, Technische Universität Ilmenau. Über Polynome mit Arithmetik modulo m.

MINT-Circle-Schülerakademie

Die Schreibweise x M bedeutet, dass das Objekt x in der Menge M liegt. Ist dies nicht der Fall, dann schreibt man

4.1 Der Blum-Blum-Shub-Generator

VI.4 Elgamal. - vorgestellt 1985 von Taher Elgamal. - nach RSA das wichtigste Public-Key Verfahren

Stochastik-Praktikum

Über Polynome mit Arithmetik modulo m

Monte-Carlo-Algorithmen für innermathematische Fragestellungen

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

2. Hausübung Algorithmen und Datenstrukturen

. Die obige Beschreibung der Laufzeit für ein bestimmtes k können wir also erweitern und erhalten die folgende Gleichung für den mittleren Fall:

Probabilistische Algorithmen Zufallszahlen - Monte Carlo - Genetische Programmierung

schreiben, wobei p und q ganze Zahlen sind.

8 Dezimalzahlen und Fehlerfortpflanzung

Formeln für Formen 4. Flächeninhalt. 301 Berechne die Höhe h von einem Rechteck, einem Parallelogramm und einem Dreieck, die jeweils den Flächeninhalt

Mathematik I für Studierende der Informatik und Wirtschaftsinformatik (Diskrete Mathematik) im Wintersemester 2015/16

6: Diskrete Wahrscheinlichkeit

Vorlesung: Simulation Mechanischer Verfahrenstechnik Seminar - Zerkleinerung

Dieses Quiz soll Ihnen helfen, Kapitel besser zu verstehen.

Blende die Achsen aus! Dein Resultat sollte in etwa wie in der folgenden Abbildung aussehen.

Zufälle gibt s, oder gibt s die nicht? Martin Köhler Science Café Hamburg, 25. Juni 2014

4 Diskrete Wahrscheinlichkeitsverteilungen

Probabilistische Primzahltests

3.2. Polarkoordinaten

Zufall oder Absicht?

Tandembogen und Irrgarten eine Einführung der irrationalen Zahlen. Irmgard Letzner, Berlin. M 1 Die rationalen Zahlen Brüche würfeln und berechnen

Grundwissen. 5. Jahrgangsstufe. Mathematik

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

Pollards Rho-Methode zur Faktorisierung

Schleifeninvarianten. Dezimal zu Binär

4 Kryptologie. Übersicht

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Wahrscheinlichkeitsrechnung und Statistik

Zufallsvariable und Wahrscheinlichkeiten mit GeoGebra

Vierte Schularbeit Mathematik Klasse 7A G am xx

Der Weg eines Betrunkenen

Numerisches Programmieren, Übungen

Programmiertechnik II

Neun Punkte auf dem Einheitskreis ( ( )). In der

8.1 Proportionalität. 8.2 Funktionen Proportionale Zuordnungen Funktion. P = x y ist der Vorrat von 6000g.

Ideen und Konzepte der Informatik

3. RAM als Rechnermodell

Näherung für π durch das Werfen von Münzen

6. Klasse. 1. Zahlen 1.1. Brüche und Bruchteile

Randomisierte Algorithmen am Beispiel Quicksort

4 Probabilistische Analyse und randomisierte Algorithmen

Pseudozufallsgeneratoren

Klausur. 18. Juli 2008, 10:15-12:15 Uhr. Name:... Matrikelnummer:... Anzahl beschriebener Blätter (ohne Aufgabenblatt):... D(p) : Y = p x X + p y

In einem mathematischen Modell wird dies beschrieben durch einen funktionalen Zusammenhang: x = f (t).

Algorithmen mit konstantem Platzbedarf: Die Klasse REG

Grundlagen der Programmierung

1 Zahlentheorie. 1.1 Kongruenzen

Stochastik - Kapitel 2

Lösungsvorschläge zur Hauptklausur Datenstrukturen

Selbsteinschätzungstest

Aufgabe S 1 (4 Punkte)

Das Problem des Handlungsreisenden

Ein Seminarbericht von Johann Basnakowski

Zufallszahlen Mathematik zum Nachbilden von Zufälligkeit SommerUni 2013 Bergische Universität Wuppertal Autor: Prof. Dr.

Selbsteinschätzungstest

6.5 Konstruktion und Zufallserzeugung von Repräsentanten

Grundlagen der Theoretischen Informatik: Übung 10

Übersicht. 3.1 Datendarstellung durch Zeichenreihen. 3.2 Syntaxdefinitionen. 3.3 Algorithmen

1 Algorithmische Grundlagen

c) Zeigen Sie, dass dieses Parallelogramm AOBC kein Rhombus und auch kein Rechteck ist.

JAHRGANGSSTUFE 5 Prozessbezogene Kompetenzen Inhaltsbezogene Kompetenzen

Vorbemerkungen. Die Programmieroberfläche des ClassPad

Tag der Mathematik 2018

Das Jahr der Mathematik

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Mathe-Camp 2017 Stochastik: Geometrische Wahrscheinlichkeiten

P 0 f (0) schneidet die Gerade mit der Gleichung x Ermitteln Sie die Koordinaten von S.

Kryptographische Protokolle

Elemente der SchulgeometrieGrundschule. Aufgabenblatt 4 Flächeninhalt

Mathematik II für Studierende der Informatik. Wirtschaftsinformatik (Analysis und lineare Algebra) im Sommersemester 2016

Simulation eines Quantencomputers

Vorlesung 3a. Der Erwartungswert. von diskreten reellwertigen Zufallsvariablen

Nr. 4: Pseudo-Zufallszahlengeneratoren

Transkript:

25 Zufallszahlen: Wie kommt der Zufall in den Rechner? Bruno Müller-Clostermann und Tim Jonischkat Universität Duisburg-Essen Algorithmen sind clevere Verfahren, die Probleme verschiedenster Art effizient lösen. Wir haben in den voranstehenden Kapiteln zahlreiche Beispiele für normale Algorithmen gesehen, wie z. B. Sortieren durch Einfügen, Tiefensuche in Graphen und kürzeste Wege. Danach könnte man vermuten, dass Algorithmen trotz aller Cleverness und Effizienz nur sture und gleich ablaufende Verfahren sind, die immer perfekte und eindeutige Lösungen liefern. Mit Zufall haben Algorithmen scheinbar nichts zu tun. Aber Halt! Bei QuickSort wird vorgeschlagen, das Pivot-Element zufällig zu wählen. Beim Verfahren One-Time- Pad werden die Schlüssel zufällig gewählt. Beim Fingerprinting -Verfahren werden Zahlen zufällig ausgewählt. Auch bei Taktik- und Strategiespielen auf dem PC werden Algorithmen verwendet, bei denen Zufall sehr erwünscht oder sogar notwendig ist. Der Rechner übernimmt hier oft die Rolle eines Gegenspielers, wobei die Aktionen von Algorithmen gesteuert werden, die sinnvolle und intelligente Verhaltensvariationen erzeugen sollen. Wir kennen das von interaktiven Computerspielen wie Siedler, Sims, SimCity, oderwarcraft. Natürlich soll der Rechner bei gleichen Situationen nicht immer auf die gleiche Art reagieren, sondern es sollen unterschiedliche Effekte und Aktionen erzeugt werden. Dadurch kommt mehr Abwechslung und Spannung ins Spiel. Eine Erzeugung von Zufallszahlen oder von zufälligen Ereignissen, z. B. durch Werfen eines Würfels (Zahlen 1, 2,..., 6) oder einer Münze (Kopf oder Zahl) ist zur Verwendung in einem programmierten Algorithmus natürlich nicht geeignet. Kann aber zufälliges Verhalten programmiert werden? Kann Zufall durch einen Algorithmus erzeugt werden? Antwort: Der Zufall wird mit Hilfe von Algorithmen nachgeahmt, die scheinbar zufällige Zahlen erzeugen. Diese Zahlen werden als Zufallszahlen oder genau genommen als Pseudo-Zufallszahlen bezeichnet. Wir betrachten hier bekannte und altbewährte Algorithmen zur Erstellung von Zufallsgeneratoren. Für Zufallszahlen gibt es zahlreiche Anwendungsbereiche; hier werden wir zwei davon kennen lernen: ein Computerspiel und die so genannte Monte-Carlo-Simulation zur Flächenberechnung.

256 Bruno Müller-Clostermann und Tim Jonischkat Ein Taktikspiel: Schnick-Schnack-Schnuck Als einfaches Beispiel für ein programmiertes Spiel können wir uns überlegen, wie ein Algorithmus für das bekannte Spiel Papier-Schere-Stein ( Schnick- Schnack-Schnuck ) aussehen könnte. Das Spiel funktioniert so: Bei jeder Spielrunde wählst du eine der drei Möglichkeiten Papier, Schere oder Stein. Dann wird der Algorithmus ausgeführt und liefert als Ergebnis ebenfalls Papier oder Schere oder Stein. Danach wird ausgewertet. Es gewinnt Papier gegen Stein, Stein gegen Schere und Schere gegen Papier. Der Sieger bekommt einen Punkt und es folgt die nächste Spielrunde. Wie soll der Algorithmus arbeiten? Soll z. B. abwechselnd Schere und Stein gewählt werden? Das wird der menschliche Spieler schnell durchschauen! Das Ergebnis des Algorithmus muss also unvorhersehbar sein, so wie das Werfen eines Würfels, das Ziehen der Lottozahlen oder der Lauf einer Roulette-Kugel. Die mechanische Kopplung eines Algorithmus mit einem Würfel oder einem Rouletterad wäre ziemlich umständlich, jedenfalls wäre eine solche Konstruktion nicht effizient und auch nicht clever. Gebraucht wird deswegen ein algorithmisches Verfahren, welches unter den Möglichkeiten Papier, Schere oder Stein eine scheinbar zufällige Wahl trifft. Solch ein Algorithmus heißt Zufallsgenerator oder auch Zufallszahlengenerator. Abb. 25.1. Drei Möglichkeiten: Papier, Schere oder Stein? (Bildnachweis: Tim Jonischkat) Abb. 25.2. Münze: Kopf oder Zahl; Würfel: 1,..., 6; Rouletterad: 0, 1,..., 36 (Bildnachweis: Lukasz Wolejko-Wolejszo, Toni Lozano)

Hilfsmittel zur Erzeugung von Zufallszahlen: Modulo-Rechnung 25 Zufallszahlen 257 Bevor wir uns mit der Berechnung von Zufallszahlen näher beschäftigen, benötigen wir das Konzept der Modulo-Rechnung. Die Modulo-Funktion (auch mod-funktion genannt) bestimmt den Rest, der bei der Divison zweier natürlicher Zahlen entsteht. Teilen wir z. B. die Zahl 27 durch 12, so bleibt als Rest die Zahl 3. Betrachten wir zwei beliebige natürliche Zahlen x und m und dividieren x durch m, dann erhalten wir einen (ganzzahligen) Quotienten a und einen Rest r. DieserRestr ist eine natürliche Zahl aus dem Intervall {0, 1,...,m-1}. Einige Beispiele zur Modulo-Rechnung 9mod8=1 16 mod 8 = 0 (9 + 6) mod 12 = 15 mod 12 = 3 (6 2 + 15) mod 12 = 27 mod 12 = 3 1143 mod 1000 = 143 Bei Division durch 1000 besteht der Rest aus den letzten 3 Stellen Veranschaulichung der Modulo-Rechnung Wir können uns die Modulo-Rechnung wie das Wandern entlang eines Kreises vorstellen, auf dem die Zahlen 0, 1, 2,..., m 1 aufgetragen sind. Um x modulo m, alsodenrestvonx bei der Division durch m zu bestimmen, starten wir bei 0 und gehen dann x Schritte im Uhrzeigersinn. Die Anzahl der Umrundungen des Kreises ist gegeben durch das Ergebnis der ganzzahligen Division a; die Zahl, bei der wir landen, ist der Rest r. Startet man z. B. eine Stundenzählung mit einer Analoguhr am 1. Januar um 0 Uhr, dann sind am 2. Januar um 19 Uhr zwar 43 Stunden vergangen, aber der Stundenzeiger zeigt auf 7 Uhr, das ist der Rest r = 43 mod 12. Eine Analoguhr zeigt die Stunden modulo 12 an, dies ist der Rest, der sich bei der Division der vergangenen Stunden durch 12 ergibt. Eine Addition entspricht einer Bewegung in Uhrzeigerrichtung. Betrachten wir im Folgenden zwei Beispiele (vgl. Abb. 25.3): Starten wir z. B. bei x = 9und addieren 6, dann bewegen wir uns 6 Schritte in Uhrzeigerrichtung und erreichen die 3, d.h., es gilt (9+6) mod 12 = 3 (Abb. 25.3, linkes Bild). Die Multiplikation einer Zahl x mit einem Faktor a kann man sich als eine Folge von Additionsschritten vorstellen; starten wir z. B. bei dem Wert x =2, und multiplizieren mit a =6, dann addieren wir 5-mal den Wert 2, machen

258 Bruno Müller-Clostermann und Tim Jonischkat Abb. 25.3. Zwei Beispiele zur Modulo-Rechnung: 9mod6=3und (6 2)mod12 = 0 also 5 Zweierschritte im Uhrzeigersinn und erreichen den Wert 0, d.h., es gilt (6 2) mod 12 = 0 (Abb. 25.3, rechtes Bild). Die Modulo-Arithmetik ist in der Informatik die natürliche Arithmetik, weil Rechner einen begrenzten (d.h. endlichen) Speicher haben und auch die Speicherzellen nur endlich groß sind und daher Zahlen nur bis zu einer bestimmten Größe gespeichert werden können. Ein Algorithmus zur Erzeugung von Pseudo-Zufallszahlen Der folgende Algorithmus erzeugt Zufallszahlen aus dem Intervall {0, 1,..., m 1}, wobei wir die gerade vorgestellte Modulo-Rechnung verwenden. Das Grundprinzip ist einfach: Wir nehmen einen Startwert x, führen eine kleine Rechnung der Form a x + c aus und berechnen den Rest r durch r =(a x + c) modm. Das Ergebnis ist die erste Zufallszahl x 1 = r. Wir verwenden x 1 als neuen Ausgangswert und berechnen die zweite Zufallszahl x 2. Dadurch ergibt sich eine Folge von Zufallszahlen x 1,x 2,x 3,... Diesen Algorithmus für einen Zufallszahlengenerator können wir auch so aufschreiben: x 1 := (a x 0 + c) modm x 2 := (a x 1 + c) modm x 3 := (a x 2 + c) modm x 4 := (a x 3 + c) modm...usw.... In allgemeiner Schreibweise erhalten wir die iterative Rechenvorschrift: x i+1 := (a x i + c) modm, i =0, 1, 2,... Um ein konkretes Beispiel für einen Zufallszahlengenerator zu erhalten, müssen wir die Parameter a, c, m und den Startwert x 0 festlegen. Mit den

25 Zufallszahlen 259 Festlegungen a =5, c =1, m =16und dem Startwert x 0 =1ergibt sich folgende Rechnung. x 1 := (5 1 +1) mod 16 = 6 x 2 := (5 6 +1) mod 16 = 15 x 3 := (5 15 +1) mod 16 = 12 x 4 := (5 12 +1) mod 16 = 13 x 5 := (5 13 +1) mod 16 = 2 x 6 := (5 2 +1) mod 16 = 11 x 7 := (5 11 +1) mod 16 = 8 x 8 := (5 8 +1) mod 16 = 9...usw.... Natürlich ist diese Zahlenfolge offensichtlich deterministisch, d.h., sie besteht bei einem gegebenen x 0 immer aus den gleichen fest definierten und reproduzierbaren Elementen. Durch die Wahl eines Startwerts x i kann der Einstiegspunkt in solch eine Zahlenfolge für jeden Ablauf des Algorithmus neu festgelegt werden. Periodisches Verhalten Rechnen wir weiter, dann fällt auf, dass wir nach 16 Schritten wieder bei dem Ausgangswert 1 ankommen, und dass jede der 16 möglichen Zahlen 0, 1, 2,...,15 genau einmal vorkommt. Berechnet man die Werte für x 16,x 17,...,x 31, wiederholt sich die Zahlenfolge. Wir sehen also ein periodisches Verhalten, hier mit der Periode 16. Wennwirm sehr groß wählen und außerdem den Faktor a und die Konstante c geschickt festlegen, dann erhalten wir größere Perioden, im Idealfall erhält man wie in diesem Beispiel die volle Periode der Länge m. In Programmiersprachen sind manchmal Zufallszahlengeneratoren fest eingebaut oder über eine Bibliothek von Funktionen verwendbar; es gibt z. B. in der Programmiersprache Java einen vollperiodigen Generator mit den Parametern a = 252149003917, c =11und m =2 48. Simulation von echten Zufallsgeneratoren Die Erzeugung von Pseudo-Zufallszahlen aus dem Bereich {0, 1,..., m 1} ist die Grundlage für viele Anwendungen. Beispiele sind die Simulation eines Münzwurfs mit den Ergebnissen Kopf oder Zahl, das Werfen eines Würfels mit den Ergebnissen 1, 2, 3, 4, 5 und 6 oder das Drehen eines Rouletterads mit den 37 Möglichkeiten 0, 1,...,36.

260 Bruno Müller-Clostermann und Tim Jonischkat Nehmen wir an, dass es bei allen Beispielen fair zugeht, d.h., die Wahrscheinlichkeit für Kopf bzw. Zahl ist jeweils 1 2, beim Würfel haben wir 1 6 und beim Roulette 1 37 als Wahrscheinlichkeiten für jeden der möglichen Werte. Zur Simulation des Münzwurfs benötigen wir also ein Verfahren zur Umwandlung einer Zufallszahl x {0, 1,...,m 1} in eine Zahl z {0, 1}, wobei0 für Kopf und 1 für Zahl stehen soll. Ein einfaches Verfahren wäre eine Rechnung, bei der kleine Zahlen auf 0 und große Zahlen auf 1 abgebildet werden, d.h. rechnerisch: 0 wenn x< m 2, 1 wenn x m 2. Beim Roulette hätten wir eine Transformation z := x mod 37 und beim Würfel z := x mod 6 + 1. Der Schnick-Schnack-Schnuck-Algorithmus Jetzt endlich zurück zu unserem Taktikspiel. Wir benötigen einen Algorithmus, der unter den drei Möglichkeiten Papier, Schere oder Stein eine Zufallsauswahl trifft. Zu diesem Zweck verwenden wir einen Zufallszahlengenerator, mit dem wir bei jeder Spielrunde eine Zufallszahl x erzeugen und daraus durch z := x mod 3 eine neue Zahl bestimmen, die nur die drei Werte 0, 1 und 2 annehmen kann. Abhängig vom Wert von z wählt der Algorithmus Papier (0), Schere (1) oder Stein (2). Dieser Algorithmus ist in einem kleinen Programm implementiert, dem Schnick-Schnack-Schnuck-Applet 1. Es stehen vier Zufallszahlengeneratoren zur Auswahl, wobei der erste durch den extremen Spezialfall einer fest vorgegebenen Folge der Zahlen 0, 1 und 2 definiert ist. 1. Deterministisch: Die feste Zahlenfolge 2, 0, 1, 1, 0, 0, 0, 2, 1, 0, 2 2. ZZG-016: a =5, c =1, m =16und Startwert x 0 =1(Periode 16) 3. ZZG-100: a =81, c =1, m = 100, Startwert x 0 =10(Periode 100) 4. Java-Generator: Der in der Programmiersprache Java vorgegebene Generator java.util.random Der Algorithmus naechstezufallszahl rechnet mit der Eingabe x und den Konstanten a, c und m. Dermitreturn zurückgegebene Wert ist die auf die parametrisierte Zahl in der jeweiligen Zahlenreihe folgende Zufallszahl im Intervall {0, 1,...,m 1}. 1 procedure naechstezufallszahl (x) 2 begin 3 return (a x + c) modm 4 end 1 http://www-i1.informatik.rwth-aachen.de/~algorithmus/algorithmen/ algo38/applet/ (bitte Java aktivieren)

25 Zufallszahlen 261 Abb. 25.4. Schere schneidet Papier (links), Stein wird von Papier eingewickelt (rechts) Abb. 25.5. Algorithmus der Maschine In diesem Beispiel wird die Funktion naechstezufallszahl n-mal aufgerufen; der Startwert wird auf den Wert 1 gesetzt. Bei jeder Wiederholung wird die ermittelte Zufallszahl und zusätzlich ihr Wert modulo 3 ausgegeben. 1 procedure zufallszahlenbeispiel (n) 2 begin 3 a := 5; c := 1; m := 16; 4 x := 1; 5 for i := 1 to n do 6 x := naechstezufallszahl(x); 7 print(x); 8 print(x mod 3) 9 endfor 10 end Als Zufallszahlen erhalten wir x i :6, 15, 12, 13, 2, 11, 8, 9, 14, 7,... x i modulo 3:0, 0, 0, 1, 2, 2, 2, 1, 2, 1,... Die Bilder zeigen einen möglichen Spielverlauf. Mensch und Maschine wählen gleichzeitig Schere, Stein oder Papier. Tabelle 25.1 zeigt den Spielstand und den Ablauf des Algorithmus. In Abb. 25.5 kann man die Arbeit des ausgewählten Zufallsgenerators beobachten (ausgewählt ist hier ZZG-016). Der aktuelle Rechenschritt ist her-

262 Bruno Müller-Clostermann und Tim Jonischkat Tabelle 25.1. Spielstand nach drei Runden: Mensch Maschine 2:1 vorgehoben; aber auch die zukünftigen Werte sind bereits sichtbar! Man kann also feststellen, was die Maschine als nächstes tun wird (ein kleiner Cheat!). Monte-Carlo-Simulation: Flächenberechnung mit Zufallsregen Ein wichtiger Anwendungsbereich von Zufallszahlen ist die so genannte Monte-Carlo-Simulation, die nach dem Spielcasino in Monte Carlo benannt ist. Monte-Carlo-Simulation kann z. B. verwendet werden, um eine Flächenbestimmung von unregelmäßigen geometrischen Figuren durch Zufallsregen durchzuführen. Von Zufallsregen spricht man, wenn viele zweidimensionale Zufallspunkte (x, y) auf eine Ebene treffen. Ein Zufallspunkt in der Ebene wird durch ein (x, y)-paar von zufälligen Koordinatenwerten bestimmt, wobei der x-wert und der y-wert jeweils durch eine Zufallszahl aus dem Intervall [0, 1] festgelegt werden. Zu diesem Zweck werden aus dem Intervall {0, 1,...,m 1} gezogene Zufallszahlen so transformiert, dass reellwertige Zufallszahlen zwischen 0 und 1 entstehen. Dies geschieht durch die Transformation x := x/(m 1). Legt man eine beliebige Fläche in ein Quadrat mit Kantenlänge 1 (wie in Abb. 25.6) und wirft Zufallspunkte in dieses Quadrat, dann fällt ein Teil der Punkte auf diese Fläche und der Rest daneben. Eine Schätzung für den Flächeninhalt erhält man durch die Berechnung des Quotienten F = Trefferanzahl/Punkteanzahl. Um eine gute Schätzung zu bekommen, muss man Millionen oder sogar Milliarden von Punkten werfen. Eine Durchführung dieses Algorithmus von Hand wird man deswegen niemandem zumuten, aber für einen programmierten Algorithmus auf einem Rechner ist es natürlich kein Problem, einmal schnell 1 Million Zufallspunkte in ein Quadrat zu werfen!

25 Zufallszahlen 263 Abb. 25.6. Zwei Zufallspunkte (x 1,y 1) und (x 2,y 2) (links), Zufallsregen: Zähle die Treffer auf der Fläche (rechts) Als Beispiel zur praktischen Verwendung der Monte-Carlo-Simulation betrachten wir ein Verfahren zur Bestimmung der berühmten Kreiszahl π = 3,14159... Eine näherungsweise Bestimmung der Zahl kann durch das Werfen von zufälligen Punkten (x, y) in den Einheitskreis durchgeführt werden. Wir betrachten ein Quadrat mit Seitenlänge 1 (Fläche = 1),wobeiim1.Qua- dranten ein Viertelkreis eingebettet ist. Da der Kreis den Radius r =1hat, ist seine Fläche F = r 2 π = π und die Fläche des Viertelkreises ist π 4. Sei T die Zahl der Treffer im Viertelkreis und N die Gesamtzahl der Würfe in dem Quadrat, dann können wir π näherungsweise berechnen durch π 4 T N. In dem Bild sind 130 Zufallspunkte dargestellt, davon fallen 102 in den Viertelkreis, d.h., wir rechnen π 4 102 130 3,1384. Dasistnochkein Abb. 25.7. Wie viele Zufallspunkte fallen in den Kreis?

264 Bruno Müller-Clostermann und Tim Jonischkat sehr guter Wert für π, aber mit 100000 oder 1 Million oder sogar 1 Milliarde Punkten sollte das Ergebnis wesentlich genauer werden. Dieses rein mit Worten beschriebene Verfahren ist in folgendem Algorithmus Zufallsregen zusammengefasst. Der Algorithmus Zufallsregen berechnet die Kreiszahl π. Hierbei setzen wir ein Einheitsquadrat (Kantenlänge = 1) voraus, welches den Flächeninhalt 1 besitzt. 1 procedure Zufallsregen (n) 2 begin 3 a := 1103515245; c := 12345; m := 4294967296; # Parameter 4 z := 1; treffer := 0; # Startwerte 5 for i := 1 to n do 6 z := (a z + c) modm; 7 x := z/(m 1); 8 z := (a z + c) modm; 9 y := z/(m 1); 10 if inflaeche(x,y) then 11 treffer := treffer + 1 12 endif 13 endfor 14 return 4 treffer/n 15 end Anmerkung: Die Funktion inflaeche prüft, ob sich der Punkt mit den als Parameter übergebenen Koordinaten (x, y) in der Fläche befindet. Da es sich um eine Kreisfläche handelt, wird in der Funktion inflaeche die Kreisgleichung x 2 + y 2 = r 2 verwendet. Ein Punkt (x, y) liegt genau dann im Einheitskreis, wenn gilt: x 2 + y 2 1. Es gibt zahlreiche Anwendungen der Monte-Carlo-Simulation in den Ingenieur- und Naturwissenschaften. In der Informatik hat sich aus den Techniken zur Monte-Carlo-Simulation das Gebiet der so genannten zufallsgesteuerten Algorithmen entwickelt, die für manche Aufgabenstellungen wesentlich schneller und auch einfacher sind als konventionelle Algorithmen. Zum Weiterlesen 1. Das hier vorgestellte Verfahren zur Berechnung von Pseudo-Zufallszahlen unter Verwendung der Modulo-Operation ist auch grundlegend für viele andere Bereiche der Informatik, z. B. für die in diesem Buch behandelten Techniken Public-Key-Kryptographie (Kap. 16), Fingerprinting (Kap. 19) und One- Time-Pad (Kap. 15). 2. Mehr zum Thema Zufallszahlen findet man bei Wikipedia unter: http://de.wikipedia.org/wiki/pseudozufall

25 Zufallszahlen 265 3. Eine Einführung in Methoden zum Entwurf von zufallsgesteuerten Systemen für Einsteiger findet sich in dem Lehrbuch Randomisierte Algorithmen von J. Hromkovič. 2 4. Pseudo-Zufallszahlen sind auch von großer Bedeutung für die stochastische Simulation von komplexen Informatiksystemen, wie z. B. bei der Planung von Rechner- und Datennetzen im Umfeld von Internet, WorldWideWeb und Mobilkommunikation. 5. Weitere Anwendungsmöglichkeiten für die Verwendung von (Pseudo-)Zufallszahlen finden sich im Bereich der genetischen Algorithmen und evolutionären Systeme. Als Einstieg in diese so genannten naturimitierenden Modellierungsparadigmen empfehlen wir das in diesem Buch beschriebene Verfahren des Simulated Annealing (Kap. 43). 2 J. Hromkovič: Randomisierte Algorithmen Methoden zum Entwurf von zufallsgesteuerten Systemen für Einsteiger. Teubner, StuttgartLeipzig Wiesbaden, 2004.