Our members are dedicated to PASSION and PURPOSE without drama!

Stats about length of time before all numbers hit

Started by Teorulte, December 16, 2014, 01:10:22 AM

Previous topic - Next topic

0 Members and 4 Guests are viewing this topic.

Teorulte

Hi folks,

I analyzed 5 million RNG single zero spins to gather some stats about how many spins go by before all 37 numbers have hit.

There were 32 209 sessions. 

Least amount of spins where all 37 numbers hit was 60.  This happened once.  37 numbers hitting in less than 66 spins occurred only 4 times. 

Most amount of spins before all numbers hit was 525.

Average number of spins before all numbers hit was 155.
Median was 147 spins. 

I have attached a file that shows the stats. 

The left is the session length, and the right number is how many times a session ended in the test. 

So:

60   1
61   0
62   0
63   1

Only once a session ended at spin 60 and spin 63 (the last "sleeper" hit on that spin) and never did a session end on spin 61 or 62.

iggiv

525 is an amazing number. Hard to believe but i am sure it's true.
Good lesson for those chasing sleepers. Thank you for interesting info.

Teorulte

Quote from: iggiv on December 16, 2014, 01:51:19 AM
525 is an amazing number. Hard to believe but i am sure it's true.
Good lesson for those chasing sleepers. Thank you for interesting info.

You're welcome and thanks for the comment.  :)

Teorulte

Hi folks,

I just analyzed 5 million spins but focused on when one of the last two sleepers hit.

There were 42 175 sessions.

Minimum amount of spins before 36/37 numbers hit was 52. 

Maximum amount of spins before 36 out of 37 numbers hit was 314 spins.

Average session length when one of the last 2 sleepers to hit was 118.5 spins.

Median was 115.

Again I have attached a file with the stats in detail.


Dane

Hi Teorule,
Some decades ago I read some German "Schedules" with "PLEIN-ROTATIONEN" (cycles á 37 spins).
Your impressive stats confirm the old truth that sleepers can sleep very long.
Your stats on the two most sleeping numbers may inspire someone to look at sleeping splits.
In area 0-36 there are 60 splits (cheveaux).
The old German roulette stats also included repeats. I hope that you´ll pay attention to repeats too!
"THERE IS AN OCEAN OF VAST PROPORTION
AND SHE FLOWS WITHIN OURSELVES"
               Donovan Leitch

Superman

QuoteMost amount of spins before all numbers hit was 525

I've had 1 number sleep for 647 spins when I did the same type of test you have done, and that was probably 5 years ago now. Since then I have deduced, speaking for RNG play at NoZero BetVoyager, the best bet odds you can get is 50/50 could be 18 numbers or red/black, every bets a guess at the end of the day, even on live wheels. Why is 50/50 the best, well, compare it with playing 24 numbers on double dozens, more wins bigger losses, 50/50 medium wins and easier to recover/chase. All my tests lately are purely MM betting 1 colour.
There's only one way forward, follow random, don't fight with it!

Ignore a thread/topic that mentions 'stop loss', 'virtual loss' and also when a list is provided of a progression, mechanical does NOT work!

Bayes

Thanks, Teo.

I wrote a similar program a while ago to generate these kinds of stats. There's a classic problem in probability called the "Coupon Collector's Problem":

Given N coupons, how many draws do you have to make before you've drawn each coupon at least once?

Obviously, in a roulette context, the coupons are spins, but you could apply it to streets, double-streets etc, just replace 37 with 12, 6 or whatever.

The program can find the average number of trials in cases where not all coupons are collected, and also the probability that at least X coupons will be collected within Y trials. e.g. The "law of the third" says that roughly 24 unique numbers will hit in 37 trials, but what is the probability that at least 24 numbers will hit in 37 trials?

The program input is:

Quotecoupons 24 37 37

output:

QuoteAverage number of trials needed to collect
24 coupons from a set of 37 coupons = 38

Maximum number of trials needed was 69
Minimum number of trials needed was 24

Probability of collecting at least
24 coupons in 37 trials = 51.489 %

