[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Bug-gnubg] Rotating rolls in rollout
From: |
nis |
Subject: |
Re: [Bug-gnubg] Rotating rolls in rollout |
Date: |
Fri, 04 Oct 2002 15:19:26 +0200 |
--On 04 Oct 2002 13:44 +0200 Jim Segrave <address@hidden> wrote:
On Fri 04 Oct 2002 (13:23 +0200), Nis Jorgensen wrote:
Perhaps something like this (pseudocode)
RollUsed(TrialNumber,Rollnumber) =
Sum for k = 0 to (Rollnumber - 1)
of
((Trialnumber div (36^k)) mod 36)
mod 36
What happens to the results if you do something simple minded like:
create an array of rolls with
1296 elements. Initialise with 1111 1112 1113 .. 6664 6665 6666
Use the seed to randomise the array - for example, generate two
random nos. i and j in the range 0..1295 and swap array[i] with
array[j]. Repeat at least 648 times.
That is not a good randomization strategy. You should do
For i = 0 to 1295
create random j between i and 1295
swap array[i] and array[j]
Next
Then by a simple proof by induction, the array is as random as your random
numbers.
This does not, however, provide the maximum stratification if the number of
trials is not a multiple of 1296. Thus I would prefer to put a little more
effort into creating the array of rolls. My best idea so far is to cycle
the first roll through the same sequence of 36 rolls, and cycling the
second roll through the same sequence, but 'sliding' the sequence before
each sequence of 36. Something like (still pseudocode:
Create array36 containing 11,12,...,66
Randomize Rolls36 as described before
Create empty array of 1296
for i = 0 to 35
for j = 0 to 35
array[i*36+j] = (array36[j], array36[i+j mod 36])
Then use this array sequentially (and circularly, dropping initial
doubles when rolling out initial positions) to supply the first two
rolls. This gives you a pseudo-random but repeatable set of roll
pairs and the processor cost is not very high - filling the array and
randomising it is relatively cheap, after that, during the rollouts
you don't have to keep track of what you've used.
I am not sure about "dropping the initial doubles" during the rollout. I
think rather we should make an array of 30*36 for that case.
--
Nis Jorgensen
Amsterdam