suggestion for "improving" prng implementation

Lance lbrannma at cablespeed.com
Wed Oct 16 00:05:33 EDT 2002


Andrew,

Take a look at the papers dealing with random numbers at
www.aptech.com/papers. They describe diehard tests which are the accepted
basis for randomness.

Lance

"andrew cooke" <andrew at acooke.org> wrote in message
news:aef33705.0210151214.2bbd501 at posting.google.com...
> hi,
>
> i know that this isn't a bug - i understand a little about
> multiplicative congruential generators and know that there is not
> intended to be any guarantee of independence between sequences from
> different seeds (hence the jumpahead functionality etc).
>
> however, random numbers are used in a wide range of applications.
> while many require careful thought about the statistical properties,
> others only need something that is "fairly random".  so if there's a
> simple way to make the implementation of the prng more useful in the
> latter group, without harming the former group, then it seems worth
> thinking about.
>
> if you look at the output i'll paste below, you'll see that the first
> couple of values of sequences with neighbouring seed values are
> strongly correlated across sequences (this is understandable, given
> the algorithms used).  but if the first few (4?) values after seeding
> were automatically generated and dropped, then this correlation would
> be unimportant to "fairly random" applications.
>
> a change like this would let a someone writing a game (say) use
> seeding to generate "different" sequences without needing to worry
> that (say) the first move of the computer controlled alien will be to
> the same on successive level, etc etc...
>
> (there is one danger - if people require repeatable sequences from
> seeds across python versions.  this change would break that
> repeatability).
>
> i just want to repeat again that this is simply to make life easier
> for "quick and dirty" uses of the prng.  i am not claiming that this
> change will improve the prng for "serious" use.
>
> cheers,
> andrew
>
> >>> random.seed(123)
> >>> for i in range(10): print random.random(),
> ...
> 0.711800244467 0.717910754873 0.78581128287 0.248291539217
> 0.927000874956 0.767848388239 0.163218671249 0.989680083335
> 0.492734220966 0.941375396456
> >>> random.seed(124)
> >>> for i in range(10): print random.random(),
> ...
> 0.71744958868 0.683948615391 0.978285431339 0.16137092737
> 0.0635762491011 0.122237367062 0.763734050019 0.677809853067
> 0.162924845037 0.543972112568
> >>> random.seed(125)
> >>> for i in range(10): print random.random(),
> ...
> 0.723098932894 0.649986475908 0.170759579808 0.0744503155232
> 0.200151623246 0.476626345885 0.364249428789 0.365939622798
> 0.833115469108 0.146568828681
> >>> random.seed(126)
> >>> for i in range(10): print random.random(),
> ...
> 0.728748277107 0.616024336425 0.363233728276 0.987529703676
> 0.336726997391 0.831015324709 0.96476480756 0.0540693925296
> 0.503306093179 0.749165544793
> >>> random.seed(127)
> >>> for i in range(10): print random.random(),
> ...
> 0.734397621321 0.582062196943 0.555707876745 0.900609091829
> 0.473302371537 0.185404303532 0.56528018633 0.742199162261
> 0.17349671725 0.351762260905
> >>> random.seed(128)
> >>> for i in range(10): print random.random(),
> ...
> 0.740046965534 0.54810005746 0.748182025214 0.813688479982
> 0.609877745682 0.539793282355 0.165795565101 0.430328931992
> 0.84368734132 0.954358977017
> >>> random.seed(129)
> >>> for i in range(10): print random.random(),
> ...
> 0.745696309748 0.514137917978 0.940656173683 0.726767868135
> 0.746453119827 0.894182261178 0.766310943871 0.118458701724
> 0.513877965391 0.556955693129





More information about the Python-list mailing list