Overview | Package | Class | Tree | Deprecated | Index | Help
| SSJ V. 2.1.1.
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES

## Package umontreal.iro.lecuyer.rng

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

See:
Description

Interface Summary
CloneableRandomStream | `CloneableRandomStream` extends `RandomStream` and `Cloneable`.
RandomStream | This interface defines the basic structures to handle multiple streams of uniform (pseudo)random numbers and convenient tools to move around within and across these streams.
RandomStreamFactory | Represents a random stream factory capable of constructing instances of a given type of random stream by invoking the `newInstance` method each time a new random stream is needed, instead of invoking directly the specific constructor of the desired type.

Class Summary
AntitheticStream | This container class allows the user to force any `RandomStream` to return antithetic variates.
BakerTransformedStream | This container class permits one to apply the baker's transformation to the output of any `RandomStream`.
BasicRandomStreamFactory | Represents a basic random stream factory that can constructs new instances of a given `RandomStream` implementation via the `newInstance` method.
F2NL607 | Implements the `RandomStream` interface by using as a backbone generator the combination of the WELL607 proposed in (and implemented in `WELL607`) with a nonlinear generator.
GenF2w32 | Implements the `RandomStream` interface via inheritance from `RandomStreamBase`.
LFSR113 | Extends `RandomStreamBase` using a composite linear feedback shift register (LFSR) (or Tausworthe) RNG as defined in.
LFSR258 | Extends `RandomStreamBase` using a 64-bit composite linear feedback shift register (LFSR) (or Tausworthe) RNG as defined in.
MRG31k3p | Extends the abstract class `RandomStreamBase`, thus implementing the `RandomStream` interface indirectly.
MRG32k3a | Extends the abstract class `RandomStreamBase` by using as a backbone (or main) generator the combined multiple recursive generator (CMRG) `MRG32k3a` proposed by L'Ecuyer, implemented in 64-bit floating-point arithmetic.
MRG32k3aL | The same generator as `MRG32k3a`, except here it is implemented with type `long` instead of `double`.
MT19937 | Implements the `RandomStream` interface via inheritance from `RandomStreamBase`.
RandMrg | This class implements directly the interface `RandomStream`, with a few additional tools.
RandomPermutation | Provides methods to randomly shuffle arrays or lists using a random stream.
RandomStreamBase | This class provides a convenient foundation on which RNGs can be built.
RandomStreamManager | Manages a list of random streams for more convenient synchronization.
RandomStreamWithCache | This class represents a random stream whose uniforms are cached for more efficiency when using common random numbers.
RandRijndael | Implements a RNG using the Rijndael block cipher algorithm (AES) with key and block lengths of 128 bits.
TruncatedRandomStream | Represents a container random stream generating numbers in an interval (a, b) instead of in (0, 1), where 0 <= a < b <= 1, by using the contained stream.
WELL1024 | Implements the `RandomStream` interface via inheritance from `RandomStreamBase`.
WELL512 | This class implements the `RandomStream` interface via inheritance from `RandomStreamBase`.
WELL607 | This class implements the `RandomStream` interface via inheritance from `RandomStreamBase`.

Exception Summary
RandomStreamInstantiationException | This exception is thrown when a random stream factory cannot instantiate a stream on a call to its `newInstance` method.

## Package umontreal.iro.lecuyer.rng Description

This package offers the basic facilities for generating uniform random numbers. It provides an interface called `RandomStream` 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. 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. `MRG32k3a` is the one that has been most extensively tested, but it is not among the fastest. The `LFSR113`, `GenF2w32`, `MT19937`, 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 (`RandomStreamManager`), to create random stream factories for a given type of stream (`BasicRandomStreamFactory`), and to apply automatic transformations to the output of a given stream (`AntitheticStream` and `BakerTransformedStream`).

For further details about uniform RNGs, we refer the reader to.

Overview | Package | Class | Tree | Deprecated | Index | Help
| SSJ V. 2.1.1.
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES

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