Artikel

1.3: 03 Zufallsvariablen - Mathematik


1.3: 03 Zufallsvariablen - Mathematik

18.4: Große Erwartungen

  • Beigetragen von Eric Lehman, F. Thomson Leighton und Alberty R. Meyer
  • Google und das Massachusetts Institute of Technology
  • Quelle: MIT OpenCourseWare

Das Erwartung oder erwarteter Wert einer Zufallsvariablen ist eine einzelne Zahl, die viel über das Verhalten der Variablen aussagt. Der Erwartungswert einer Zufallsvariablen wird auch als sein . bezeichnet bedeuten oder Durchschnitt. Das erste, was Sie beispielsweise wissen möchten, wenn Sie Ihre Note in einer Prüfung sehen, ist die durchschnittliche Punktzahl der Klasse. Es stellt sich heraus, dass diese durchschnittliche Punktzahl genau der Erwartung der Zufallsvariablen entspricht, die der Punktzahl eines zufälligen Schülers entspricht.

Genauer gesagt ist die Erwartung einer Zufallsvariablen ihr „durchschnittlicher&rdquo-Wert, wenn jeder Wert nach seiner Wahrscheinlichkeit gewichtet wird. Formal wird der Erwartungswert einer Zufallsvariablen wie folgt definiert:

Wenn (R) eine Zufallsvariable ist, die auf einem Stichprobenraum (S) definiert ist, dann ist der Erwartungswert von (R)

Lassen Sie uns einige Beispiele durcharbeiten.


Indikator-Zufallsvariablen

Ein Indikator Zufallsvariable ist eine Zufallsvariable, die jedes Ergebnis entweder auf 0 oder 1 abbildet. Indikator-Zufallsvariablen werden auch genannt Bernoulli-Variablen. Die Zufallsvariable (M) ist ein Beispiel. Wenn alle drei Münzen übereinstimmen, dann (M = 1), ansonsten (M = 0).

Indikator-Zufallsvariablen stehen in engem Zusammenhang mit Ereignissen. Insbesondere unterteilt eine Zufallsvariable des Indikators den Stichprobenraum in die Ergebnisse, die auf 1 abgebildet sind, und die Ergebnisse, die auf 0 abgebildet sind. Der Indikator (M) unterteilt den Stichprobenraum beispielsweise wie folgt in zwei Blöcke:

Auf die gleiche Weise teilt ein Ereignis (E) den Probenraum in die Ergebnisse in (E) und die nicht in (E) ein. (E) ist also natürlicherweise mit einer Indikator-Zufallsvariablen (I_E) verbunden, wobei (I_E(omega) = 1) für die Ergebnisse (omega in E) und (I_E( omega) = 0) für Ergebnisse (omega otin E). Somit ist (M = I_E) wobei (E) das Ereignis ist, dass alle drei Münzen übereinstimmen.


Sonderband: Mathematische Modellierung und Numerische Methoden im Finanzwesen

Chuan-Hsiang Han , Jean-Pierre Fouque , in Handbook of Numerical Analysis , 2009

3.1 Absicherung von Martingalen

Es ist bekannt, dass es keine geschlossene Lösung für den amerikanischen Optionspreis gibt P(t,x) gegeben durch (3.1) . Rogers [2002] führte den entsprechenden europäischen Put-Optionspreis ein, der mit bezeichnet wird PE und konstruierte das Absicherungs-Martingal e -rt PE(t, ST) - PE(0, S0). Diese Wahl ist nützlich, weil PE lässt eine geschlossene Lösung zu, die als Black-Scholes-Formel für Put-Optionen bekannt ist. Stattdessen schreiben wir eine äquivalente integrale Darstellung dieses Hedging-Martingals als

erhalten durch eine Anwendung von Ito's Lemma auf e -rt PE(t, ST). Der Hauptvorteil von (3.3) besteht darin, dass jeder ungefähre amerikanische Optionspreis P ∼ ein ganzzahliges Martingal darstellen kann M( P ∼ T) zusätzlich zu PE, ohne das zu verlangen e -rt P ∼ T ein Martingal sein. Algorithmen zur Berechnung der High- und Low-Biased-Schätzungen für die amerikanische Put-Option basieren auf Proposition 2.1. Der Monte-Carlo-Schätzer für den hochverzerrten Schätzer ist

und für den niedrig verzerrten Schätzer ist

wobei die Näherung P ∼ leicht zu berechnen ist, zum Beispiel der europäische Optionspreis option PE oder die quadratische Näherung PBAW, eingeführt von Barone-Adesi und Whaley [1987]. Die Gesamtzahl der i.i.d. Trajektorien werden bezeichnet durch n, das hochgestellte (ich) bezeichnet die ich-te Replikation, und ing bezeichnet eine Stoppregel, erhalten durch die Methode der kleinsten Quadrate Longstaff und Schwartz [2001] .

Basierend auf der Lösung einer elliptischen Variationsungleichung, die in Gl. (A.1) im Anhang die Näherung PDie BAW gibt folgende analytische Lösung zu

wo PE(t,x) bezeichnet den europäischen Put-Optionspreis des Gegenstücks und die ungefähre freie Grenze x * (T) löst eine nichtlineare algebraische Gleichung

In Lemma A.1 im Anhang wird gezeigt, dass der ermäßigte ungefähre Preis e -rt PBAW ist kein Martingal oder Supermartingal. Sie kann in Proposition 2.1 nicht verwendet werden, um amerikanische Optionspreise zu schätzen. Das stochastische Integral m(PBAW T) ist garantiert ein Martingal. Die Martingaleigenschaft stochastischer Integrale bietet nicht nur eine größere Klasse für Berechnungszwecke, sondern ist auch eine klare Demonstration der Delta-Hedging-Strategie, die im dynamischen Handel verwendet wird.

Wir sind jetzt bereit, diese Hedging-Martingale zu vergleichen m(PE T)> und M(PBAW T) bei der Schätzung hoch- und niedrig verzerrter Lösungen für amerikanische Optionspreise. Parameter eindimensionaler amerikanischer Put-Optionen sind wie folgt: der Ausübungspreis K = 100, der risikofreie Zinssatz R = 6%, Laufzeit T = 0,5 Jahre und die Volatilität σ = 0,4 ( Tabelle 3.1 ). Der anfängliche Aktienkurs S0 variiert von 80 bis 120. Wir führen n = 5000 Abtastpfade, und für jede Trajektorie verwenden wir den diskretisierten Zeitschritt ΔT = 0,001. Die wahren Preise in Spalte 5 in Tabelle 3.1 sind identisch mit dem Beispiel in Rogers [2002] .

