Is there any "universal" random seed setter in sage?

89 views
Skip to first unread message

P Purkayastha

unread,
Nov 5, 2012, 11:08:08 PM11/5/12
to sage-s...@googlegroups.com
Hi,
I have been using the following to generate reproducible sequence of
random numbers

sage: D = GeneralDiscreteDistribution([0.5, 0.5]); D.set_seed(0)
sage: [D.get_random_element() for _ in xrange(5)]
[1, 0, 0, 1, 0]
sage: D.set_seed(0)
sage: [D.get_random_element() for _ in xrange(5)]
[1, 0, 0, 1, 0]

Why so? Because the set_random_seed(0) call does not set the random seed
for all random number generators:

sage: D = GeneralDiscreteDistribution([0.5, 0.5]);
sage: set_random_seed(0)
sage: [D.get_random_element() for _ in xrange(5)]
[1, 0, 0, 0, 0]
sage: [randint(1,9) for _ in xrange(5)]
[2, 5, 1, 3, 5]
sage: set_random_seed(0)
sage: [D.get_random_element() for _ in xrange(5)]
[1, 0, 1, 0, 1]
sage: [randint(1,9) for _ in xrange(5)]
[2, 5, 1, 3, 5]

So, my question is - is there any "universal" command which can set the
seed for _all_ random number generators in Sage?

William Stein

unread,
Nov 6, 2012, 8:07:00 AM11/6/12
to sage-s...@googlegroups.com
No.  set_random_seed is supposed to be that, but for some reason that I don't understand it doesn't set Python's own random seed.  I've brought this up before, though.   Here's the code I use for seeding the random number generator in my forking sage server (some code from https://salv.us):

    # seed the random number generator(s)
    import sage.all; sage.all.set_random_seed()
    import time; import random; random.seed(time.time())

Nobody's heard in years from the person who wrote Sage's set_random_seed, so I doubt he'll way in.

 -- William
Reply all
Reply to author
Forward
0 new messages