2009-09-24 8 views
2

En tant qu'exercice, je suis en train d'écrire un programme pour calculer les chances de lancer 5 dé avec le même nombre. L'idée est d'obtenir le résultat par simulation plutôt que par simple calcul. Mon programme est le suivant:Exercice de probabilité retournant un résultat différent

# 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 

Le problème est que l'exécution de ce programme avec une valeur pour n de 1 000 000 me donne une probabilité généralement entre 0,0006 et 0,0008 alors que mes maths me fait croire que je devrais obtenir une réponse plus à 0,0001286 (aka (1/6)^5).

Y at-il un problème avec mon programme? Ou est-ce que je fais une erreur de base avec les maths ici? Ou devrais-je trouver mon résultat revenir plus près de la bonne réponse si j'étais capable de lancer le programme sur des itérations plus grandes?

Répondre

6

La probabilité d'obtenir un nombre particulier cinq fois est (1/6)^5, mais la probabilité d'obtenir cinq nombres identiques est de (1/6)^4.

Il y a deux façons de voir ceci. Premièrement, la probabilité d'obtenir tous les 1, par exemple, est de (1/6)^5 puisqu'il n'y a qu'un moyen sur six pour obtenir un 1. Multipliez cela par cinq dés, et vous obtenez (1/6)^5. Mais, puisqu'il y a six nombres possibles pour obtenir la même chose, il y a six façons de réussir, soit 6 ((1/6)^5) ou (1/6)^4.

Considéré d'une autre manière, peu importe ce que le premier rouleau donne, donc nous l'excluons. Ensuite, nous devons faire correspondre ce nombre avec les quatre rouleaux restants, dont la probabilité est de (1/6)^4.

+0

(1/6) XOR 5 ??? –

+1

Non, (1/6) à la puissance de 5. Je suis plus habitué à **, par ex. x ** y, mais je suis allé avec la notation qui était dans la question. –

1

Vos maths sont erronées. La probabilité d'obtenir cinq dés avec le même nombre est 6*(1/6)^5 = 0.0007716.

0

Je pense que votre probabilité attendue est fausse, car vous avez indiqué le problème. (1/6)^5 est la probabilité de rouler quelques nombre spécifique 5 fois de suite; (1/6)^4 est la probabilité de rouler n'importe quel nombre 5 fois de suite (parce que le premier jet est toujours "réussi" - c'est-à-dire que le premier jet donnera toujours un certain nombre).

>>> (1.0/6.0)**4 
0.00077160493827160479 

Comparez à l'exécution de votre programme avec 1 million d'itérations:

[[email protected]:~] python roll5.py 
Please enter the number of sims to run: 1000000 
The odds of rolling 5 of the same number are 0.000755 
1

Très simplement, il y a 6 ** 5 résultats possibles de rouler 5 dés, et seulement 6 de ces résultats sont couronnés de succès, donc la réponse est 6.0/6 ** 5

Questions connexes