Tabelle 3.1. Numerische Ergebnisse I. Vergleiche von hoch verzerrten Preisschätzungen (Spalten 6–8), niedrig verzerrten Preisschätzungen (Spalten 2–4) und tatsächlichen amerikanischen Optionspreisen (Spalte 5). Zwei Hedging Martingale mT(PE) und mT(PBAW) werden aus dem europäischen Gegenwert-Optionspreis konstruiert: PE und die quadratische Näherung PBAW, beziehungsweise. Modellparameter werden wie bei Rogers [2002] gewählt: K = 100, R = 0.06, T = 0,5 und σ = 0,4, mit verschiedenen anfänglichen Aktienkursen von 80 bis 120. Monte-Carlo-Simulationen werden unter der Stichprobengröße implementiert n = 5000 und 500 diskrete Zeitschritte entsprechend ΔT= .001

S0LSMmT(PE)mT(PBAW)Wahrer PreismT(PBAW)mT(PE)SMT
8021.522 (0.1507)21.513 (0.0131)21.592 (0.0108)21.60621.754 (0.0097)21.947 (0.0107)22.637 (0.0092)
8517.907 (0.1631)17.952 (0.0138)17.999 (0.0125)18.03718.203 (0.0121)18.325 (0.0128)18.793 (0.0093)
9014.817 (0.1706)14.874 (0.0155)14.845 (0.0139)14.91915.073 (0.0129)15.132 (0.0143)15.482 (0.0085)
9512.141 (0.1640)12.163 (0.0153)12.202 (0.0155)12.23112.371 (0.0138)12.391 (0.0148)12.649 (0.0075)
1009.993 (0.1585)9.868 (0.0158)9.880 (0.0150)9.94610.090 (0.0144)10.147 (0.0153)10.270 (0.0066)
1058.214 (0.1497)8.023 (0.0166)8.026 (0.0154)8.0288.140 (0.0146)8.181 (0.0151)8.275 (0.0056)
1106.205 (0.1304)6.355 (0.0160)6.433 (0.0153)6.4356.564 (0.0143)6.612 (0.0149)6.625 (0.0048)
1155.126 (0.1219)5.085 (0.0157)5.055 (0.0150)5.1275.256 (0.0135)5.269 (0.0141)5.280 (0.0041)
1204.230 (0.1162)4.029 (0.0147)4.039 (0.0143)4.0614.184 (0.0128)4.198 (0.0134)4.180 (0.0033)

Zwischen der zweiten Spalte und der vierten Spalte sind Schätzungen mit geringer Verzerrung und deren Standardfehler für amerikanische Optionspreise dargestellt. Die Ergebnisse in Spalte 2 werden aus dem Algorithmus der kleinsten Quadrate von Longstaff und Schwartz [2001] berechnet, wobei der Preisschätzer keine Hedging-Martingale enthält. Die Spalten 3 und 4 veranschaulichen die Auswirkungen der Martingalkontrollen m(PE T) und m(PBAW T) bzw. nach der Methode der kleinsten Quadrate. Wir machen folgende Beobachtungen.

Erstens sind diese Kontrollvariablen gegenüber Kleinste-Quadrate-Schätzern unverzerrt, aber die Standardfehler bei Martingalen sind im Vergleich zu den Kleinste-Quadrate-Schätzern stark reduziert. Die Varianzreduktionsverhältnisse liegen ungefähr zwischen 60 und 200. Da sich die gering verzerrten Schätzungen verhalten sollten, sind die Stichprobenmittelwerte in Spalte 2, Spalte 4 alle kleiner als die in Spalte 5 angegebenen wahren Preise.

Zweitens, der Algorithmus mit m(PBAW T) verbessert die Präzision der gering verzerrten Schätzungen aus m(PE T) als Varianz erzeugt von m(PBAW T) ist kleiner als m(PE T) ausser wenn S0 = 95. Die Spalten 6 und 7 zeigen stark verzerrte Schätzungen basierend auf dem Algorithmus mit den Martingalen m(PBAW T) und m(PE T), beziehungsweise. Verglichen mit dem wahren Preis in Spalte 5 sind die Stichprobenmittelwerte dieser Martingale alle stark verzerrt, und die Preisdifferenz in Spalte 6 ist kleiner als in Spalte 7. Darüber hinaus sind die Standardfehler in Spalte 6 alle kleiner als in Spalte 7. Dies rechtfertigt die asymmetrische Eigenschaft zwischen dem Bias und der Varianz in Theorem 2.2, nämlich eine kleine Varianz impliziert einen kleinen Bias.

Wir geben keine mittlere absolute Abweichung (MAD) von dem in Rogers [2002] definierten Mittelwert an, da wir jetzt sowohl hoch- als auch niedrig verzerrte Preisschätzungen haben, zwischen denen der tatsächliche Optionspreis dazwischen liegt. Durch Kreuzvergleich zwischen den Spalten 3–7 und den Spalten 4–6 finden wir, dass PBAW liefert eine bessere Näherung als PE wie PBAW erzeugt kleinere Varianzen als PE tut.


Inhalt

Software bearbeiten

Der Mersenne Twister wird als Standard-PRNG von der folgenden Software verwendet:

  • Programmiersprachen: Dyalog APL, [4]IDL, [5]R, [6]Ruby, [7]Free Pascal, [8]PHP, [9]Python (wird auch in NumPy verwendet, während dort standardmäßig auf PCG64 geändert wurde) von 1,17 [10] ), [11][12][13]Julia (bis zu 1,6 1,7 Änderungen zu Xoroshiro), [14]CMU Common Lisp, [15]Einbettbare Common Lisp, [16]Steel Bank Common Lisp, [ 17] Bibliotheken und Software: GLib, [18]GNU Multiple Precision Arithmetic Library, [19]GNU Octave, [20]GNU Scientific Library, [21]
  • Sonstiges: Microsoft Excel, [22]GAUSS, [23]gretl, [24]Stata. [25]SageMath, [26]Scilab, [27]Ahorn, [28]MATLAB, [29]

Es ist auch in Apache Commons, [30] in Standard-C++ (seit C++11), [31] [32] und in Mathematica verfügbar. [33] Add-on-Implementierungen werden in vielen Programmbibliotheken bereitgestellt, einschließlich der Boost C++ Libraries, [34] der CUDA Library, [35] und der NAG Numerical Library. [36]

