아마추어 천문학 및 이상한 이야기
별이 빛나는 방
아마추어 천문학 및 이상한 이야기
 
분류 전체보기
아마추어 천문학
이상한 fiction
이상한 세상
이상한 사진
이상한 일상
기록의 습작
사는 이야기
먹었어요
놀았어요
Matlab
스크랩(불펌포함?)
     
«   2008/10   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
 
/106  matlab을 이용한 jpeg 압축 알고리즘 재..
/105  나도 문근영 기하학
/104  비스듬히 던진 공의 궤적 그리기
/103  8월, 9월의 근황
/53  마지막(예고편)
   
미엘리키의 달팽이 사육소
인간성 문답
미엘리키의 달팽이 사육소
인간성 문답
미엘리키의 달팽이 사육소
스텔라리움 0.10.0이 릴리즈되었습니다
 
2008/10 - 1
2008/09 - 3
2008/08 - 9
2008/07 - 4
2008/06 - 1
  

Total 23,029, yesterday 123, today 102
powered by Tatter tools, designed by kokoro studio.
1. 몬티홀 문제라는 것. 위키백과
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
clc

car_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 tmp

    if 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; % 양을 보여준다.
    end

    switcher = 1; % 1이면 다른 카드 선택. 0 이면 선택을 고수.

    if switcher ==0
        last_choice = first_choice; % 선택을 고수한다.
    else
        tmp = find(card ~= first_choice);
        last_choice = tmp(find(tmp ~= open_card)); % 바뀐 선택
    end

    result = 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 k

sprintf('전체 시도 횟수: %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이다.

그러나 처음에 선택했던 카드를 바꾸냐 / 안 바꾸냐는 다른 문제인 것이다. 선택한 카드와 뒤집어진 카드는 관련이 있으니까.
   http://starrynight.tistory.com/trackback/81
  1. BlogIcon BKLove
    2008/04/26 10:05
    ㅋ 이렇게 다시 한번 밝혀주셨군요.. (^^)
    저도 글을 적으면서도 몇번은 헷갈렸는데..
    덕분에 깔끔하게 정리하고 갑니다.
*1  ... *19  *20  *21  *22  *23  *24  *25  *26  *27  ... *91