http://en.wikipedia.org/wiki/Monty_Hall_problem
2. 문제 설명과 원리 해설이 잘 된 bklove님의 블로그 포스트
http://bklove.info/801
위 링크에서 모든 정보를 확인할 수 있는데, 저걸 봐도 이해가 안된다면..
이미 증명된 문제에 다시 시비를 걸게되는데, 그 이유는,
조건부 확률과 체감확률(또는 직관에 의한 확률계산)의 착각 때문에 생기는 오차 때문일 것이다.
몬티홀 문제를 시뮬레이션 한 것도 위키백과에 많이 링크가 되어있는데, matlab으로 해봤다.
행렬 card는 1 by 3 행렬이고, 1이 양, 2가 염소, 3이 자동차다.
왜 멀쩡한 염소 하나를 양으로 둔갑시켰냐하면, 각각을 선택하는 건 서로 다른 사건이기 때문에 그렇게 했다.
어차피 결과는 같다.
일단, 선택하고, 그 선택을 고수한다면 당연히 자동차를 얻을 확률은 1/3 이다.
바꾼다면, 2/3으로 튄다. 아니 도대체 왜?
공식으로도 증명되고, 아래처럼 시뮬레이션으로도 보이지만..
close all어차피 돌려볼 사람은 별로 없을테니, 결과를 보이자면,
clear all
clccar_win = 0;
sheep_lose = 0;
goat_lose = 0;looper = 100000;
for k=1:looper,
card = [1 2 3]; % 1은 양, 2는 염소, 3은 자동차tmp = randperm(3);
first_choice = tmp(1); % 처음 선택
clear tmpif first_choice == 3 % 처음 선택이 마침 자동차라면
tmp = randperm(2);
open_card = tmp(1); % 양이나 염소 중 랜덤 선택해서 보여줌.
clear tmp
elseif first_choice == 1 % 선택이 양이라면
open_card = 2; % 염소를
elseif first_choice == 2 % 선택이 염소라면
open_card = 1; % 양을 보여준다.
endswitcher = 1; % 1이면 다른 카드 선택. 0 이면 선택을 고수.
if switcher ==0
last_choice = first_choice; % 선택을 고수한다.
else
tmp = find(card ~= first_choice);
last_choice = tmp(find(tmp ~= open_card)); % 바뀐 선택
endresult = card(last_choice); % 마지막 선택에 의해 카드를 뒤집으면.
if result == 3
car_win = car_win + 1; % 자동차 획득 횟수
elseif result == 1
sheep_lose = sheep_lose + 1; % 양 획득 횟수
elseif result == 2
goat_lose = goat_lose + 1; % 염소 획득 횟수
end
end
clear ksprintf('전체 시도 횟수: %d\n자동차 획득 횟수: %d\n양 획득 횟수: %d\n염소 획득 횟수: %d\n',...
looper,car_win,sheep_lose,goat_lose)
전체 시도 횟수: 100000
자동차 획득 횟수: 66483
양 획득 횟수: 16948
염소 획득 횟수: 16569
2/3 : 1/6 : 1/6 으로 근사하게 나온다.
증명에 대해서는, 링크한 사이트에 다 나와있다.(글 맨 위로...)
그런데 떠오르는 궁금증.
선택을 안 바꾸면 1/3이고, 선택을 바꾸면 2/3이라면,
중간에 플레이어가 바뀌면 어떻게 되는 걸까?
지나가는 사람 붙잡고, '지금 남은 카드 둘 중에 하나 고르세요'라고 해서 하나를 골랐는데..
아무것도 모르는 그 사람에게 있어서는 결과가 1/2 이어야 하는 것 아닐까?
아니, 다 필요없고..
뜬금없이 누군가가 당신에게 빨간약과 파란약 중에 하나를 고르라 했고 하나는 비타민, 하나는 독약이라고 한다면..당연히 랜덤으로 고르면 50%, 절반의 확률로 응급실로 실려가야 하는 거 .....아닌가????
그 사람이 사실은 약을 세 개 가지고 있다가 하나는 몬티홀 놀이를 하다가 중간에 버리고 왔을 수도 있는 거니까.
...눈치챘는가?
중간에 공개해버린 카드뒷면, 또는 중간에 버린 약의 진실은 최초 선택에 종속적인 사건이다.
플레이어가 최초로 선택한 카드 뒷면을, 야바위꾼은 알고있다. 그리고 그 정보를 게임에 개입시켰다. 따라서 길가다가 긴급섭외된 사람이 카드를 '임의로' 고른다면 어떤 선택을 하든 확률은 1/2이다.
그러나 처음에 선택했던 카드를 바꾸냐 / 안 바꾸냐는 다른 문제인 것이다. 선택한 카드와 뒤집어진 카드는 관련이 있으니까.
'Matlab' 카테고리의 다른 글
| Cross-Validation (3) | 2008/08/14 |
|---|---|
| 특정 값 찾기 (0) | 2008/05/14 |
| 몬티홀 문제의 matlab 시뮬레이션 (1) | 2008/04/24 |
| matlab으로 음악작곡해보기 (0) | 2008/04/08 |
| 다시 정리한 fast fourier transform (matlab) (0) | 2008/04/03 |
| matlab, 반복작업할 때 progress bar로 진행상황 확인 (0) | 2008/04/02 |







