Guess the Random Seed

March 12, 2010
By

(This article was first published on Statistics, R, Graphics and Fun » R Language, and kindly contributed to R-bloggers)

Stephanie asked in 511 today if we were able to get the random seed which was set by set.seed() but we were only given the random numbers (without knowing the seed). This kind of “hacker” questions sound interesting. One dirty solution should be the brute-force method, e.g:

# x: the random vector;
# FUN: the function that generates random numbers with the first argument
#      being the length of random numbers
# seed: candidate seeds to be tried one by one
# ...: other arguments to be passed to FUN
find.seed = function(x, FUN = rnorm, seed = 0:10000, ...) {
    res = NULL
    for (i in seed) {
        set.seed(i)
        rx = FUN(length(x), ...)
        # all() can be changed to all.equal() to obtain a rough solution
        #     allowing a little bit numeric errors
        if (all(x == rx)) {
            res = i
            break
        }
    }
    res
}

Of course it is not a good solution, although it might work:

> set.seed(1)
> test = rnorm(30)
> find.seed(test)
[1] 1
> set.seed(1234)
> test = rnorm(30)
> find.seed(test)
[1] 1234
> set.seed(987)
> test = runif(30, min = -1, max = 2)
> find.seed(test, runif, min = -1, max = 2)
[1] 987

Beside the probably very long computation time, the other disadvantage is we need to know the range of the seed. This could be obtained by some “prior” information. For instance, we may guess Dr Nettleton will not set a random seed greater than one million or less than 0.

Usually the random seed is obtained from a certain state of the computer such as the system time. I have an old example in this post: Random Number Generation on the Glasses (A Natural RNG).

Related Posts

To leave a comment for the author, please follow the link and comment on his blog: Statistics, R, Graphics and Fun » R Language.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...



If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Tags: , , , ,

Comments are closed.