Alright. In the main forum, I posted my simulation script showing the skew towards fast miners. If you want the background, read that.
The main criticism was a fair one - I was "cheating" and using 0.5x and 1.5x of the average as the range for my random values for the share time, and block times. It was a shortcut that, admittedly skewed the results, but in such a negligible way that I felt it would still expose the effect. It was essentially cutting off the tiny sliver on the far right end the pierces out into infinity (plus some of the end on both sides). Its a minuscule amount of the distribution, but it
was certainly a fair criticism.
So I did some research. The appropriate distribution is the poisson distribution. This is the same distribution that is used by bitcoin itself to calculate the expected difficulty for the next difficulty change. It is used in the prediction of the network, to maintain the statistical probability of one block every 10 minutes. Bitcoin would collapse without this prediction.
So it turns out theres a wonderful module in python called numpy. It has a built in poisson distribution random generator, making my life easy and making the change a breeze.
The main point about the poisson distribution, that should address the concerns:
The Poisson distribution is not symmetrical; it is skewed toward the infinity end.I also found and fixed a bug in my stats calculation. It didn't change the results enough to invalidate my previous conclusion, but these results should be accurate.
So with that, I reran my tests from before.
Slowest Coin
Worker 1 has: 7.69230769231 percent of the hash power
But worker 1 has: 7.29973071787 percent of the profit
Over sample size of 100000
When worker1's average share-find-speed was: 8.33333333333X the block-find-speed
Slow Coin
Worker 1 has: 7.69230769231 percent of the hash power
But worker 1 has: 6.86225439815 percent of the profit
Over sample size of 100000
When worker1's average share-find-speed was: 4.0X the block-find-speed
Medium Coin
Worker 1 has: 7.69230769231 percent of the hash power
But worker 1 has: 6.00872764122 percent of the profit
Over sample size of 100000
When worker1's average share-find-speed was: 2.0X the block-find-speed
Fast Coin
Worker 1 has: 7.69230769231 percent of the hash power
But worker 1 has: 4.23694576719 percent of the profit
Over sample size of 100000
When worker1's average share-find-speed was: 1.0X the block-find-speed
Very Fast Coin
Worker 1 has: 7.69230769231 percent of the hash power
But worker 1 has: 0.0129950864524 percent of the profit
Over sample size of 100000
When worker1's average share-find-speed was: 0.5X the block-find-speed
As you can see, the results are very similar.
And of course, obligatory code so you know I am not full of shit and can try for yourself.
import random
import numpy as np
class worker():
def __init__(self,hashrate):
self.hashrate = hashrate
self.sharesolvetime = 60 / hashrate
self.shares = 0
class pool():
def __init__(self,blockfindtime):
self.blockfindtime = blockfindtime
pool1 = pool(500)
worker1 = worker(1)
worker2 = worker(12)
samplesize = 100000
for n in range(0,samplesize):
clock = np.random.poisson(pool1.blockfindtime)
clock1 = clock
while clock1 > 0:
sharesolve = np.random.poisson(worker1.sharesolvetime)
if sharesolve > clock1:
break
else:
worker1.shares = worker1.shares + 1
clock1 = clock1 - sharesolve
clock2 = clock
while clock2 > 0:
sharesolve = np.random.poisson(worker2.sharesolvetime)
if sharesolve > clock2:
break
else:
worker2.shares = worker2.shares + 1
clock2 = clock2 - sharesolve
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 "Over sample size of " + str(samplesize)
print "When worker1's average share-find-speed was: " + str((float(pool1.blockfindtime) / float(worker1.sharesolvetime))) + 'X the block-find-speed'
If you want to run it yourself, you need numpy.
http://www.numpy.org/