In [8]:
from __future__ import print_function
import sdm as sdmlib
from sdm import utils
import numpy as np
import matplotlib.mlab as mlab
from IPython.display import clear_output
import matplotlib.pyplot as plt
In [9]:
#bits, radius = 1000, 451
bits, radius = 256, 103
p = utils.calculate_probability(bits, radius)
#p = 0.00107185004892
sample = 1000000
scanner_type = sdmlib.SDM_SCANNER_OPENCL
address_space = sdmlib.AddressSpace.init_random(bits, sample)
address_space.opencl_init();
In [10]:
p
Out[10]:
In [11]:
counter = []
In [12]:
for i in range(10000):
if i%100 == 0:
clear_output(wait=True)
print(i)
bs = sdmlib.Bitstring.init_random(bits)
result = address_space.scan_opencl2(bs, radius)
counter.append(len(result))
In [13]:
mu = sample*p
sigma = (sample*p*(1-p))**(0.5)
x = np.linspace(0, 2000, 2000)
y = mlab.normpdf(x, mu, sigma)
print(mu)
print(sigma)
In [14]:
plt.figure(figsize=(8, 6), dpi=100)
plt.hist(counter, bins=50, density=True)
label = u'$\mu={:.2f}$, $\sigma={:.2f}$'.format(mu, sigma)
plt.plot(x, y, 'r', linewidth=2.0, label=label)
plt.xlim(mu-4.5*sigma, mu+4.5*sigma)
plt.legend()
plt.show()
In [ ]: