몬티홀 딜레마(Monty Hall Dilemma)는 선택과 확률의 역설적 성격을 보여주는 유명한 문제로, 세 개의 문 중 하나를 선택하는 게임에서 시작됩니다. 이 문제는 컴퓨터 시뮬레이션을 통해 선택 전략의 확률적 이점을 확인할 수 있습니다. 이번 글에서는 파이썬을 사용하여 몬티홀 딜레마를 시뮬레이션하는 프로그램을 구현하는 방법을 단계별로 설명하겠습니다.
1. 몬티홀 딜레마의 기본 개념
몬티홀 딜레마는 다음과 같은 단계로 진행됩니다:
- 플레이어는 세 개의 문 중 하나를 선택합니다.
- 진행자는 나머지 문 중 하나를 열어 염소가 있는 문을 공개합니다.
- 플레이어는 선택을 바꾸거나 유지할 수 있습니다.
- 최종적으로 선택한 문이 자동차인지 확인합니다.
이 문제에서 중요한 질문은 "선택을 바꿀 때와 유지할 때, 어느 쪽이 더 유리한가?"입니다.
2. 몬티홀 딜레마 시뮬레이션 코드
아래는 파이썬을 이용해 몬티홀 딜레마를 시뮬레이션하는 코드입니다:
import random
def monty_hall_simulation(num_trials):
switch_wins = 0 # 선택을 바꿨을 때의 성공 횟수
stay_wins = 0 # 선택을 유지했을 때의 성공 횟수
for _ in range(num_trials):
# 1. 문 배치 및 자동차의 위치 설정
doors = [0, 0, 0] # 0: 염소, 1: 자동차
car_position = random.randint(0, 2)
doors[car_position] = 1
# 2. 플레이어가 문 하나를 선택
player_choice = random.randint(0, 2)
# 3. 진행자가 염소가 있는 문 하나를 열음
available_doors = [i for i in range(3) if i != player_choice and doors[i] == 0]
opened_door = random.choice(available_doors)
# 4. 선택 변경 및 유지 결과 확인
# 선택을 바꾼 경우
switch_choice = [i for i in range(3) if i != player_choice and i != opened_door][0]
if doors[switch_choice] == 1:
switch_wins += 1
# 선택을 유지한 경우
if doors[player_choice] == 1:
stay_wins += 1
# 결과 출력
print(f"총 시뮬레이션 횟수: {num_trials}")
print(f"선택을 바꿨을 때 성공 확률: {switch_wins / num_trials * 100:.2f}%")
print(f"선택을 유지했을 때 성공 확률: {stay_wins / num_trials * 100:.2f}%")
# 시뮬레이션 실행
monty_hall_simulation(10000)
3. 코드 설명
3.1 문 배치 및 자동차 위치 설정
리스트 doors
는 세 개의 문을 나타내며, random.randint
를 사용하여 자동차의 위치를 무작위로 결정합니다. 1은 자동차, 0은 염소를 의미합니다.
3.2 플레이어의 선택
플레이어는 random.randint
를 사용해 세 개의 문 중 하나를 무작위로 선택합니다.
3.3 진행자의 문 열기
플레이어의 선택과 자동차가 아닌 문 중 하나를 선택하여 공개합니다. 진행자는 염소가 있는 문만 선택합니다.
3.4 선택 변경 및 유지
선택을 변경하는 경우, 플레이어는 열린 문과 자신의 선택을 제외한 문을 선택합니다. 이후 자동차가 있는지 확인하여 성공 횟수를 기록합니다.
3.5 결과 출력
총 성공 횟수를 바탕으로 선택을 바꿀 때와 유지할 때의 성공 확률을 계산하여 출력합니다.
4. 실행 결과
10000번의 시뮬레이션을 실행한 결과는 다음과 같습니다:
총 시뮬레이션 횟수: 10000
선택을 바꿨을 때 성공 확률: 66.78%
선택을 유지했을 때 성공 확률: 33.22%
결과는 선택을 바꾸는 전략이 선택을 유지하는 전략보다 약 2배 높은 성공 확률을 보임을 보여줍니다.
5. 확장 가능성
- 문 개수 변경: 세 개 이상의 문으로 확장하여 복잡성을 높일 수 있습니다.
- 사용자 입력: 플레이어가 직접 선택하도록 인터페이스를 추가할 수 있습니다.
- 시각화:
matplotlib
라이브러리를 사용해 성공 확률을 그래프로 표시.
결론
몬티홀 딜레마는 직관과 확률의 차이를 명확히 보여주는 문제로, 선택을 바꾸는 전략의 우월성을 입증합니다. 파이썬을 사용한 시뮬레이션은 이를 실험적으로 확인할 수 있는 유용한 도구입니다. 위 코드를 기반으로 다양한 확장을 시도하여 문제를 더 깊이 탐구해 보세요.
'정보' 카테고리의 다른 글
비트코인 니모닉 경우의 수 (0) | 2024.12.17 |
---|---|
영상 처리에서의 이미지 세분화(Segmentation) 기법 연구 (0) | 2024.12.17 |
파이썬 언어를 이용한 사칙연산 계산기 코딩 방법 (0) | 2024.12.17 |
C++언어를 이용한 사칙연산 계산기 코딩 방법 (0) | 2024.12.16 |
자율주행 자동차에서의 객체 인식 및 추적 기술 (0) | 2024.12.16 |
댓글