exercício probabilidade de voltar resultado diferente do esperado
-
16-09-2019 - |
Pergunta
Como um exercício Eu estou escrevendo um programa para calcular as chances de rolar 5 die com o mesmo número. A idéia é obter o resultado através de simulação em oposição a matemática simples embora. Meu programa é o seguinte:
# 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
O problema é que a execução deste programa com um valor de n de 1 000 000 me dá uma probabilidade geralmente entre 0,0006 e 0,0008, enquanto a minha matemática me faz acreditar que eu deveria estar recebendo uma resposta mais perto de 0,0001286 (aka (1/6) ^ 5).
Existe errado alguma coisa com o meu programa? Ou eu estou fazendo algum erro básico com a matemática aqui? Ou será que eu encontrar o meu resultado revert mais perto da resposta certa se eu fosse capaz de executar o programa sobre iterações maiores?
Solução
A probabilidade de se obter um determinado número é cinco vezes (1/6) ^ 5, mas a probabilidade de obter quaisquer cinco números o mesmo é (1/6) ^ 4.
Há duas maneiras de ver isso.
Em primeiro lugar, a probabilidade de obter todos os 1 de, por exemplo, é (1/6) ^ 5 uma vez que existe apenas uma saída de seis para obter um 1. Multiplique isso por cinco dados, e você começa (1/6 ) ^ 5. Mas, uma vez que existem seis números possíveis para obter a mesma, então existem seis maneiras de sucesso, que é 6 ((1/6) ^ 5) ou (1/6) ^ 4.
Olhado de outra forma, não importa o que o primeiro rolo dá, por isso excluí-lo. Então nós temos que corresponder ao número com quatro rolos restantes, a probabilidade de que é (1/6) ^ 4.
Outras dicas
Sua matemática é errado. A probabilidade de obter cinco dados com o mesmo número é 6*(1/6)^5 = 0.0007716
.
Muito simplesmente, há resultados 6 ** 5
possíveis de rolar 5 dados, e apenas 6 desses resultados são bem sucedidos, então a resposta é 6.0 / 6 ** 5
Eu acho que a sua probabilidade esperada é errado, como você indicou o problema. (1/6) ^ 5 é a probabilidade de rolar alguns específica Número 5 vezes em uma fileira; (1/6) ^ 4 é a probabilidade de rolar qualquer Número 5 vezes em uma fileira (porque o primeiro rolo é sempre "bem sucedido" - isto é, o primeiro rolo sempre resultará em um número ).
>>> (1.0/6.0)**4
0.00077160493827160479
Comparar a executar o seu programa com 1 milhão de iterações:
[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