qrng: Compute Quasi-Random Sequences

qrngR Documentation

Compute Quasi-Random Sequences

Description

Computing Korobov, generalize Halton and Sobol' quasi-random sequences.

Usage

korobov(n, d = 1, generator, randomize = c("none", "shift"))
ghalton(n, d = 1, method = c("generalized", "halton"))
sobol  (n, d = 1, randomize = c("none", "digital.shift", "Owen", "Faure.Tezuka",
                                "Owen.Faure.Tezuka"), seed, skip = 0, ...)

Arguments

n

number n of points to be generated \ge 2.

d

dimension d.

generator

numeric of length d or length 1 (in which case it is appropriately extended to length d). All numbers must be in \{1,\dots,n\} and must be (coercible to) integers.

randomize

character string indicating the type of randomization for the point set.

korobov()

one of the following:

"none"

no randomization.

"shift"

a uniform random variate modulo 1.

sobol()

one of the following:

"none"

no randomization.

"digital.shift"

a digital shift.

"Owen"

calls generate_sobol_owen_set() from package spacefillr.

"Faure.Tezuka","Owen.Faure.Tezuka"

calls sobol() from package randtoolbox with scrambling being 2 and 3, respectively.

If randomize is a logical, then it is interpreted as "none" if FALSE and "digital.shift" if TRUE.

method

character string indicating which sequence is generated, generalized Halton or (plain) Halton.

seed

if provided, an integer used within set.seed() for the non-scrambling randomize methods (so "none" or "digital.shift") or passed to the underlying generate_sobol_owen_set() from package spacefillr (for "Owen") and sobol() from package randtoolbox for the scrambling methods. If not provided, the non-scrambling methods respect a global set.seed() but the scrambling methods do not (they then use a randomly generated one based on time and process identifier).

skip

number of initial points in the sequence to be skipped (skip = 0 means the sequence starts with at the origin). Note that for the scrambling methods this simply computes n + skip points and omits the first skip-many.

...

additional arguments passed to sobol() from package randtoolbox for randomization methods "Faure.Tezuka" and "Owen.Faure.Tezuka".

Details

For sobol() examples see demo(sobol_examples).

Note that these procedures call fast C code. The following restrictions apply:

korobov()

n,d must be \le 2^{31}-1.

ghalton()

n must be \le 2^{32}-1 and d must be \le 360.

sobol()

if randomize = "none" or randomize = "digital.shift", n must be \le 2^{31}-1 and d must be \le 16510.

The choice of parameters for korobov() is crucial for the quality of this quasi-random sequence (only basic sanity checks are conducted). For more details, see l'Ecuyer and Lemieux (2000).

The generalized Halton sequence uses the scrambling factors of Faure and Lemieux (2009).

Value

korobov() and ghalton() return an (n,d)-matrix; for d=1 an n-vector is returned.

Author(s)

Marius Hofert and Christiane Lemieux

References

Faure, H., Lemieux, C. (2009). Generalized Halton Sequences in 2008: A Comparative Study. ACM-TOMACS 19(4), Article 15.

l'Ecuyer, P., Lemieux, C. (2000). Variance Reduction via Lattice Rules. Stochastic Models and Simulation, 1214–1235.

Lemieux, C., Cieslak, M., Luttmer, K. (2004). RandQMC User's guide. See https://www.math.uwaterloo.ca/~clemieux/randqmc/guide.pdf

Examples

n <- 1021 # prime
d <- 4 # dimension

## Korobov's sequence
generator <- 76 # see l'Ecuyer and Lemieux
u <- korobov(n, d = d, generator = generator)
pairs(u, gap = 0, pch = ".", labels = as.expression(
      sapply(1:d, function(j) bquote(italic(u[.(j)])))))

## Randomized Korobov's sequence
set.seed(271)
u <- korobov(n, d = d, generator = generator, randomize = "shift")
pairs(u, gap = 0, pch = ".", labels = as.expression(
      sapply(1:d, function(j) bquote(italic(u[.(j)])))))

## Generalized Halton sequence (randomized by definition)
set.seed(271)
u <- ghalton(n, d)
pairs(u, gap = 0, pch = ".", labels = as.expression(
      sapply(1:d, function(j) bquote(italic(u[.(j)])))))

## For sobol() examples, see demo(sobol_examples)

qrng documentation built on May 29, 2024, 2:02 a.m.

Related to qrng in qrng...