Python で古典的な問題をシミュレートしたいとします。赤いボールが 55%、緑のボールが 45% のバッグがあります。
10 個のボールを抽出し、これらすべてのボールが緑色である確率を検出したいと考えています。
次のように関数 random.sample(balls, 10) を使用して、モンテカルロ シミュレーションを使用します。
from random import choice, shuffle, sample, randint
Red = False
Green = True
bags = [Red for _ in range(55)]
bags.extend([Green for _ in range(45)])
# shuffle(bags)
def testonce():
return all(sample(bags, 10))
def test(N):
K = 0
for _ in xrange(N): K += testonce()
return float(K)/N
print '/', test (10000000)
print ':', .45**10
このコードは、シミュレーションによって検出された確率と、実際の確率 (正解) を出力します。次のように出力されます。
/ 0.0001848
: 0.00034050628916
この違いは私にそれを示しています
ランダムモジュールが間違っているか
何かを見逃しているか、コードで何か間違ったことをしています。
何が恋しいですか?Nが大きくなると、返される数値が実際の確率に収束するように、シミュレーションを正しく記述する方法は?