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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top