Or, what is the probability that in 20 spins, at least 8 streets will have shown up?

Input:
Quotecoupons 8 12 20

Output:

QuoteAverage number of trials needed to collect
8 coupons from a set of 12 coupons = 13

Maximum number of trials needed was 35
Minimum number of trials needed was 8

Probability of collecting at least
8 coupons in 20 trials = 98.77 %

This program was purely for my own use, so it only runs on a Linux command line, but if anyone's interested, here's the code (it would be quite easy to re-write in the language of your choice):

'-----------------------------------------------------------
' Given n coupons, how many coupons do you expect you need
' to draw with replacement before having drawn each coupon
' at least once?
' http://en.wikipedia.org/wiki/Coupon_collector%27s_problem
' The program finds the average number of trials in cases
' where not all coupons are collected, also the maximum
' and minimum number of trials, and the probability that
' at least m coupons will be collected within v trials.
'-----------------------------------------------------------
'xfce4-terminal -H --geometry 90x30 -e @
OPTION BASE 1

'can take a long time for large N.
CONST RUNS = 100000

SPLIT ARGUMENT$ BY " " TO arg$ SIZE dim
IF dim < 4 THEN
   PRINT "Usage: coupons <m> <n> <v>"
   PRINT "m: Number of coupons to be collected (m <= n)"
   PRINT "n: Number of coupons in the set."
   PRINT "v: Number of trials within which the probability"
   PRINT "is P that all coupons are collected."
   END
ENDIF

M = VAL(arg$[2])
N = VAL(arg$[3])
V = VAL(arg$[4])

GLOBAL coupons TYPE NUMBER ARRAY N
DECLARE t[RUNS]

trials = 0
sum = 0
class = 0
max_trials = 0
min_trials = 99999

FOR i = 1 TO RUNS
   REPEAT
      x = RANDOM(N) + 1
      INCR trials
      INCR coupons[x]
      drawn = 0
     
      FOR j = 1 TO N
         IF coupons[j] > 0 THEN INCR drawn
      NEXT j
     
      IF drawn = M OR drawn = N THEN
         t[i] = trials
         INCR sum, trials
         
         IF trials <= V THEN INCR class
         
         FOR k = 1 TO N
            coupons[k] = 0
         NEXT k
         
         ' get max & min
         IF trials > max_trials THEN
            max_trials = trials
         END IF
         IF trials < min_trials THEN
            min_trials = trials
         END IF
         
         trials = 0
      END IF
   UNTIL drawn = M OR drawn = N
NEXT i

p# = class/RUNS

PRINT
PRINT "Average number of trials needed to collect "
PRINT M, " coupons from a set of ", N, " coupons = ", sum/RUNS + 1
PRINT
PRINT "Maximum number of trials needed was ", max_trials
PRINT "Minimum number of trials needed was ", min_trials
PRINT
IF V NE 0 THEN
   PRINT "Probability of collecting at least "
   PRINT M, " coupons in ", V, " trials = ", 100 * p#, " %\n"
END IF


And I've attached the binary, in case there are any Linux users here.
[attachurl=1]

Teo, I wasn't trying to hijack your thread or steal your thunder, so feel free to delete if you like! (I just thought it seemed like an on-topic contribution).

Teorulte

Thank you Superman and Dane for the helpful posts!

Teorulte

Bayes,

Thanks for your most helpful post, and attachment!  You really are an asset to the forum, and really know your stuff!  It is a great thing you are a mod here. 

:thumbsup:

Teorulte

Quote from: Superman on December 16, 2014, 08:13:51 AM
I've had 1 number sleep for 647 spins when I did the same type of test you have done, and that was probably 5 years ago now. Since then I have deduced, speaking for RNG play at NoZero BetVoyager, the best bet odds you can get is 50/50 could be 18 numbers or red/black, every bets a guess at the end of the day, even on live wheels. Why is 50/50 the best, well, compare it with playing 24 numbers on double dozens, more wins bigger losses, 50/50 medium wins and easier to recover/chase. All my tests lately are purely MM betting 1 colour.

