[Chicago-talk] Random first numbers
Lee Aylward
lee at laylward.com
Mon May 17 14:49:40 PDT 2010
Hi,
I typically use List::Util's shuffle function. I can't really say if
it will give you better results, though.
--
Lee
On Mon, 17 May 2010 16:25:10 -0500
Alan Mead <amead2 at alanmead.org> wrote:
> I have a CGI-based study coded in Perl that needs to randomly assign
> participants to conditions. The code below sucks:
>
> my @conditions = qw/cond1 cond2 cond3 cond4a/;
> shuffle(@conditions);
> $$state{'condition'} = $conditions[0];
>
> I've just run through a dozen tests and cond3 appeared 90% of the
> time and cond2 10% of the time (cond1 and cond4a never appearing). I
> haven't run the numbers, but I think this is "statistically
> significant". I think my shuffle is a "good" one from the on-line
> Perl lore, but maybe I'm wrong:
>
> #----------------------------------------------------------
> # Durstenfeld's implementation of Fisher and Yates
> #----------------------------------------------------------
> sub shuffle {
> my $n = scalar @_;
> while ( $n > 0 ) {
> $n--;
> my $j = int rand $n;
> ($_[$j], $_[$n]) = ($_[$n], $_[$j]); # swap
> }
> }
>
> Assuming that shuffle() is not the culprit, I think it's just that
> when I run this code quickly/repeatedly, rand() is getting seeded
> with substantially the same value and is generating essentially the
> same initial value. If so, my question is whether there is a better
> way to generate random numbers (so that the first values are more
> random).
>
> I was wondering if anyone agreed/disagreed and whether anyone had a
> "lazy" solution... if not, I can enforce better randomness by keeping
> some sort of state in a database.
>
> -Alan
>
More information about the Chicago-talk
mailing list