Der Mersenne Twister ist einer von zwei PRNGs in SPSS: Der andere Generator wird nur aus Kompatibilitätsgründen mit älteren Programmen beibehalten, und der Mersenne Twister wird als "zuverlässiger" bezeichnet. [37] Der Mersenne Twister ist in ähnlicher Weise einer der PRNGs in SAS: Die anderen Generatoren sind älter und veraltet. [38] Der Mersenne Twister ist der Standard-PRNG in Stata, der andere ist KISS, um die Kompatibilität mit älteren Versionen von Stata zu gewährleisten. [39]

    und patentfrei für alle Varianten außer CryptMT.
  • Besteht zahlreiche Tests auf statistische Zufälligkeit, darunter die Diehard-Tests und die meisten, aber nicht alle TestU01-Tests. [40]
  • Ein sehr langer Zeitraum von 2 19937 − 1. Beachten Sie, dass ein langer Zeitraum zwar keine Qualitätsgarantie bei einem Zufallszahlengenerator ist, kurze Zeiträume, wie die in vielen älteren Softwarepaketen üblichen 2 32, jedoch problematisch sein können. [41] bis 32-Bit-Genauigkeit für alle 1 ≤ k ≤ 623 (für eine Definition von k-verteilt, siehe unten)
  • Implementierungen erzeugen im Allgemeinen Zufallszahlen schneller als echte Zufallsmethoden. Eine Studie ergab, dass der Mersenne Twister 64-Bit-Gleitkomma-Zufallszahlen etwa zwanzigmal schneller erzeugt als der hardwareimplementierte, prozessorbasierte RDRAND-Befehlssatz. [42]
  • Relativ großer Zustandspuffer von 2,5 KiB, es sei denn, die TinyMT-Variante (siehe unten) wird verwendet.
  • Mittelmäßiger Durchsatz nach modernen Standards, es sei denn, die SFMT-Variante (siehe unten) wird verwendet. [43]
  • Zeigt zwei klare Fehler (lineare Komplexität) in Crush und BigCrush in der TestU01-Suite. Der Test basiert wie Mersenne Twister auf einem F2-Algebra. [40] Es gibt eine Reihe anderer Generatoren, die alle Tests bestehen (und zahlreiche Generatoren, die schlecht ausfallen) [Klärung nötig] .
  • Mehrere Instanzen, die sich nur im Startwert (aber nicht in anderen Parametern) unterscheiden, sind im Allgemeinen nicht für Monte-Carlo-Simulationen geeignet, die unabhängige Zufallszahlengeneratoren erfordern, obwohl es ein Verfahren zum Auswählen mehrerer Sätze von Parameterwerten gibt. [44][45]
  • Schlechte Diffusion: Es kann lange dauern, bis eine Ausgabe generiert wird, die Zufallstests besteht, wenn der Anfangszustand stark nicht zufällig ist – insbesondere wenn der Anfangszustand viele Nullen hat. Dies hat zur Folge, dass zwei Instanzen des Generators, die mit nahezu gleichen Anfangszuständen gestartet wurden, in der Regel für viele Iterationen nahezu die gleiche Sequenz ausgeben, bevor sie schließlich divergieren. Das Update 2002 des MT-Algorithmus hat die Initialisierung verbessert, so dass ein Beginn mit einem solchen Zustand sehr unwahrscheinlich ist. [46] Noch besser soll die GPU-Version (MTGP) sein. [47]
  • Enthält Teilsequenzen mit mehr Nullen als Einsen. Dies trägt zu der schlechten Diffusionseigenschaft bei und erschwert die Wiederherstellung aus Viel-Null-Zuständen.
  • Ist kryptographisch nicht sicher, es sei denn, die CryptMT-Variante (siehe unten) wird verwendet. Der Grund dafür ist, dass die Beobachtung einer ausreichenden Anzahl von Iterationen (624 im Fall von MT19937, da dies die Größe des Zustandsvektors ist, aus dem zukünftige Iterationen erzeugt werden) es ermöglicht, alle zukünftigen Iterationen vorherzusagen.

Ein alternativer Generator, WELL ("Well Equidistributed Long-period Linear"), bietet eine schnellere Erholung und gleiche Zufälligkeit und fast gleiche Geschwindigkeit. [48]

Die Xorshift-Generatoren und -Varianten von Marsaglia sind die schnellsten in der Klasse der LFSRs. [49]

64-Bit-MELGs ("64-Bit Maximally Equidistributed F2-Lineargeneratoren mit Mersenne Prime Period") sind hinsichtlich der k-Verteilungseigenschaften. [50]

Die ACORN-Familie (veröffentlicht 1989) ist eine andere k-verteiltes PRNG, das eine ähnliche Rechengeschwindigkeit wie MT zeigt und bessere statistische Eigenschaften aufweist, da es alle aktuellen (2019) TestU01-Kriterien erfüllt, wenn es mit geeigneten Parametern verwendet wird, kann ACORN eine beliebig lange Periode und Präzision haben.

Die PCG-Familie ist ein modernerer Langzeitgenerator mit besserer Cache-Lokalität und weniger nachweisbarem Bias mit modernen Analysemethoden. [51]

Eine Pseudozufallsfolge xich von w-Bit-Ganzzahlen der Periode P wird gesagt, dass k-verteilt zu v-Bit-Genauigkeit, wenn Folgendes gilt.

Für ein w-Bit Wortlänge erzeugt der Mersenne Twister ganze Zahlen im Bereich [0, 2 w −1].

Der Mersenne-Twister-Algorithmus basiert auf einer linearen Rekursion der Matrix über einem endlichen binären Körper F2. Der Algorithmus ist ein verdrilltes verallgemeinertes Rückkopplungs-Schieberegister [52] (twisted GFSR oder TGFSR) der rationalen Normalform (TGFSR(R)) mit Zustandsbitreflexion und -temperierung. Die Grundidee besteht darin, eine Reihe zu definieren xich durch eine einfache Rekursionsbeziehung und geben dann Zahlen der Form xichT, wo T ist ein invertierbares F2-Matrix, die als Temperierungsmatrix bezeichnet wird.

Der allgemeine Algorithmus zeichnet sich durch folgende Größen aus (einige dieser Erklärungen machen erst Sinn, wenn man den Rest des Algorithmus gelesen hat):

  • w: Wortgröße (in Anzahl von Bits)
  • n: Rezidivgrad
  • m: mittleres Wort, ein Offset, der in der Wiederholungsbeziehung verwendet wird, die die Reihe definiert x, 1 ≤ m < n
  • R: Trennstelle eines Wortes oder die Anzahl der Bits der unteren Bitmaske, 0 ≤ Rw − 1
  • ein: Koeffizienten der rationalen Normalform-Twist-Matrix
  • B, C: TGFSR(R)-Temperierbitmasken
  • S, T: TGFSR(R) mildert Bitverschiebungen
  • du, D, l: zusätzliche Mersenne Twister Tempering Bitshifts/Masken

mit der Einschränkung, dass 2 nwR − 1 ist eine Mersenne-Primzahl. Diese Wahl vereinfacht den Primitivitätstest und k-Verteilungstest, die bei der Parametersuche benötigt werden.

