[Newbies] Randomness

David T. Lewis lewis at mail.msen.com
Thu Apr 7 01:44:54 UTC 2011


The new behavior should be the same as what you would get using
an Etoys image rather than a Squeak trunk image. So if the scenario
that you describe works properly in an Etoys image, it should now
also work properly in an updated Squeak trunk image.

There is an instance of Random (in other words an individual random
number generator) associated with the class Collection. This random
number generator is used whenever selecting a "random" element from
a collection of elements. Random number generators on computers are
not really random at all, but they attempt to create an illusion of
randomness by producing a sequence of apparently random values based
on some arbitrary initial value (the "seed").

In the Etoys image, the single instance of Random that is used in
class Collection (whenever you want to select something "at random")
has its seed value reset whenever a startUp occurs. Normally you want
all your objects to be restarted exactly as they were before, but
a random number generator is different; you really would prefer
to have it behave randomly. The Etoys image has a special #startUp
method that makes this happen, and this is the feature that has
now been added to Squeak.

Dave

On Wed, Apr 06, 2011 at 05:54:34PM -0700, michael rice wrote:
> So it was a problem? The old behavior was: if I saved a project and quit the image without saving it, the next time I bought up the image and loaded the project I would get the same stream of random numbers. What is the new behavior?
> 
> Michael
> 
> --- On Wed, 4/6/11, David T. Lewis <lewis at mail.msen.com> wrote:
> 
> From: David T. Lewis <lewis at mail.msen.com>
> Subject: Re: [Newbies] Randomness
> To: "A friendly place to get answers to even the most basic questions about Squeak." <beginners at lists.squeakfoundation.org>
> Date: Wednesday, April 6, 2011, 8:35 PM
> 
> I made the update in Squeak trunk similar to the Etoys image, but used
> the existing seed generator in Random>>initialize on the theory that if
> the generator is good enough for a new Random, it should be good enough
> for an existing one too ;)
> 
> Michael, thanks for spotting the problem.
> 
> Dave
> 
> On Tue, Apr 05, 2011 at 01:16:31PM +0200, Bert Freudenberg wrote:
> > 
> > On 05.04.2011, at 02:32, Levente Uzonyi wrote:
> > 
> > > On Mon, 4 Apr 2011, michael rice wrote:
> > > 
> > >> I forgot to mention, I'm using the random number tile and scripting. Does that make it more difficult?
> > > 
> > > Not really, RandomNumberTile uses the global random number generator of Collection. I don't know how/why is it serialized/restored
> > 
> > It is not stored in the project. But in trunk, the seed does not get re-initialized when starting up. In the Etoys image, Collection class has a startUp method
> > 
> > startUp
> > ??? RandomForPicking seed: Time totalSeconds hash asFloat.
> > 
> > IMHO we should adopt something like this for trunk (maybe with your "more" random approach below). 
> > 
> > - Bert -
> > 
> > > but here's a method which should help:
> > > 
> > > RandomNumberTile >> #comeFullyUpOnReload: smartRefStream
> > > 
> > > ??? | seed |
> > > ??? [
> > > ??? ??? seed := (Time millisecondClockValue bitAnd: 16r3FFFFFFF) bitXor: self hash.
> > > ??? ??? seed := seed bitXor: (Time totalSeconds bitAnd: 16r3FFFFFFF).
> > > ??? ??? seed := seed bitXor: 16r3FFFFFFF atRandom.
> > > ??? ??? seed = 0 ] whileTrue. "Try again if ever get a seed = 0"
> > > ??? Collection mutexForPicking critical: [
> > > ??? ??? Collection randomForPicking seed: seed ].
> > > ??? ^super comeFullyUpOnReload: smartRefStream
> > > 
> > > It's drawback is that it will reseed the rng for every RandomNumberTile. The best solution would be if Etoys would use a custom Random instance or a subclass where this is done by default.
> > > 
> > > 
> > > Levente
> > > 
> > >> 
> > >> Michael
> > >> 
> > >> --- On Mon, 4/4/11, Levente Uzonyi <leves at elte.hu> wrote:
> > >> 
> > >> From: Levente Uzonyi <leves at elte.hu>
> > >> Subject: Re: [Newbies] Randomness
> > >> To: "A friendly place to get answers to even the most basic questions about Squeak." <beginners at lists.squeakfoundation.org>
> > >> Date: Monday, April 4, 2011, 8:08 PM
> > >> 
> > >> On Mon, 4 Apr 2011, michael rice wrote:
> > >> 
> > >>> I just noticed that when I load a morphic project I get the same stream of random numbers each time. Is there a simple way to install a new different random seed each time the project is loaded?
> > >> 
> > >> If you serialize the Random object, then it will have the same state when it's restored. I guess you should create a subclass of Random, which implements #comeFullyUpOnReload:. That method can reinitialize the seed of the random number generator. You may want to check UUIDGenerator >> #makeSeed if you don't know how to get a good seed for your rng.
> > >> 
> > >> 
> > >> Levente
> > 
> > _______________________________________________
> > Beginners mailing list
> > Beginners at lists.squeakfoundation.org
> > http://lists.squeakfoundation.org/mailman/listinfo/beginners
> _______________________________________________
> Beginners mailing list
> Beginners at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/beginners

> _______________________________________________
> Beginners mailing list
> Beginners at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/beginners



More information about the Beginners mailing list