확률 운동은 예상되는 다른 결과를 반환합니다
-
16-09-2019 - |
문제
연습으로서 나는 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 000 000의 값 으로이 프로그램을 실행하는 것이 일반적으로 0.0006에서 0.0008 사이의 확률을 줄 수 있다는 것입니다. 수학은 0.0001286 (일명 (1/6)^5)에 가까운 답변을 받아야한다고 믿습니다. .
내 프로그램에 문제가 있습니까? 아니면 여기서 수학으로 기본적인 실수를하고 있습니까? 아니면 더 큰 반복을 통해 프로그램을 실행할 수 있다면 내 결과가 정답에 더 가깝게 되돌아 갈 수 있습니까?
해결책
특정 숫자를 5 번받을 확률은 (1/6)^5이지만, 5 개의 숫자를 얻을 확률은 (1/6)^4입니다.
이것을 볼 수있는 두 가지 방법이 있습니다.
첫째, 예를 들어, 1을 모두 얻을 확률은 (1/6)^5입니다. . 그러나 동일하게 얻을 수있는 6 가지 가능한 숫자가 있기 때문에 6 (1/6)^5) 또는 (1/6)^4 인 6 가지 방법이 있습니다.
다른 방법을 살펴보면 첫 번째 롤이 무엇을 제공하는지는 중요하지 않으므로 우리는 그것을 배제합니다. 그런 다음 우리는 그 숫자를 나머지 4 개의 롤과 일치시켜야합니다. 그 확률은 (1/6)^4입니다.
다른 팁
수학이 잘못되었습니다. 같은 숫자로 5 개의 주사위를 얻을 확률은 6*(1/6)^5 = 0.0007716
.
아주 간단하게, 있습니다 6 ** 5
5 개의 주사위를 굴리는 결과는 6 개만 성공적이므로 답은 답은 다음과 같습니다. 6.0 / 6 ** 5
문제를 언급 한 것처럼 예상되는 확률이 잘못되었다고 생각합니다. (1/6)^5는 일부 롤링 확률입니다. 특정한 연속 5 번; (1/6)^4는 롤링 확률입니다. 어느 연속으로 5 번 (첫 번째 롤은 항상 성공하기 때문에, 즉 첫 번째 롤은 항상 일부 숫자를 초래합니다).
>>> (1.0/6.0)**4
0.00077160493827160479
백만 반복으로 프로그램 실행과 비교하십시오.
[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