[alicebot-archcomm] more random <random>

Dr. Richard S. Wallace alicebot-archcomm@list.alicebot.org
Sun, 28 Apr 2002 12:06:50 -0700


My suggestion is to pick up a statistics book.

Rich

----- Original Message -----
From: "Noel Bush" <noel@alicebot.org>
To: "Alicebot and AIML Architecture Committee"
<alicebot-archcomm@list.alicebot.org>
Sent: Sunday, April 28, 2002 12:02 PM
Subject: Re: [alicebot-archcomm] more random <random>


> Thanks, John and Rich, for the informative replies.
>
> I guess my concern has to do with an unanswered requirement that seems
> to be lurking, not the nature of randomness itself.  The point about
> never finding an even distribution in a small sample is definitely
> important.  And it helps me to understand better the need for a
> variation on the <random> theme, as was recently discussed on the
> mailing list.
>
> As in,
>
> <shuffle>
>   <li>One thing.</li>
>   <li>Another thing.</li>
>   <li>And so on.</li>
> </shuffle>
>
> In which one item is chosen each time, "randomly" (without further
> discussing what that is), and then the same element will not be chosen
> again in the same bot-user context until all elements from the <shuffle>
> have been "used up".
>
> I think this meets a need for what people would tend to mislabel
> "random" (myself included).  It could be that this function is even more
> needed than an actual <random>, since people are actually seeking a way
> to create "varied, not-so-repetitive" responses, not really something
> that corresponds to a mathematical definition of random.
>
> On Sun, 2002-04-28 at 20:30, John Foderaro wrote:
> >
> >
> > >> The problem is that if two different <random> elements are
> > >> imagined to each have an independent random "space", tying all of
their
> > >> choices to the same sequence of pseudo-random numbers really throws a
> > >> wrench into the works.
> >
> >  I know what you're saying but I don't think there is anything to worry
> > about.  Random number generators will produce a nice even distribution
> > but only over a very large number of samples.  If you're asking
> > for a random number between 0 and 4 (inclusive) and call random 5
> > times you almost certainly won't get each number chosen once.
> > And that's the correct result since the odds of that happening
> > if the random number generator were truly random is very small.
> >
> > I wrote little test program to show this:
> >
> > If I chose 5 random numbers I get one 2, two 3's and 2 4's.
> >
> > cl-user(31): (testit :count 5)
> > 0: 0  0.0d0
> > 1: 0  0.0d0
> > 2: 1  0.2d0
> > 3: 2  0.4d0
> > 4: 2  0.4d0
> >
> >
> > If I chose one million random numbers I get this distribution.
> > Now the distribution is very nice over the 5 possible numbers:
> >
> > cl-user(32): (testit :count 1000000)
> > 0: 199398  0.199398d0
> > 1: 199834  0.199834d0
> > 2: 200394  0.200394d0
> > 3: 200158  0.200158d0
> > 4: 200216  0.200216d0
> >
> >
> >
> > Suppose that after every 7th random number I obtain I call
> > the random number generator and throw away the value.  This is
> > simulating the case of running another <random> tag with a
> > different number of elements.
> >
> > We still end up with a nice distribution:
> >
> > cl-user(34): (testit :count 1000000 :toss-out 7)
> > 0: 200119  0.200119d0
> > 1: 200194  0.200194d0
> > 2: 199914  0.199914d0
> > 3: 199833  0.199833d0
> > 4: 199940  0.19994d0
> >
> >
> > So I don't think there is any need to create multiple independent
> > random number sequences, one for each <random> tag.
> >
> >
> > --john foderaro
> >
> > ps. here's my test code
> >
> > (in-package :user)
> >
> > (defvar results (make-array 5))
> >
> > (defun testit (&key (count 10000) (toss-out 0))
> >   (dotimes (i (length results)) (setf (svref results i) 0))
> >
> >   (dotimes (i count)
> >
> >     ; throw out a random result periodically
> >     (if* (and (> toss-out 0)
> >       (zerop (mod i toss-out)))
> >        then (random (+ (length results) 4)))
> >
> >     ; now collect some random info
> >     (incf (svref results (random (length results)))))
> >
> >   (dotimes (i (length results))
> >     (format t "~d: ~d  ~s~%"
> >     i
> >     (svref results i)
> >     (/ (float (svref results i) 1.0d0) count)))
> >   )
> > _______________________________________________
> > alicebot-archcomm mailing list
> > alicebot-archcomm@list.alicebot.org
> > http://list.alicebot.org/mailman/listinfo/alicebot-archcomm
> >
>
>
> _______________________________________________
> alicebot-archcomm mailing list
> alicebot-archcomm@list.alicebot.org
> http://list.alicebot.org/mailman/listinfo/alicebot-archcomm