[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