WikiDer > Kongruenzgenerator

Congruentiegenerator

EIN Kongruenzgenerator ist ein Algorithmus, der Pseudozufallszahlen erzeugt also Zahlenfolgen, die deterministisch erzeugt werden und somit nicht wirklich zufällig sind, aber viele Eigenschaften von zufällige Zahlen haben. Kongruenzgeneratoren sind die bekanntesten und am häufigsten verwendeten Pseudozufallszahlengeneratoren.

Ein Kongruenzgenerator wird durch folgende Parameter bestimmt:

  • die Anzahl der Zustandswerte
  • der Modul
  • die Multiplikatoren
  • der Anstieg

und der Algorithmus, mit dem eine neu generierte Zahl für bis zum wiederkehrende Beziehung:

.

Darin sind die Startwerte.

Reelle Zufallszahlen im Intervall [0, 1] erhält man als , unter der Vorraussetzung, dass groß genug, um eine ausreichend genaue Unterteilung zu geben.

Der Zustand des Generators für die Produktion von ist durch die Startwerte gegeben. Dieser Zustand setzt (für gegeben , , , ) alle nachfolgenden Zufallszahlen, da die nächste Zufallszahl und der nächste Zustand durch den aktuellen Zustand bestimmt werden. Es gibt möglichen Zuständen, also nach Maximum Schritte werden in einem vorherigen Zustand wiederholt. Der Kongruenzgenerator erzeugt also eine periodische Zahlenfolge, deren Periodenlänge viel kleiner als ist könnte sein. Im Extremfall ist die Länge 1 und der Generator gibt immer die gleiche "Zufallszahl" aus. Bei der Wahl der Parameter ist daher unter anderem auf einen ausreichend langen Zeitraum zu achten.

Lineare Kongruenz

wenn , man spricht von a linearer Kongruenzgenerator. Der Algorithmus ist:

.

Ist auch noch , So

,

dann gibt es a multiplikativer Kongruenzgenerator. Die multiplikative Kongruenz wird auch Lehmer-Kongruenz genannt, nach D. H. Lehmer der diesen Algorithmus 1949 eingeführt hat.

Fibonacci-Generator

Ein Fibonacci-Generator ist ein Kongruenzgenerator mit , und , und besteht aus folgenden Komponenten:

  • Modul
  • Startwerte

Die folgende Funktion generiert die Pseudozufallszahlen:

.

Ein Merkmal ist, dass die Fälle beziehungsweise nie vorkommen. Fibonacci-Generatoren eignen sich daher nicht als Pseudo-Zufallsgeneratoren. Dies gilt insbesondere für mathematische Objekte, die die Erzeugung von mehr als zwei Zufallszahlen erfordern. Versucht man beispielsweise eine beliebige Punktwolke in einem Würfel zu erzeugen, würden alle Punkte auf zwei Flächen liegen.

Verzögerter Fibonacci-Generator

Das Prinzip des Fibonacci-Generators lässt sich nicht auf die letzten beiden, sondern auf Werte weiter hinten verallgemeinern um eine neue Zufallszahl zu generieren. Dies führt zu einem verzögerten ('verzögerten') Fibonacci-Generator:

mit den Startwerten .

Dann ist und und der andere sind null. Hiermit, in der Regel gleich gewählt und und so gewählt werden, dass das Polynom in : ein Primitiv Polynom Modul 2. Die Periode des Generators ist dann minimal .

ist ein primitives Polynom modulo 2 genau dann, wenn das ist. Also statt auch immer Berechnung.

Die folgende Tabelle gibt einige Werte für und die diese Bedingung erfüllen:

ein231557398100135258607321723209
B1132425273722832735769739

Dieser Generator wird auch in der Praxis verwendet. Es gibt jedoch nicht immer völlig zufällige Zahlen. Das Problem des gewöhnlichen Fibonacci-Generators hat sich lediglich verschoben; Komm jetzt oder niemals zuvor. Es gibt noch mehr Mängel.

Als Lösung wurde vorgeschlagen, immer nur zu verwenden fortlaufende Nummern, dann die nächste bis um Zahlen ablehnen. Dies funktioniert gut, führt aber zu einer 5- bis 11-fach höheren Rechenzeit. Der von Donald Knuth vorgeschlagene Raarray-Generator funktioniert auf diese Weise. Hier ist und , und von 1009 fortlaufenden Nummern wird nur ein Block mit 100 Nummern verwendet.

Für einen Zeitraum von ist nur das niederwertigste Bit im Zustandswert wichtig, das heißt, es ist wichtig, ob das Bit gerade oder ungerade ist. Es ist möglich, die Bits höherer Ordnung nach Bedarf zu ändern, um die Qualität der resultierenden Zufallszahlen zu verbessern. Beispielsweise:

Weitere Verallgemeinerung

Man kann den verzögerten Fibonacci-Generator weiter verallgemeinern, indem man mehr als zwei Zustandswerte verarbeitet:

.

Hier ist das größte Element in . Für einen Zeitraum von mindestens um zu garantieren, auch hier das entsprechende Polynom oder äquivalent das Polynom sei ein primitives Polynom modulo 2 (mit geradem Modul ). Ein so gebauter Generator mit erzeugt im Allgemeinen bessere Zufallszahlen als mit , aber das geht auch zu Lasten der Rechenzeit.

Mit weiterer Verallgemeinerung für ein gegebenes erhöhen die Länge der Periode und verbessern wahrscheinlich auch die Qualität der Zufallszahlen. ist ein Primfaktor von . Für die Rechenregel

wird die , mit , kann so gewählt werden, dass das Polynom in

ein primitives Polynom modulo ist. Dann ist die Periode mindestens .

Der vorherige Generator folgt daraus mit und als Sonderfall und liefert einen multiplikativen Kongruenzgenerator mit Periode .

Das Polynom ist ein primitives Polynom modulo p, wenn

und

Treffen:

  • ist ein primitives Element modulo
  • das Polynom ist kongruent zu (modulo )
  • für alle Primfaktoren von ist der Grad des Polynoms positiv.

Dazu wird Polynomrechnung verwendet und modulo mit den Koeffizienten berechnet (sie sind Elemente der Quotientenring).