Random algorithm
Randall Reetz
randall at randallreetz.com
Sat Nov 15 12:44:15 EST 2008
This is good detextive work. Good science. I think richard has found out how long the truncated ticks number is that rev uses as a seed.
-----Original Message-----
From: "Dave Cragg" <dave.cragg at lacscentre.co.uk>
To: "How to use Revolution" <use-revolution at lists.runrev.com>
Sent: 11/15/2008 12:55 AM
Subject: Re: Random algorithm
On 13 Nov 2008, at 19:38, Richard Gaskin wrote:
> So unless I'm missing something obvious (and it certainly wouldn't
> be the first time), beginning with a fresh seed as Rev does and then
> resetting it each time during the session seems a fair way to avoid
> discernible reproducible patterns for most applications.
Sorry for going back to this, but I'd just like to repeat my concern
for resetting the seed using a "random" value. I may have
misunderstood what "resetting it each time" means. In some posts
people have talked about resetting it before "each run" and others
have talked about resetting before each call to the random function.
My concern was with a particular "each run" situation.
Say the task is to produce 5000 sets of 5 random numbers from 1 to
1000. (perhaps for a gaming task) The straightforward way to do this
is to use the default Rev seed and call random(1000) 25000 times,
dividing the results into 5000 sets of 5.
An alternative would be to reset the randomSeed before generating each
set of five numbers. At first glance, this might seem like a
reasonable thing to do. But depending on how the seed is set, it could
produce unwanted results. In the second script below, the seed is
reset using the random of an incremented number. (4570422 incremented
by 1 to avoid getting stuck with the same seed)
The two scripts measure the number of repeated sequences that are
generated by the two methods. The first method has yet to produce a
repeated sequence here. But the second produces repeated sequences on
almost every run. So by resetting the seed for "each run", the
occurrence of a repeated sequence changes from a highly improbable
event to a fairly safe bet.
Cheers
Dave
METHOD 1 (no resetting)
on mouseUp
repeat 5000
put empty into tVal
repeat 5
put random(1000) & "," after tVal
end repeat
add 1 to tValArray[tVal]
end repeat
put 0 into tCount
repeat for each element tEl in tValArray
if tEl > 1 then
add 1 to tCount
end if
end repeat
put tCount
end mouseUp
METHOD 2 (reset on every "set")
on mouseUp
-----------------------
put 4570422 into tSeedBase
[truncated by sender]
More information about the use-livecode
mailing list