SSJ
V. 2.2.

Package umontreal.iro.lecuyer.rng

This package offers the basic facilities for generating uniform random numbers.

See: Description

Package umontreal.iro.lecuyer.rng Description

This package offers the basic facilities for generating uniform random numbers. It provides an interface called umontreal.iro.lecuyer.rngRandomStream and some implementations of that interface. The interface specifies that each stream of random numbers is partitioned into multiple substreams and that methods are available to jump between the substreams, as discussed in[#!rLEC91a!#,#!rLEC97d!#,#!rLEC02a!#]. For an example of how to use these streams properly, see InventoryCRN in the set of example programs.

Each implementation uses a specific backbone uniform random number generator (RNG), whose period length is typically partitioned into very long non-overlapping segments to provide the streams and substreams. A stream can generate uniform variates (real numbers) over the interval (0,1), uniform integers over a given range of values {i,..., j}, and arrays of these.

The generators provided here have various speeds and period lengths. umontreal.iro.lecuyer.rngMRG32k3a is the one that has been most extensively tested, but it is not among the fastest. The umontreal.iro.lecuyer.rngLFSR113, umontreal.iro.lecuyer.rngGenF2w32, umontreal.iro.lecuyer.rngMT19937, and the WELL generators produce sequences of bits that obey a linear recurrence, so they eventually fail statistical tests that measure the linear complexity of these bits sequences. But this can affect only very special types of applications.

For each generator, the following tables give the approximate period length (period), the CPU time (in seconds) to generate 109 U(0, 1) random numbers (gen. time), and the CPU time to jump ahead 106 times to the next substream (jump time). The following timings are on a 2100 MHz 32-bit AMD Athlon XP 2800+ computer running Linux, with the JDK 1.4.2.

RNG period gen. time jump time
LFSR113 2113 51 0.08
WELL512 2512 55 372
WELL1024 21024 55 1450
MT19937 219937 56 60
WELL607 2607 61 523
GenF2w32 2800 62 937
MRG31k3p 2185 66 1.8
MRG32k3a 2191 109 2.3
F2NL607 2637 125 523
RandRijndael 2130 260 0.9

The following timings are on a 2400 MHz 64-bit AMD Athlon 64 Processor 4000+ computer running Linux, with the JDK 1.5.0.

RNG period gen. time jump time
LFSR113 2113 31 0.08
WELL607 2607 33 329
WELL512 2512 33 234
WELL1024 21024 34 917
LFSR258 2258 35 0.18
MT19937 219937 36 46
GenF2w32 2800 43 556
MRG31k3p 2185 51 0.89
F2NL607 2637 65 329
MRG32k3a 2191 70 1.1
RandRijndael 2130 127 0.6

Other tools included in this package permit one to manage and synchronize several streams simultaneously (umontreal.iro.lecuyer.rngRandomStreamManager), to create random stream factories for a given type of stream (umontreal.iro.lecuyer.rngBasicRandomStreamFactory), and to apply automatic transformations to the output of a given stream (umontreal.iro.lecuyer.rngAntitheticStream and umontreal.iro.lecuyer.rngBakerTransformedStream).

For further details about uniform RNGs, we refer the reader to[#!rKNU98a!#,#!rLEC01d!#,#!rLEC04b!#].

Should add an example somewhere.

SSJ
V. 2.2.

To submit a bug or ask questions, send an e-mail to Pierre L'Ecuyer.