※문제
아래 문제를 풀어보자!
주사위게임에서 시뮬레이션을 진행할때 주사위를 굴리는 것은 중요한 부분이다. 각 경우의 수가 나올 확률이 균일하다고 가정할때, 주사위 2개를 굴려 나올 수 있는 값의 합이 7이 될 확률은 얼마인가요?
우선 큰수의 법칙에 따라 1만번의 시뮬레이션을 수행하기로 한다.
이때 한번의 시뮬레이션 안에서 주사위를 2번 굴리고 그 합이 7이 나오냐를 여부를 if문으로 따져서, 참일 경우 카운트를 +1하도록 구현하면 될 것 같다.
import numpy as np
array = [1,2,3,4,5,6]
histogram_cnt_7 = 0
count = 10000
for _ in range(count):
choice1 = np.random.choice(array)
choice2 = np.random.choice(array)
sum = choice1 + choice2
if sum == 7:
histogram_cnt_7 = histogram_cnt_7 + 1
ratio = histogram_cnt_7/count
print(f" 주사위 2개를 굴렸을 때 나올 수 있는 값의 합이 7이 될 확률: {ratio}")
이때 결과는 다음과 같다.
주사위 2개를 굴렸을 때 나올 수 있는 값의 합이 7이 될 확률: 0.1667
※추가
이번에는 좀더 이해를 돕기 위해 주사위 합의 분포를 히스토그램화 시켜서 나타내어 어떤 합이 더 빈도수가 높게 나오는지 7과 비교해서 확인해보자.
import numpy as np
import matplotlib.pyplot as plt
# 모든 가능한 주사위 결과의 합을 구하는 함수
def simulate_dice_rolls():
dice1 = np.arange(1, 7) # 첫 번째 주사위의 값
dice2 = np.arange(1, 7) # 두 번째 주사위의 값
outcomes = np.add.outer(dice1, dice2) # 두 주사위의 합
return outcomes
# 주사위 합의 확률을 계산하는 함수
def calculate_probability_of_sum(target_sum, outcomes):
total_rolls = outcomes.size
favorable_rolls = np.count_nonzero(outcomes == target_sum)
return favorable_rolls / total_rolls
# 주사위 굴리기 결과 시뮬레이션
outcomes = simulate_dice_rolls()
# 확률 계산
target_sum = 7
prob_7 = calculate_probability_of_sum(target_sum, outcomes)
# 시각화
sums, counts = np.unique(outcomes, return_counts=True)
plt.figure(figsize=(10, 6))
plt.bar(sums, counts / counts.sum(), color='skyblue', edgecolor='black')
plt.axvline(target_sum, color='red', linestyle='--', label=f'Sum = {target_sum}')
plt.title('Probability Distribution of the Sum of Two Dice Rolls', fontsize=14)
plt.xlabel('Sum of Two Dice', fontsize=12)
plt.ylabel('Probability', fontsize=12)
plt.legend()
plt.show()
print(f"두 주사위의 합이 7이 나올 확률: {prob_7:0.3}")
결과는 다음과 같다.
※ 고찰
위 시각화를 통해 7이 나올 가능성이 상대적으로 높다는 것을 입증할 수 있었다.
'A.I(인공지능) > Datascience' 카테고리의 다른 글
몬티홀 문제를 시뮬레이션을 통해 해결해보자! (0) | 2024.10.20 |
---|---|
엑셀데이터를 처리해보자! (1) | 2024.09.24 |
큰수의 법칙을 이해해보자! (0) | 2023.10.22 |
댓글