the most stupid randomization problem
David McFarlane
mcfarla9 at msu.edu
Thu Mar 18 14:56:53 UTC 2010
Hmm, interesting puzzle, not your typical "randomize without consecutive
repeats" problem. First let's make sure that I have it right. Your
stimuli consist of single digits from 0 to 9, and you want to present
these in a somewhat random trial sequence such that each stimulus
follows every other stimulus (except itself) exactly once. Do I have
that right so far? If so, then I believe you will need 91 trials to do
this, and the final trial will always be the same as the first. Also,
although PST's bogosort- (look that up on Wikipedia) style algorithm in
their NoRepeat.es example may work in simple cases, it would almost
certainly fail to produce a solution in any reasonable time for your
criteria. And you would still need to write the code to filter for your
criteria (which are more complicated than merely no consecutive
repeats), which would present another tough challenge. The method I
present here may be no easier to program, but at least it does provide a
full solution that will run in a deterministic time frame.
Now, I like to think of these puzzles in terms of how I would do them
manually with decks of cards or with pencil and paper. I also like to
reduce them to a simpler example and then scale up later. So let's look
at how we might arrange a sequence of simply 1, 2, and 3 following your
criteria.
I might start by writing a list of all trial (or stimulus) transitions
that meet our criteria, and then shuffle that list. Note that for 1 2 3
we have six such possible transitional pairs, and here is one such list
for the sake of discussion (note there are 6! = 720 possible such
shuffled lists for 1 2 3):
1 2
1 3
2 1
2 3
3 1
3 2
Now, I start with the first pair, 1 2, and cross that off the list. I
then look for the next unused pair that begins with 2, which in this
case is 2 1. So I append the 1 to our full trial sequence (bringing it
to 1 2 1) and cross that pair off the list. Then I look for the next
unused pair that begins with 1 (cycling through to the top of the list
if necessary), and that brings us to 1 3. So we append 3 to our full
sequence. Next we come to 3 1, and append 1 to our sequence. Next we
come to ... oh oh! No more unused pairs that start with 1 to pick up,
and we still have 2 3 and 3 2 left over. Well then, we just move down
to 3 2 instead, and append 2 to our sequence. Next we get to 2 3, and
finally to 3 1, and that brings our full sequence to (drum roll, please),
1 2 1 3 2 3 1.
Please check my work now and make sure that I got it right. And note
that our sequence consists of (nStim * (nStim-1) + 1) = 7 trials, and
starts and ends with 1. Then try this with some examples of your own
and see how it works.
Now you merely have to implement that in E-Prime code, and I leave that
as a programming exercise. If it were me I might well first work this
out in Excel with a combination of Excel functions and custom Excel VBA
macros, starting with the simplest example as above and then scaling up
to my full stimulus set. Once I got it all working in Excel I would
then port it over to E-Prime.
Now here is another way to see the same algorithm, and in a way that may
make it more programmable. This time, for each stimulus we make a
separate list of what stimuli may follow it, and shuffle each list
separately. For stimuli 1 2 3 we get three lists, e.g.,
1 2 3
- - -
2 1 2
3 3 1
This time, we start by picking one list at random, say, 2. So we start
our full trial sequence with 2, and take the next unused item in list 2,
i.e., 1. Append that to our sequence (now 2 1), then take the next
unused item from list 1 to append to our sequence (2 1 2). Back to list
2, next unused item is 3, take that (2 1 2 3). Over to list 3, next
unused item is 2 (2 1 2 3 2). Oops! No more items in list 2. So
return that 2 to list 3 and instead take the next item, 1 (2 1 2 3 1).
Over to list 1, next unused item is 3 (2 1 2 3 1 3). On to list 3, pick
up that remaining 1, and we are done:
2 1 2 3 1 3 1.
Voila! Once again, I now leave this algorithm as an E-Prime programming
exercise.
Note that this algorithm may be generalized to handle a wide variety of
randomization with constraint problems. Finally, astute readers will
notice that I have here presented a scaled-down version of the beautiful
algorithm published in Remillard, G., & Clark, J. M. (1999) "Generating
fixed-length sequences statisfying any given nth-order transition
probability matrix", Beh Res Meth, Instr, & Computers 31: 235-243 (and
refined more recently in Remillard, G. (2008) "A program for generating
randomized simple and context-sensitive sequences", Beh Res Meth 40 (2):
484-492). I highly advise all to look at those fine papers.
-- David McFarlane, Professional Faultfinder
"When all is said and told, the 'naturalness' with which we use our
native tongues boils down to the ease with which we can use them for
making statements the nonsense of which is not obvious." Edsger W.
Dijkstra, "On the foolishness of 'natural language programming'",
http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD667.html .
leylo wrote:
> I'm really new in this world of e-prime, and I am embarassed to post
> this question that will probably make you all laugh, but I would
> really appreciate your help because I'm stuck with this part and I
> have to finish this experiment, and I have to do it fast.
>
> Problem is: 90 trials of random numbers from 0 to 9, but so that
> every number follow every other once and only once, and consecutive
> presentations are not allowed.
>
> I guess I would have to use that "No Repeat" Script, but you can get
> the idea from my question that my knowledge of programing is not so
> great, so if someone could explain this to me using my example or if
> someone have some other idea.... that would help me a lot.
>
> Thanks in advance!
--
You received this message because you are subscribed to the Google Groups "E-Prime" group.
To post to this group, send email to e-prime at googlegroups.com.
To unsubscribe from this group, send email to e-prime+unsubscribe at googlegroups.com.
For more options, visit this group at http://groups.google.com/group/e-prime?hl=en.
More information about the Eprime
mailing list