Scrambled Sobol

359 Views Asked by At

I need to do a Monte Carlo simulation in high dimension (up to 1000) where using plain Sobol (with Kuo's direction vectors) as a random number generator is not good enough. Therefore I am investigating scrambled Sobol sequences, and I am looking for an easy to code approach. The method described in "On the scrambled sobol sequence" by Chi, Beerli, Evan, Mascagni (2005) seems simple enough from a coding point of view, however I don't understand how it is supposed to work.

According to the paper the procedure to go from $x_n$ (the $n$th Sobol point) to $z_n$ (its scrambled form) is the following:

$$y_n = \lfloor x_n * 2^k \rfloor$$

$$y_n^* = a y_n (\mod \; m)\mbox{ and }m \ge 2^k - 1$$

$$z_n = {y_n^* \over 2^k} + \left(x_n - {y_n \over 2^k}\right).$$

It seems to me that if $m \ge 2^k-1$ then ${y_n^* \over 2^k}$ can be much larger than 1 and so will be $z_n$, which is obviously not desirable for a standard uniform variate. The only way I see it working is either by taking $m = 2^k - 1$ or by replacing the 3rd equation with $z_n = {y_n^* \over m} + (x_n - {y_n \over 2^k})$. Apparently the article hints that they use $m = 2^{31} - 1$ so solution 1 is ruled out. Solution 2 (with $m = 2^{31}-1$ and $a = 1132489760$ or other values from "Tables of linear congruential generators of different sizes and good lattice structure" by L'Ecuyer ) does not give good results in my Monte Carlo simulation. Am I missing something obvious?