본문 바로가기
정보

파이썬 언어를 이용한 몬티홀 딜레마 프로그램을 구현하는 방법

by 여행과 수학 2024. 12. 17.
반응형

몬티홀 딜레마(Monty Hall Dilemma)는 선택과 확률의 역설적 성격을 보여주는 유명한 문제로, 세 개의 문 중 하나를 선택하는 게임에서 시작됩니다. 이 문제는 컴퓨터 시뮬레이션을 통해 선택 전략의 확률적 이점을 확인할 수 있습니다. 이번 글에서는 파이썬을 사용하여 몬티홀 딜레마를 시뮬레이션하는 프로그램을 구현하는 방법을 단계별로 설명하겠습니다.

파이썬 언어를 이용한 몬티홀 딜레마 프로그램

1. 몬티홀 딜레마의 기본 개념

몬티홀 딜레마는 다음과 같은 단계로 진행됩니다:

  1. 플레이어는 세 개의 문 중 하나를 선택합니다.
  2. 진행자는 나머지 문 중 하나를 열어 염소가 있는 문을 공개합니다.
  3. 플레이어는 선택을 바꾸거나 유지할 수 있습니다.
  4. 최종적으로 선택한 문이 자동차인지 확인합니다.

이 문제에서 중요한 질문은 "선택을 바꿀 때와 유지할 때, 어느 쪽이 더 유리한가?"입니다.

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 라이브러리를 사용해 성공 확률을 그래프로 표시.

결론

몬티홀 딜레마는 직관과 확률의 차이를 명확히 보여주는 문제로, 선택을 바꾸는 전략의 우월성을 입증합니다. 파이썬을 사용한 시뮬레이션은 이를 실험적으로 확인할 수 있는 유용한 도구입니다. 위 코드를 기반으로 다양한 확장을 시도하여 문제를 더 깊이 탐구해 보세요.

 

인공지능 관련 연구 주제 100가지 추천

인공지능(AI)은 현대 기술의 발전을 이끄는 중요한 분야 중 하나로, 다양한 응용과 연구가 활발히 이루어지고 있습니다. 인공지능의 연구는 기계 학습, 자연어 처리, 컴퓨터 비전, 자율주행 등 여

mathtravel.tistory.com

 

728x90

댓글