Вероятностное упражнение, возвращающее другой ожидаемый результат
В качестве упражнения я пишу программу для расчета шансов бросить 5 кубиков с одинаковым числом. Идея состоит в том, чтобы получить результат с помощью симуляции, в отличие от простой математики. Моя программа такая:
# rollFive.py
from random import *
def main():
n = input("Please enter the number of sims to run: ")
hits = simNRolls(n)
hits = float(hits)
n = float(n)
prob = hits/n
print "The odds of rolling 5 of the same number are", prob
def simNRolls(n):
hits = 0
for i in range(n):
hits = hits + diceRoll()
return hits
def diceRoll():
firstDie = randrange(1,7,1)
for i in range(4):
nextDie = randrange(1,7,1)
if nextDie!=firstDie:
success = 0
break
else:
success = 1
return success
Проблема в том, что запуск этой программы со значением n, равным 1 000 000, дает мне вероятность, как правило, между 0,0006 и 0,0008, а моя математика заставляет меня поверить, что я должен получить ответ ближе к 0,0001286 (иначе (1/6)^5),
Что-то не так с моей программой? Или я делаю некоторую основную ошибку с математикой здесь? Или я нашел бы мой результат ближе к правильному ответу, если бы смог запустить программу на больших итерациях?
4 ответа
Вероятность получения определенного числа пять раз равна (1/6)^5, но вероятность получения любых пяти чисел одинакова (1/6)^4.
Есть два способа увидеть это.
Во-первых, вероятность получить все 1, например, составляет (1/6)^5, поскольку есть только один выход из шести, чтобы получить 1. Умножьте это на пять кубиков, и вы получите (1/6)^5, Но, поскольку есть шесть возможных чисел, чтобы получить то же самое, то есть шесть способов добиться успеха, а именно 6((1/6)^5) или (1/6)^4.
Если посмотреть с другой стороны, не имеет значения, что дает первый бросок, поэтому мы исключаем его. Затем мы должны сопоставить это число с четырьмя оставшимися бросками, вероятность которых равна (1/6)^4.
Очень просто есть 6 ** 5
возможные результаты от броска 5 кубиков, и только 6 из этих результатов являются успешными, поэтому ответ 6.0 / 6 ** 5
Ваша математика неверна. Вероятность получения пяти кубиков с одинаковым номером 6*(1/6)^5 = 0.0007716
,
Я думаю, что ваша ожидаемая вероятность неверна, поскольку вы заявили о проблеме. (1/6)^5 - вероятность выпадения определенного числа 5 раз подряд; (1/6)^4 - это вероятность выпадения любого числа 5 раз подряд (поскольку первый бросок всегда "успешен", то есть первый бросок всегда приведет к некоторому числу).
>>> (1.0/6.0)**4
0.00077160493827160479
Сравните с запуском вашей программы с 1 миллионом итераций:
[me@host:~] python roll5.py
Please enter the number of sims to run: 1000000
The odds of rolling 5 of the same number are 0.000755