Read the paper here!
First, the roulette size and the analytical (henceforth theoretical) or population parameters are calculated.
roulette_size = 37
theoretical_mean = np.mean(np.arange(0, roulette_size))
theoretical_var = np.var(np.arange(0, roulette_size))
theoretical_std = np.std(np.arange(0, roulette_size))
theoretical_frequency = 1 / roulette_size
Roulette
def roulette(throws):
means = []
variances = []
stds = []
frequencies = []
numbers_thrown = []
number_of_frequency = np.random.randint(0, roulette_size)
frequency_count = 0
for i in range(1, throws + 1):
number_thrown = np.random.randint(0, roulette_size)
if number_thrown == number_of_frequency:
frequency_count += 1
frequencies.append(frequency_count / i)
numbers_thrown.append(number_thrown)
means.append(np.mean(numbers_thrown))
stds.append(np.std(numbers_thrown))
variances.append(np.var(numbers_thrown))
return ({'means': np.array(means),
'variances': np.array(variances),
'stds': np.array(stds),
'frequencies': np.array(frequencies)})
Simulation Runs
# The experiment consists of 30 runs
runs = 30
# Runs for 100 roulette throws
means_total_100 = []
stds_total_100 = []
variances_total_100 = []
frequencies_total_100 = []
for i in tqdm(range(runs)):
statistics = roulette(100)
means_total_100.append(statistics['means'])
stds_total_100.append(statistics['variances'])
variances_total_100.append(statistics['stds'])
frequencies_total_100.append(statistics['frequencies'])
# Runs for 15000 roulette throws
means_total_15000 = []
stds_total_15000 = []
variances_total_15000 = []
frequencies_total_15000 = []
for i in tqdm(range(runs)):
statistics = roulette(15000)
means_total_15000.append(statistics['means'])
stds_total_15000.append(statistics['variances'])
variances_total_15000.append(statistics['stds'])
frequencies_total_15000.append(statistics['frequencies'])