The entire database is first converted into a 24 bit binary string for MM, my 5-39 has 20 bits.
The self-biasing prng works like this. It first reads the columns of data one position at a time.
For MM it makes 24 predictions overall.
Lets say that within the last 500 games the first digit, ie the left most digit shows (0) 53% of
the time and digit (1) shows 47%.
To bias the prng without effecting it's randomness the program next builds a string of 100 digit (0)'s,
this value is adjustable for fine tuning.
Next it would randomly replace 47 of the 0's with 1's. The string now has 53% zeros and 47% ones.
Next a random value is generated from 1 to 100. Lets say the value 29 is produced. The program
would then read the 29th value from the 100 digit string. If it's a 0 then it predicts 0 or if it's a 1 then
it predicts a 1.
The result is random but will show a bias that matches that of the games history. This method does not
seem to effect the overall randomness. If 47% of the digits within the string are 1's then the around 47%
of the predicted values will also be a 1 and likewise the zeros would average 53%. It's kind of like adding
or subtracting weights which is common in other predictors.
We should expect around 50 percent to match being that the predictor is random but I have seen hit rates
up to near 70 overall and close to 90% for a few of the predictions. For MM the expected matches is 12
plus or minus the standard deviation. 20 of 24 is 83%. This is just a experiment but because I can tweak
a few things it might work out.
All the conversions are handled by the program and it can convert between three to four thousand lines per
second. For testing I normally generate 100 lines which is fairly simple to filter down to a hand full without
much risk of loosing the 5of5 provided it's in the lines produced. I have yet to get a perfect prediction but
I seem to be making headway, it's slow but I think it's worth the effort.
RL