Die Serie x ist definiert als eine Reihe von w-Bitgrößen mit der Rekursionsbeziehung:

wobei ∣ die Verkettung von Bitvektoren bezeichnet (mit oberen Bits links), ⊕ das bitweise exklusive Oder (XOR), xk du bedeutet das obere wR Stücke von xk, und xk+1 l bedeutet das untere R Stücke von xk+1. Die Twist-Transformation EIN ist in rationaler Normalform definiert als:

mit ichn−1 als die (n − 1) × (n − 1) Identitätsmatrix. Die rationale Normalform hat den Vorteil, dass die Multiplikation mit EIN kann effizient ausgedrückt werden als: (denken Sie daran, dass hier die Matrixmultiplikation in durchgeführt wird F2, und daher tritt bitweises XOR an die Stelle der Addition)

wo x0 ist das niedrigste Bit von x.

Wie beim TGFSR(R) ist der Mersenne Twister mit einer Tempertransformation kaskadiert, um die reduzierte Dimensionalität der Gleichverteilung (aufgrund der Wahl von EIN in der rationalen Normalform). Beachten Sie, dass dies der Verwendung der Matrix entspricht EIN wo EIN = T −1 BEI Pro T eine invertierbare Matrix, und daher gilt die unten erwähnte Analyse des charakteristischen Polynoms immer noch.

Wie bei EIN, wählen wir eine Tempering-Transformation, um leicht berechenbar zu sein, und konstruieren daher nicht wirklich actually T selbst. Die Temperierung ist bei Mersenne Twister definiert als

ja := x ⊕ ((xdu) & D) ja := ja ⊕ ((jaS) & B) ja := ja ⊕ ((jaT) & C) z := ja ⊕ (jal)

wo x ist der nächste Wert aus der Reihe, ja ein temporärer Zwischenwert, z der vom Algorithmus zurückgegebene Wert, mit ≪, ≫ als bitweiser Links- und Rechtsverschiebung und & als bitweiser und. Die erste und letzte Transformation werden hinzugefügt, um die Gleichverteilung der unteren Bits zu verbessern. Aus dem Eigentum von TGFSR, S + T ≥ ⌊w/2⌋ − 1 ist erforderlich, um die obere Grenze der Gleichverteilung für die oberen Bits zu erreichen.

Die Koeffizienten für MT19937 sind:

  • (w, n, m, R) = (32, 624, 397, 31)
  • ein = 9908B0DF16
  • (du, D) = (11, FFFFFFFF16)
  • (S, B) = (7, 9D2C568016)
  • (T, C) = (15, EFC6000016)
  • l = 18

Beachten Sie, dass 32-Bit-Implementierungen des Mersenne Twister im Allgemeinen über generally D = FFFFFFFF16. Infolgedessen ist die D wird gelegentlich aus der Algorithmusbeschreibung weggelassen, da die bitweise und mit D hat in diesem Fall keine Auswirkung.

Die Koeffizienten für MT19937-64 sind: [53]

  • (w, n, m, R) = (64, 312, 156, 31)
  • ein = B5026F5AA96619E916
  • (du, D) = (29, 555555555555555516)
  • (S, B) = (17, 71D67FFFEDA6000016)
  • (T, C) = (37, FFF7EEE00000000016)
  • l = 43

Initialisierung Bearbeiten

Der für eine Mersenne Twister-Implementierung erforderliche Zustand ist ein Array von n Werte von w Bits jeweils. Um das Array zu initialisieren, a w-Bit-Seed-Wert wird verwendet, um zu liefern x0 durch xn−1 indem man es einstellt x0 auf den Saatwert und danach Einstellung

xich = F × (xich−1 ⊕ (xich−1 >> (w − 2))) + ich

Pro ich von 1 bis n − 1 . Der erste Wert, den der Algorithmus dann generiert, basiert auf xn, nicht auf x0. Die Konstante F bildet einen weiteren Parameter für den Generator, obwohl er nicht Teil des eigentlichen Algorithmus ist. Der Wert für F für MT19937 ist 1812433253 und für MT19937-64 ist 6364136223846793005. [53]

Vergleich mit klassischem GFSR Edit

Um die 2 . zu erreichen nwR − 1 theoretische Obergrenze des Zeitraums in einem TGFSR, φB(T) muss ein primitives Polynom sein, φB(T) ist das charakteristische Polynom von

Die Dralltransformation verbessert die klassische GFSR mit folgenden Schlüsseleigenschaften:

  • Die Periode erreicht die theoretische Obergrenze 2 nwR − 1 (außer bei Initialisierung mit 0)
  • Gleichverteilung in n Dimensionen (z. B. können lineare Kongruentialgeneratoren bestenfalls eine vernünftige Verteilung in fünf Dimensionen verwalten)

Pseudocode bearbeiten

Der folgende Pseudocode implementiert den allgemeinen Mersenne Twister-Algorithmus. Die Konstanten w, n, m, R, ein, du, D, S, B, T, C, l, und F sind wie in der Algorithmusbeschreibung oben. Es wird angenommen dass int repräsentiert einen Typ, der ausreicht, um Werte mit . zu halten w Bits:

CryptMT Bearbeiten

CryptMT ist eine Stromchiffre und ein kryptographisch sicherer Pseudozufallszahlengenerator, der intern Mersenne Twister verwendet. [55] [56] Es wurde von Matsumoto und Nishimura zusammen mit Mariko Hagita und Mutsuo Saito entwickelt. Es wurde beim eSTREAM-Projekt des eCRYPT-Netzwerks eingereicht. [55] Im Gegensatz zu Mersenne Twister oder seinen anderen Derivaten ist CryptMT patentiert.

MTGP-Bearbeitung

MTGP ist eine Variante von Mersenne Twister, die für Grafikprozessoren optimiert wurde, die von Mutsuo Saito und Makoto Matsumoto veröffentlicht wurden. [57] Die grundlegenden linearen Rekursionsoperationen werden von MT erweitert und Parameter werden so gewählt, dass viele Threads die Rekursion parallel berechnen können, während sie ihren Zustandsraum teilen, um die Speicherbelastung zu reduzieren. Das Papier behauptet eine verbesserte Gleichverteilung über MT und Leistung auf einer sehr alten GPU (Nvidia GTX260 mit 192 Kernen) von 4,7 ms für 5 × 10 7 zufällige 32-Bit-Integer.

SFMT Bearbeiten

