Random Perl Content

Abigail abigail at abigail.be
Sat May 18 22:29:27 BST 2013


On Sat, May 18, 2013 at 01:53:33PM -0700, Randy J. Ray wrote:
> (It's a pun, see, because I'm going to be asking about random number  
> generators... get it? Get it...?)
>
> (Short, TL;DR summary: I'm looking for a pRNG that can have multiple  
> instances at once that don't affect each others' stream of numbers. Does  
> Math::Random::MT meet that criteria?)
>
> I considered posing this to Perlmonks, but I just don't frequent that  
> site like I used to. And there are enough Large Perl Brains on this list  
> that I should get as good an answer, if not better.
>
> I am looking for a pRNG (pseudo-Random Number Generator) module. But I  
> have an unusual requirement-- I need to be able to instantiate multiple  
> *independent* generators, that can take seeds for the sake of  
> reproducible results. Let me explain...
>
> My current (paying) job is writing frameworks for automated QA of my  
> company's software (mainly the operating system that runs our storage  
> servers). We are working on a new approach to how we structure some of  
> our tests, and that happens to involve the potential of using some  
> randomization to select different paths over a directed graph. But, this  
> being QA-oriented, even if something runs with a degree of randomness to  
> it, it needs to be reproducible at a later time. So, no problem, just  
> create a seed for srand() and log that seed, and also provide users a  
> way to specify a seed at the start. Then you can just re-use the seed  
> and reproduce your results. Right? Well, not exactly...
>
> Other libraries I use, developed by other teams within our company,  
> might also have some randomization in them (like generating random names  
> for disk volumes, randomizing data generation for traffic testing,  
> etc.). Not to mention that we use no small number of CPAN modules, some  
> of which might use rand() as well. I could seed Perl's RNG with a  
> specific seed, but if that run has to try twice to generate a unique  
> file name, instead of one or thrice, that will affect the random numbers  
> *my* code gets.
>
> So my thought was that sure there's a RNG module out there that is OO,  
> and encapsulates the seed and all other internal elements of the  
> generation process. One that I can instantiate multiple instances of,  
> and have them generate streams of random numbers that are independent of  
> each other. The closest I've found is Math::Random::MT, which implements  
> the Mersenne Twister pRNG. But I can't immediately tell from the docs  
> whether the object instances it creates are truly independent of each  
> other or not.
>
> So, is this something anyone else here has dealt with? Are there modules  
> I just haven't stumbled upon yet, that would do this for me? Any help  
> greatly appreciated, as always.



I'm not aware of any Perl modules that provide this functionality,
but on my Linux box, there are the C functions erand48, nrand48
and jrand48. It would be fairly trivial to call those functions
using a few simple lines of XS.



Abigail


More information about the london.pm mailing list