SeSAC - 파이썬 몬티 홀 문제(Monti Hall problem)


Monti Hall Problem

import random
import matplotlib.pyplot as plt

simulation = 1000000 # 10만회 시행
stay = 0
change = 0
chart = []

for _ in range(simulation):
    user_choice = random.randint(1, 3) # 유저의 선택
    doors = [1, 2, 3]
    car = random.choice(doors) # 차는 문들 중 랜덤한곳에 들어있다.
    monti = [door for door in doors if door != user_choice and door != car][0] # 몬티의 선택은 유저가 선택한것, 차가 들어있는 문을 제외한 하나.
    doors.remove(monti) # 몬티가 선택한 문은 더이상 고려 대상이 아니므로 제외된다.

		# 유저의 선택이 차가 들어있는 문이라면 
		# 바꾸지 않기 전략이 성공
    if user_choice == car:
        stay += 1

		# 바꾸기 전략, 문들 중 유저가 선택한 문이 아니며, 몬티가 선택한 문이 아닌것으로 변경
    changed = [door for door in [1, 2, 3] if door != user_choice and door != monti][0]
		# 바꾸기 전략이 차가 들어있는 문이라면
	  # 바꾸기 전략이 성공
    if changed == car:
        change += 1

    stay_percent = change / simulation * 100  # 바꾸지 않았을 때의 확률
    change_percent = stay / simulation * 100  # 바꿨을 때의 확률
    chart.append([stay_percent, change_percent])

chart = list(zip(*chart))  # 퍼센트 데이터를 분리

plt.plot(chart[0], label="Stay Strategy")
plt.plot(chart[1], label="Change Strategy")

plt.xlabel("Count")
plt.ylabel("Percent")
plt.title("Monty Hall Problem")
plt.show()

print("바꾸지 않았을 때의 평균 확률: {:.2f}%".format(stay_percent))
print("바꿨을 때의 평균 확률: {:.2f}%".format(change_percent))

바꾸지 않았을 때의 평균 확률: 66.67%

바꿨을 때의 평균 확률: 33.33%-

관심있을 포스팅