Der SFMT (SIMD-orientierter Fast Mersenne Twister) ist eine Variante des 2006 eingeführten Mersenne Twister, [58] die darauf ausgelegt ist, schnell zu sein, wenn er auf 128-Bit-SIMD läuft.

  • Es ist ungefähr doppelt so schnell wie Mersenne Twister. [59]
  • Es hat eine bessere Gleichverteilungseigenschaft der v-Bit-Genauigkeit als MT, aber schlechter als WELL ("Well Equidistributed Long-period Linear").
  • Es hat eine schnellere Erholung vom Null-Überschuss-Ausgangszustand als MT, aber langsamer als WELL.
  • Es unterstützt verschiedene Zeiträume von 2 607 -1 bis 2 216091 -1.

Intel SSE2 und PowerPC AltiVec werden von SFMT unterstützt. Es wird auch für Spiele mit dem Cell BE in der PlayStation 3 verwendet. [60]

TinyMT Bearbeiten

TinyMT ist eine Variante von Mersenne Twister, die 2011 von Saito und Matsumoto vorgeschlagen wurde. [61] TinyMT verwendet nur 127 Bit Zustandsraum, eine deutliche Verringerung im Vergleich zu den 2,5 KiB des Originalzustands. Es hat jedoch eine Periode von 2 127 -1, die deutlich kürzer ist als das Original, daher wird es von den Autoren nur in Fällen empfohlen, in denen das Gedächtnis sehr wichtig ist.


Erläuterung der Bedeutung von Funktionen am Beispiel eines Random Forest

In vielen (Geschäfts-)Fällen ist es ebenso wichtig, nicht nur ein genaues, sondern auch ein interpretierbares Modell zu haben. Oftmals fragen wir uns nicht nur, wie die Hauspreisprognose unseres Modells lautet, sondern warum sie so hoch/tief ist und welche Merkmale bei der Bestimmung der Prognose am wichtigsten sind. Ein weiteres Beispiel könnte die Vorhersage von Kundenabwanderung sein – es ist sehr schön, ein Modell zu haben, das erfolgreich vorhersagt, welche Kunden anfällig für Abwanderung sind, aber zu identifizieren, welche Variablen wichtig sind, kann uns bei der Früherkennung und vielleicht sogar bei der Verbesserung des Produkts/der Dienstleistung helfen!

Wenn Sie die Bedeutung der Funktionen kennen, die von Modellen für maschinelles Lernen angegeben werden, können Sie auf verschiedene Weise profitieren, zum Beispiel:

  • Wenn Sie die Logik des Modells besser verstehen, können Sie nicht nur überprüfen, ob es korrekt ist, sondern auch an der Verbesserung des Modells arbeiten, indem Sie sich nur auf die wichtigen Variablen konzentrieren
  • das Obige kann zur Variablenauswahl verwendet werden — Sie können es entfernen x Variablen, die nicht so signifikant sind und eine ähnliche oder bessere Leistung in viel kürzerer Trainingszeit aufweisen
  • In manchen Geschäftsfällen ist es sinnvoll, der Interpretierbarkeit halber auf Genauigkeit zu verzichten. Wenn eine Bank beispielsweise einen Kreditantrag ablehnt, muss sie auch eine Begründung für die Entscheidung haben, die auch dem Kunden vorgelegt werden kann

Aus diesem Grund möchte ich in diesem Artikel verschiedene Ansätze zur Interpretation der Merkmalswichtigkeit am Beispiel eines Random-Forest-Modells untersuchen. Die meisten von ihnen sind auch auf verschiedene Modelle anwendbar, angefangen bei der linearen Regression bis hin zu Blackboxen wie XGBoost.

Zu beachten ist: Je genauer unser Modell ist, desto mehr können wir auf Merkmalswichtigkeitsmaße und andere Interpretationen vertrauen. Ich gehe davon aus, dass das von uns erstellte Modell einigermaßen genau ist (da jeder Datenwissenschaftler sich bemühen wird, ein solches Modell zu haben), und in diesem Artikel konzentriere ich mich auf die wichtigen Maßnahmen.

Für dieses Beispiel verwende ich das Bostoner Immobilienpreis-Dataset (also ein Regressionsproblem). Aber die in diesem Artikel beschriebenen Ansätze funktionieren bei Klassifikationsproblemen genauso gut, der einzige Unterschied besteht in der Metrik, die für die Bewertung verwendet wird.

Die einzige nicht standardmäßige Sache bei der Vorbereitung der Daten ist das Hinzufügen einer zufälligen Spalte zum Datensatz. Logischerweise hat es keine Vorhersagekraft über die abhängige Variable (Medianwert von Eigentumswohnungen in 1000 $), daher sollte es kein wichtiges Merkmal im Modell sein. Mal sehen, wie es ausgehen wird.

Im Folgenden untersuche ich die Beziehung zwischen dem Zufallsmerkmal und der Zielvariablen. Wie zu sehen ist, gibt es kein Muster auf dem Streudiagramm und die Korrelation ist fast 0.


1.3: 03 Zufallsvariablen - Mathematik

Mithilfe von einfachem JavaScript in Captivate können Sie nach dem Zufallsprinzip Zahlen generieren, um Mathe-Flash-Karten zu erstellen, die den Teilnehmern helfen, ihre grundlegenden mathematischen Fähigkeiten zu erlernen. Subtraktion und Division können jedoch Probleme mit negativen Zahlen oder Dezimalpunkten verursachen. Erfahren Sie, wie Sie diese Probleme überwinden können.

Als ich 1995 mit dem Vollzeitunterricht begann, brachte ich meinen Schülern bei, wie man eine App erstellt, die zufällig mathematische Karten generiert, um den Teilnehmern zu helfen, die Grundlagen der Addition, Subtraktion, Multiplikation und Division zu üben. Diese Übung ist eine hervorragende Möglichkeit, etwas Codierung und Logik zu lernen und gleichzeitig eine App zu erstellen, die an verschiedenen Orten verwendet werden kann. Als ich das zum ersten Mal unterrichtete, verwendeten wir Tools wie Authorware, Director, Flash (Animate) und ich habe sogar eine Webversion dieser App erstellt. Ich habe jedoch keine Captivate-Version dieser App erstellt. Hier ist ein Beispiel dafür, wie es in Captivate aussieht. Ich verwende eine Animation von Adobe Animate, um die Karten umzudrehen. Die gesamte Arbeit wird jedoch in Captivate erledigt.

Schauen Sie rein und sehen Sie, was Sie denken.

Ein weiterer großer Austausch. Danke!

Sie sind willkommen. Es hat Spaß gemacht zu bauen.

Phil Cowcill liebt diese Tutorials von Ihnen. Das steht auf meiner To-Do-Liste für Dinge, die ich diese Woche ausprobieren kann. Schätzen Sie, dass Sie dies mit dem Rest von uns teilen.

Danke jsv1 für deinen Kommentar. Ich hoffe, es hilft Ihnen bei Ihren Lern- und Entwicklungsfähigkeiten. Alles Gute für dich.