Imspirit ran extensive tests on a perfectly fair 50/50 game and basically just reaffirmed what we believed, and what you post here.  The best I can do (now at least) is just play a non zero wheel.  I remember he had an even chance that stayed ahead of the other for billions or maybe even trillions of spins. 

binarytech

Quote from: Bayes on December 16, 2014, 10:04:10 AM
Thanks, Teo.

I wrote a similar program a while ago to generate these kinds of stats. There's a classic problem in probability called the "Coupon Collector's Problem":

Given N coupons, how many draws do you have to make before you've drawn each coupon at least once?

Obviously, in a roulette context, the coupons are spins, but you could apply it to streets, double-streets etc, just replace 37 with 12, 6 or whatever.

The program can find the average number of trials in cases where not all coupons are collected, and also the probability that at least X coupons will be collected within Y trials. e.g. The "law of the third" says that roughly 24 unique numbers will hit in 37 trials, but what is the probability that at least 24 numbers will hit in 37 trials?

The program input is:

output:

Or, what is the probability that in 20 spins, at least 8 streets will have shown up?

Input:   

Output:

This program was purely for my own use, so it only runs on a Linux command line, but if anyone's interested, here's the code (it would be quite easy to re-write in the language of your choice):

'-----------------------------------------------------------
' Given n coupons, how many coupons do you expect you need
' to draw with replacement before having drawn each coupon
' at least once?
' http://en.wikipedia.org/wiki/Coupon_collector%27s_problem
' The program finds the average number of trials in cases
' where not all coupons are collected, also the maximum
' and minimum number of trials, and the probability that
' at least m coupons will be collected within v trials.
'-----------------------------------------------------------
'xfce4-terminal -H --geometry 90x30 -e @
OPTION BASE 1

'can take a long time for large N.
CONST RUNS = 100000

SPLIT ARGUMENT$ BY " " TO arg$ SIZE dim
IF dim < 4 THEN
   PRINT "Usage: coupons <m> <n> <v>"
   PRINT "m: Number of coupons to be collected (m <= n)"
   PRINT "n: Number of coupons in the set."
   PRINT "v: Number of trials within which the probability"
   PRINT "is P that all coupons are collected."
   END
ENDIF

M = VAL(arg$[2])
N = VAL(arg$[3])
V = VAL(arg$[4])

GLOBAL coupons TYPE NUMBER ARRAY N
DECLARE t[RUNS]

trials = 0
sum = 0
class = 0
max_trials = 0
min_trials = 99999

FOR i = 1 TO RUNS
   REPEAT
      x = RANDOM(N) + 1
      INCR trials
      INCR coupons[x]
      drawn = 0
     
      FOR j = 1 TO N
         IF coupons[j] > 0 THEN INCR drawn
      NEXT j
     
      IF drawn = M OR drawn = N THEN
         t[i] = trials
         INCR sum, trials
         
         IF trials <= V THEN INCR class
         
         FOR k = 1 TO N
            coupons[k] = 0
         NEXT k
         
         ' get max & min
         IF trials > max_trials THEN
            max_trials = trials
         END IF
         IF trials < min_trials THEN
            min_trials = trials
         END IF
         
         trials = 0
      END IF
   UNTIL drawn = M OR drawn = N
NEXT i

p# = class/RUNS

PRINT
PRINT "Average number of trials needed to collect "
PRINT M, " coupons from a set of ", N, " coupons = ", sum/RUNS + 1
PRINT
PRINT "Maximum number of trials needed was ", max_trials
PRINT "Minimum number of trials needed was ", min_trials
PRINT
IF V NE 0 THEN
   PRINT "Probability of collecting at least "
   PRINT M, " coupons in ", V, " trials = ", 100 * p#, " %\n"
END IF


And I've attached the binary, in case there are any Linux users here.
[attachurl=1]

Teo, I wasn't trying to hijack your thread or steal your thunder, so feel free to delete if you like! (I just thought it seemed like an on-topic contribution).

Would you be willing to share your Labby 1.5 source code? I wanted to make some modifications such as a reverse Labouchere  function.