For each number of sample size, I run one instance of the simulation. Each one represents 1 block of a coin.
I generate a solve time for that block. Our constant variable is the block solve time, which represents an average. I generate a random number between 1/2 of it, and 1.5x of it, this is the solve time for this particular block. Remember, by the very definition of the word average, future values will be evenly balanced across both sides.
You just don't get it, do you? This is precisely what's wrong, as we've pointed it out over and over again. If you want to use solve times, you have to use those for a Poisson process. Writing a simulation that utilises the results of this wrong distribution.
Stop spreading your factually incorrect point over and over and address the criticism.
Edit:
This would be a better example of how it works. Maybe it'll make you understand it better. Note the complete lack of independence from block find time, even in the source.
import random
import numpy as np
class worker():
def __init__(self,hashrate):
self.hashrate = hashrate
self.sharesolvetime = 60. / hashrate
self.solvechance = 1/self.sharesolvetime #solve chance per unit time
self.shares = 0
class pool():
def __init__(self,blockfindtime):
self.blockfindtime = blockfindtime
worker1 = worker(1)
worker2 = worker(12)
duration = 10000 #the higher the better
timestep = 0.001 #should be as low as posible,
# worker1.solvechance*timestep must be as close to zero as possible
# to be factually accurate
for bft in np.logspace(0.1,3,5):
pool1=pool(bft)
for t in np.linspace(0,duration,duration/timestep + 1):
rand = random.uniform(0,1)
rand2 = random.uniform(0,1)
if rand<(worker1.solvechance*timestep):
worker1.shares+=1
if rand2<(worker2.solvechance*timestep):
worker2.shares+=1
print "Worker 1 has: " + str((float(worker1.hashrate) / float(worker2.hashrate + worker1.hashrate)) * 100) + ' percent of the hash power'
print "But worker 1 has: " + str((float(worker1.shares) / float(worker2.shares + worker1.shares)) * 100) + ' percent of the profit'
print "When worker1's average share-find-speed was: " + str((float(pool1.blockfindtime) / float(worker1.sharesolvetime))) + "x Block find speed"
print "Over sample size of " + str(duration/timestep+1) + " steps \n"