Es ist schon eine Weile her, aber ich habe Schritt für Schritt das Generieren einer Zufallszahl mit JS in zwei Blogbeiträgen erklärt:

Es gibt auch einen zweiten Beitrag.

Danke Lieve. Ich habe vor einiger Zeit auch einen Beitrag zu Zufallszahlen gemacht. Es wurde sowohl im Adobe-Blog als auch auf dieser Site veröffentlicht. Es hatte damit zu tun, Zufallszahlen zu verwenden, um zufälliges Feedback zu generieren. Dieser Beitrag ist eine weitere Möglichkeit, Zufallszahlen in Captivate zu verwenden. Es ist eine gut aussehende App, die süchtig machen kann.

Hallo Paul!… Warum hast du deine Haare rasiert? …

(Nur ein Scherz Phil !… Hoffe es macht dir nichts aus… aber ich kann nicht helfen es zu tun… )

Ich habe mir gerade Ihre Videos angesehen, die Sie heute Morgen gepostet haben (und die anderen, die Sie bereits geteilt haben, übrigens nicht übersehen)… Also GROSSES Dankeschön . … Und ich hoffe, du wirst ein weiterer “Ressourcen-Mann” in dieser Community!… Vor allem in Javascript, das meiner Meinung nach versunken ist (keine Sorge, Greg, ich habe dich nicht vergessen!…) mit dieses Programm.

1./ Kannst du ein bisschen langsam sprechen?… I’m Französisch… Und ich nehme an, ich’m nicht der einzige Nicht-Englisch-Muttersprachler hier…

2./ Es wäre schön, wenn Sie uns auch den Javascript-Code, den Sie in Ihrer Demo verwenden, im Text mitteilen ?…

Danke Ludovic für deine Kommentare. Ich freue mich über den Kommentar zur Verlangsamung. Ich spreche auf eine Weise, wenn ich unterrichte, und auf eine andere Weise, wenn ich im Gespräch bin. Dieses Video wurde aufgenommen, als ob ich in einem Gespräch wäre. Ich werde das Tempo meines Vortrags in meinem nächsten Video verlangsamen.

Was den JavaScript-Code betrifft, habe ich Folgendes für die Ergänzung.
var ans = 0

var card1Num = getRandom(randMax, randMin )
var card2Num = getRandom(randMax, randMin )
console.log(“Max = ” + randMax + “, Min = ” + randMin)

// Zufallswert in Captivate-Variable card1 & card2 speichern.
// card1 & card2 sind die Variablen, die in die Flip-Card-Animation eingelesen werden

window.cpAPIInterface.setVariableValue(“card1”, card1Num)
window.cpAPIInterface.setVariableValue(“card2”, card2Num)

ans = card1Num + card2Num
window.cpAPIInterface.setVariableValue(“theAnswer”, ans)

Funktion getRandom(max, min) <
zurück Math.floor(Math.random() * (max – min) + min)
>
In der Subtraktion ist hier der Code.
var d1 = 0
var d2 = 0
var ans = 0

d1 = window.cpAPIInterface.getVariableValue(“randMax”)
d2 = window.cpAPIInterface.getVariableValue(“randMin”)

var card2Num = getRandom(d1, d2)
var ans = getRandom(d1, d2)

var card1Num = card2Num + ans

window.cpAPIInterface.setVariableValue(“card1”, card1Num)
window.cpAPIInterface.setVariableValue(“card2”, card2Num)

Es ist ein wenig anders als das Hinzufügen, weil ich etwas experimentiert habe. Es funktioniert aber gut.


1.3: 03 Zufallsvariablen - Mathematik

Von den Studierenden wird erwartet, dass sie mit der realen Analyse auf dem Niveau von W. Rudins vertraut sind Prinzipien der mathematischen Analysis oder M. Reeds Grundgedanken der Analyse&ndash die Topologie von R n , Konvergenz in metrischen Räumen (insbesondere gleichförmige Konvergenz von Funktionen auf R n ), unendliche Reihen, abzählbare und abzählbare Mengen, Kompaktheit und Konvexität und so weiter. Versuchen Sie, die Fragen in diesem Analyse-Diagnose-Quiz zu beantworten, um zu sehen, ob Sie vorbereitet sind. Die meisten Studenten, die im Grundstudium Mathematik als Hauptfach studiert haben, werden mit diesem Material vertraut sein, aber Studenten mit weniger mathematischen Vorkenntnissen sollten in Betracht ziehen, Dukes MTH 531, Basic Analysis I (etwas fortgeschrittener als MTH 431, Advanced Calculus I, aber das ist eine gute zweite Wahl) zu belegen ) bevor Sie an diesem Kurs teilnehmen. Es ist auch möglich, das Hintergrundmaterial zu lernen, indem Sie einen der Standardtexte (wie die oben aufgeführten Bücher von Rudin oder Reed) durcharbeiten und die meisten Probleme lösen, vorzugsweise in Zusammenarbeit mit ein paar anderen Studenten und einem Fakultätsmitglied (vielleicht mir) ) ab und zu helfen. Fortgeschrittenere mathematische Themen aus der Realanalyse, einschließlich Teile der Maßtheorie, Fourier- und Funktionsanalyse, werden nach Bedarf eingeführt, um ein tiefes Verständnis der Wahrscheinlichkeit und ihrer Anwendungen zu unterstützen. Themen von späterem Interesse an Statistik (z. B. reguläre bedingte Dichtefunktionen) wird besondere Aufmerksamkeit gewidmet, während diejenigen von geringerem statistischem Interesse weggelassen werden können.

Die meisten Studenten in der Klasse werden mit der Wahrscheinlichkeit auf Bachelor-Niveau auf dem Niveau von STA 230 = MTH 230, STA 240L oder MTH 340 vertraut sein. Die Studenten sollten mit den üblichen, häufig vorkommenden Wahrscheinlichkeitsverteilungen vertraut sein (hier ist eine Liste von vielen).

