Re: Multiple independent random number streams cannot be implemented.
- To: mathgroup at smc.vnet.net
- Subject: [mg130153] Re: Multiple independent random number streams cannot be implemented.
- From: Sseziwa Mukasa <mukasa at gmail.com>
- Date: Fri, 15 Mar 2013 01:46:30 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
- References: <20130314111450.25C5269D8@smc.vnet.net>
You are asking for the opposite of independent random variables. I can think of a couple of solutions to your problem. If you know how many samples you're going to take you can initialize a vector and have f & g remember where they are in the vector. HiddenRandomStateContext`fpos = 1; HiddenRandomStateContext`gpos=1; HiddenRandomStateContext`randomSequence = RandomReal[{0, 1}, <Maximum number of samples>]; f[]:=HiddenRandomStateContext`randomSequence[[HiddenRandomStateContext`fpos++]] g[]:=HiddenRandomStateContext`randomSequence[[HiddenRandomStateContext`gpos++]] I you can't preallocate the values you have to start with the same seed and iterate: HiddenRandomStateContext`fpos = 1; HiddenRandomStateContext`gpos=1; HiddenRandomStateContext`nthRandomValue[n_] = := Block[{}, SeedRandom[1]; Last[RandomReal[]]]; f[]:=HiddenRandomStateContext`nthRandomValue[HiddenRandomStateContext`fpos++] g[]:=HiddenRandomStateContext`nthRandomValue[HiddenRandomStateContext`gpos++] This of course scales as O(n^2) in time for the nth value. I think you may be able to get a small speed up by memoizing the values of g[] and f[] for different numbers of calls, but I think the larger question is what are you trying to accomplish by this? Regards, Sseziwa On Mar 14, 2013, at 7:14 AM, Roger Wilson <rogerhw999 at gmail.com> wrote: > Hopefully the title is enough of a red flag for someone to try to prove me wrong. > > I want to implement two functions; lets call them f and g so that they both return random numbers. For example... > > f[]:=RandomReal[]; > g[]:=RandomReal[]; > > However I want f and g to return the same number when they're called for the nth time. So the first call to f is always the same number and the first call to g is always the same number. > > In the above case (on my machine)... > SeedRandom[1]; {f[], g[]} gives {0.168697, 0.113119} > > and of course.. > SeedRandom[1]; {g[], f[]} gives the same {0.817389, 0.11142} > > Essentially I want f and g to to be independent random sources. > > It is possible to localize the random number generators using BlockRandom but I do not see how that helps me in this case. BlockRandom localizes the state of the random number generators within the block where as I want to localize them into the symbol names. > > Roger >
- References:
- Multiple independent random number streams cannot be implemented.
- From: Roger Wilson <rogerhw999@gmail.com>
- Multiple independent random number streams cannot be implemented.