Wöchentliche Skripte sind verfügbar (klicken Sie oben auf die Spalte "Woche", wenn sie blau oder grün ist). Dieser Lehrplan ist vorläufig , zuletzt überarbeitet und wird mit ziemlicher Sicherheit ersetzt&ndash laden Sie Ihren Browser für die aktuelle Version neu. Warnung: Vorlesungsnotizen und Hausaufgabenprobleme werden auch von Zeit zu Zeit überarbeitet, da ich versuche, sie zu verbessern. Daher ist es am besten, zukünftige Aufgabensammlungen oder Vorlesungsmitschriften nicht auszudrucken, bis Sie sie benötigen. Skripte haben alle ein "letztes Bearbeitungsdatum" am Ende Hausaufgaben können sich bis zu einer Woche vor der Fälligkeit ändern.

  • Bitte aktivieren Sie Ihre Kamera und richten Sie sie während der gesamten Unterrichtszeit auf Ihr Gesicht. Natürlich können Sie ab und zu eine kurze Pause einlegen und müssen nicht fragen.
  • Bitte achten Sie darauf, dass Ihr richtiger Name unter "Teilnehmer" erscheint. Sie können es bei Bedarf ändern.
  • Das Audio aller wird zunächst stumm geschaltet. Bitte heben Sie die Stummschaltung auf, wenn Sie sprechen, und schalten Sie dann die Stummschaltung wieder ein. Dies sollte störendes Feedback und Hintergrundgeräusche begrenzen.
  • Nutzen Sie die „Chat“-Funktion von Zoom, um während der Vorlesung Fragen zu stellen oder „die Hand zu heben“.
  • Bitten Sie mich, zu beschleunigen oder zu verlangsamen (klicken Sie auf "Teilnehmer", dann auf "schneller" oder "langsamer").
  • Ich werde versuchen, am Ende jeder Stunde 10 oder 15 Minuten Zeit für weitere Fragen zu haben.
  • Die Vorträge werden aufgezeichnet und auf Warpwire (zugänglich über Sakai) zur Verfügung gestellt, um denjenigen zu helfen, die nicht in Echtzeit teilnehmen können, und zur Überprüfung von Artikeln, wenn Sie dies wünschen. Bitte versuchen Sie, wann immer Sie können, in Echtzeit teilzunehmen.
  • Dies ist mein erstes Mal, dass ich aus der Ferne unterrichte, und ich lerne immer noch, wie es geht. Erwarten Sie für eine Weile ein paar Ecken und Kanten! Ich würde mich über Ihre Vorschläge freuen, da wir alle gemeinsam das Lernen während einer Pandemie bewältigen.

Für Hausaufgabenaufgaben werden Punkte (normalerweise bis zu drei, manchmal aber auch vier oder fünf) basierend auf Ihrem Erfolg in eine richtige Lösung kommunizieren. Für die volle Punktzahl muss die Lösung klar, prägnant und korrekt sein, selbst eine richtige Lösung verliert Punkte oder wird unbenotet zurückgegeben, wenn sie nicht klar und prägnant ist. Sauberkeit zählt. Ziehen Sie in Betracht, LaTeX zu verwenden (es ist sowieso eine gute Praxis). Vermeiden Sie, wo immer möglich, den Widerspruchsbeweis und es ist zu einfach, durch einen kleinen Fehler einen irrtümlichen "Widerspruch" zu erzeugen.

Jede Hausaufgabe muss als einzelnes PDF-Dokument eingereicht werden (kein Word, keine Bilder wie png oder jpg, keine separaten Dateien für verschiedene Probleme). Sie können über Sakai oder Gradescope eingereicht werden. LaTeX-geschriebene Hausaufgaben sind viel besser als eingescannte handgeschriebene. wenn du muss eine handschriftliche Hausaufgabe scannen, verwenden Stift oder einen sehr dunklen Bleistift verwenden Sie einen Scanner, falls Sie einen haben, oder einen guten Handy-Scanner --- siehe Vorschläge von Gradescope (die Scannable für iOS und Genius Scan für Android empfehlen) oder der New York Times (die Adobe Scan empfehlen) für iOS und Android), zum Beispiel. Andere haben gute Erfahrungen mit Cam Scanner mit beiden gemacht. Stellen Sie sicher, dass SIE das gescannte Bild lesen können, bevor Sie es senden. Wenn Sie es nicht lesen können, können wir es auch nicht. Passen Sie bei Bedarf die Helligkeit oder andere Bildparameter an.

Die meisten Hausaufgaben sind am Donnerstag vor Unterrichtsbeginn fällig, damit ich Fragen zu ihren Lösungen beantworten kann. Normalerweise werden sie von der Klasse des folgenden Dienstags zurückgegeben. Hausaufgaben, die in der Woche vor den Prüfungen vergeben werden, können am Dienstag statt am Donnerstag fällig sein, damit ich vor der Prüfung Fragen dazu beantworten kann. Denken Sie daran, dass sich Hausaufgabenprobleme bis zu einer Woche vor dem Abgabetermin ändern können.

Zwischen- und Abschlussprüfungen sind dieses Jahr Open-Book und Open-Notes, aber Sie sollten während der Prüfung nicht online nach Antworten suchen. Tests aus den aktuellen STA711-Angeboten sind verfügbar, um Ihnen zu helfen, zu wissen, was Sie erwartet, und um Ihnen bei der Vorbereitung auf die diesjährigen Tests zu helfen:

Herbst 2012: 1. Halbzeit 2. Halbzeit Abschlussprüfung
Herbst 2013: 1. Halbzeit 2. Halbzeit Abschlussprüfung
Herbst 2015: 1. Halbzeit 2. Halbzeit Abschlussprüfung
Herbst 2016: 1. Halbzeit 2. Halbzeit Abschlussprüfung
Herbst 2017: 1. Halbzeit 2. Halbzeit Abschlussprüfung
Herbst 2018: 1. Halbzeit 2. Halbzeit Abschlussprüfung
Herbst 2019: 1. Halbzeit 2. Halbzeit Abschlussprüfung
Dafür werden keine Lösungen angeboten, weil viele Studierende nicht widerstehen können, die Antwort nachzuschlagen, wenn sie nicht weiterkommen und dann die Prüfungen ihren Wert verlieren. Wenn Sie Ihre Lösungen während unserer Sprechzeiten mit den TAs oder mir teilen, geben wir gerne Feedback, Hinweise, etc. Beachten Sie auch, dass die früheren Prüfungen geschlossenes Buch and taken in person, in years before the pandemic led us to off-line solutions. Exams are administered using the "Tests and Quizzes" tool in Sakai, which gives you a specified length of time to download, solve, scan, and upload your solutions as a single pdf file, all within a specified time window. It is your responsibility to obtain and use an adequate scanning app (see recommendations in the Homework section above) or actual scanner.

  1. There are enough seats in the room, and
  2. They are willing to commit to active participation:
    1. turn in several of the homeworks (or a few problems on each of most HW assignments),
    2. take one of the midterms or the final exam,
    3. come regularly to lectures, and ask or answer questions now and then.

    You may discuss and collaborate in solving homework problems, but you may not copy&mdash each student should write up his or her solution. Cheating on exams, copying or plagiarizing homeworks or projects, lying about an illness or absence and other forms of academic dishonesty are a breach of trust with classmates and faculty, and will not be tolerated. They also violate Duke's Community Standard and will be referred to the Graduate School Judicial Board or the Dean of the Graduate School. Additionally, there may be penalties to your final course grade. Please review Duke's Standards of Conduct.


    2 Antworten 2

    Since $X$ and $Y$ are independent Gaussians, they are also jointly normaly distributed. So, one can just take the pdf of a bivariate standard normal distribution and adjust the integrals according to the given conditions. With $Z = -Y$ and $f(x,z)$ denoting the bivariate normal distribution, I thought about the problem like this:

    $ quad P(3x > -y > x land x > 0 land y < 0) =P(3x > z > x) x,z>0 =P(3x > z) - P(x > z) x,z>0 =P(3x - z > 0) - P(x - z > 0) x,z>0 = int_0^ int_0^ <3x>f(x,z)dzdx - int_0^ int_0^ f(x,z)dzdx.$

    Since the analytical solution at this point wasn't easy, I have to admit that I just used WolframAlpha. As a result I got:

    $quad int_0^ int_0^ <3x>f(x,z)dzdx - int_0^ int_0^ f(x,z)dzdx = frac(3)> <2pi>- frac<1> <8>approx 0.073792. $


    The most fundamental problem of your test application is that you call srand once and then call rand one time and exit.

    The whole point of srand function is to initialize the sequence of pseudo-random numbers with a random seed.

    It means that if you pass the same value to srand in two different applications (with the same srand / rand implementation) then you will get exactly the same sequence of rand() values read after that in both applications.

    However in your example application pseudo-random sequence consists only of one element - the first element of a pseudo-random sequence generated from seed equal to current time of 1 sec precision. What do you expect to see on output then?

    Obviously when you happen to run application on the same second - you use the same seed value - thus your result is the same of course (as Martin York already mentioned in a comment to the question).

    Actually you should call srand(seed) one time and then call rand() many times and analyze that sequence - it should look random.

    AMENDMENT 1 - example code:

    OK I get it. Apparently verbal description is not enough (maybe language barrier or something. :) ).

    Old-fashioned C code example based on the same srand()/rand()/time() functions that was used in the question:

    ^^^ THAT sequence from a single run of the program is supposed to look random.

    Please NOTE that I don't recommend to use rand / srand functions in production for the reasons explained below and I absolutely don't recommend to use function time as a random seed for the reasons that IMO already should be quite obvious. Those are fine for educational purposes and to illustrate the point sometimes but for any serious use they are mostly useless.

    AMENDMENT 2 - detailed explanation:

    It is important to understand that as of now there is none C or C++ standard features (library functions or classes) producing actually random data definitively (i.e. guaranteed by the standard to be actually random). The only standard feature that approaches this problem is std::random_device that unfortunately still does not provide guarantees of actual randomness.

    Depending on the nature of application you should first decide if you really need truly random (unpredictable) data. Notable case when you do most certainly need true randomness is information security - e.g. generating symmetric keys, asymmetric private keys, salt values, security tokens, etc.

    However security-grade random numbers is a separate industry worth a separate article.

    In most cases Pseudo-Random Number Generator is sufficient - e.g. for scientific simulations or games. In some cases consistently defined pseudo-random sequence is even required - e.g. in games you may choose to generate exactly same maps in runtime to avoid storing lots of data in your distribution.

    The original question and reoccurring multitude of identical/similar questions (and even many misguided "answers" to them) indicate that first and foremost it is important to distinguish random numbers from pseudo-random numbers AND to understand what is pseudo-random number sequence in the first place AND to realize that pseudo-random number generators are NOT used the same way you could use true random number generators.

    Intuitively when you request random number - the result returned shouldn't depend on previously returned values and shouldn't depend if anyone requested anything before and shouldn't depend in what moment and by what process and on what computer and from what generator and in what galaxy it was requested. That is what word "random" means after all - being unpredictable and independent of anything - otherwise it is not random anymore, right? With this intuition it is only natural to search the web for some magic spells to cast to get such random number in any possible context.

    ^^^ THAT kind of intuitive expectations IS VERY WRONG and harmful in all cases involving Pseudo-Random Number Generators - despite being reasonable for true random numbers.

    While the meaningful notion of "random number" exists (kind of) - there is no such thing as "pseudo-random number". A Pseudo-Random Number Generator actually produces pseudo-random number Reihenfolge.

    Pseudo-random sequence is in fact always deterministic (predetermined by its algorithm and initial parameters) - i.e. there is actually nothing random about it.

    When experts talk about quality of PRNG they actually talk about statistical properties of the generated sequence (and its notable sub-sequences). For example if you combine two high quality PRNGs by using them both in turns - you may produce bad resulting sequence - despite them generating good sequences each separately (those two good sequences may simply correlate to each other and thus combine badly).

    Specifically rand() / srand(s) pair of functions provide a singular per-process non-thread-safe(!) pseudo-random number sequence generated with implementation-defined algorithm. Function rand() produces values in range [0, RAND_MAX] .

    Quote from C11 standard (ISO/IEC 9899:2011):

    The srand function uses the argument as a seed for a new sequence of pseudo-random numbers to be returned by subsequent calls to rand . If srand is then called with the same seed value, the sequence of pseudo-random numbers shall be repeated. If rand is called before any calls to srand have been made, the same sequence shall be generated as when srand is first called with a seed value of 1.

    Many people reasonably expect that rand() would produce a sequence of semi-independent uniformly distributed numbers in range 0 to RAND_MAX . Well it most certainly should (otherwise it's useless) but unfortunately not only standard doesn't require that - there is even explicit disclaimer that states "there is no guarantees as to the quality of the random sequence produced". In some historical cases rand / srand implementation was of very bad quality indeed. Even though in modern implementations it is most likely good enough - but the trust is broken and not easy to recover. Besides its non-thread-safe nature makes its safe usage in multi-threaded applications tricky and limited (still possible - you may just use them from one dedicated thread).

    New class template std::mersenne_twister_engine<> (and its convenience typedefs - std::mt19937 / std::mt19937_64 with good template parameters combination) provides per-object pseudo-random number generator defined in C++11 standard. With the same template parameters and the same initialization parameters different objects will generate exactly the same per-object output sequence on any computer in any application built with C++11 compliant standard library. The advantage of this class is its predictably high quality output sequence and full consistency across implementations.

    Also there are more PRNG engines defined in C++11 standard - std::linear_congruential_engine<> (historically used as fair quality srand/rand algorithm in some C standard library implementations) and std::subtract_with_carry_engine<>. They also generate fully defined parameter-dependent per-object output sequences.

    Modern day C++11 example replacement for the obsolete C code above:

    The version of previous code that uses std::uniform_int_distribution<>


    Schau das Video: Zufallsvektoren, gemeinsame Verteilung elementar (Oktober 2021).