Entry

モンティホール・ジレンマ

2005年02月03日

モンティホール・ジレンマという問題があります。例えば,こんなモノ。

中古パソコン屋に行った AIAN は,「一律100円」と書いてあるジャンク箱の前で足が止まりました。中には,ギガビット・イーサネットカードが3枚入っています(それぞれ NIC-A,NIC-B,NIC-C とする)。100円といったら,言うまでもなく,超破格値です。

ただ,カードが入っているのはジャンク箱。ジャンクは不良品でも返品することができません。どれを選んだらいいでしょう。

ここで,AIAN は当てずっぽうに NIC-B を選びました。レジに持っていくと,店主さんがこう言います。

「本当にそれでいいの?あそこのカード,1つだけちゃんと動いて,残りは動かないんだ。僕はどれがちゃんと動くか知っているよ。あんたが持っているカードが動くかどうかは言えないけれど,とりあえず NIC-A は動かないよ。」

そう言って,NIC-A をポッキリ折りました。

さて,手持ちのお金が100円しかない(泣)として,AIAN は NIC-B を買うべきでしょうか,NIC-C に変えるべきでしょうか。

あ,レジに持っていったら105円だったってのは,無しということで……はい。

現実にどっちを選ぶかは,本人の自由なんでしょうけれど(アニマのお導きということもある),「NIC-C に変える」方が当たりの確率が高いんだそうです。そのままだと 1/3 の確率で当たり,変えると 2/3 の確率で当たりとのこと……。一見すると,1/2 ずつのようにも見えるんですけどね。

よく考えてみると,AIAN が NIC-B を選んだ時点で,NIC-B が当たりの確率は 1/3 です。これは,店主さんが NIC-A をポッキリやった後でも同じです。他方,NIC-C に変えるということは,NIC-C が 1/3 の確率で当たりであるのと同時に,NIC-A が当たりである可能性が無くなることも表しています。つまり,NIC-C と NIC-A の間で「場合の数」が減ることから,NIC-C の重みが NIC-A の確率分だけ増えると考えられそうです(多分)。

今日は,ずっとこの問題に悩まされていました。頭の中だけ云々するのもなんなので,簡単なプログラムで実験です。乱数をどうやって生成するのか分からなかったんですけれど,random(3) を使ってみました。rand(3) よりは質のいい乱数を生成するみたい。

#include <stdio.h>
#include <stdlib.h>

#define TEST_TIME 5
#define CHALLENGE 10000

int main()
{
    int i, n;
    int answer;
    int selection;
    int changed;
    int unchange;

    for (i = 0; i < TEST_TIME; i++) {
        changed = 0;
        unchange = 0;
        for (n = 0; n < CHALLENGE; n++) {
            /* set the answer card */
            srandomdev();
            answer = random() % 3;
            /* AIAN's select */
            srandomdev();
            selection = random() % 3;
            /* test */
            if (selection == answer)
                unchange++;
            else
                changed++;
        }
        printf("<< TEST %02d [%d times test] >>\n", i + 1, CHALLENGE);
        printf("Changed   : %d\n", changed);
        printf("Unchanged : %d\n", unchange);
    }
    
    return 0;
}

10000回チャレンジして,「変えた場合」と「変えなかった場合」とで,当たりの確率を見てみます。あまり意味は無いけど,さらにこれを5回繰り返し……。結果は,

<< TEST 01 [10000 times test] >>
Changed   : 6640
Unchanged : 3360
<< TEST 02 [10000 times test] >>
Changed   : 6674
Unchanged : 3326
<< TEST 03 [10000 times test] >>
Changed   : 6764
Unchanged : 3236
<< TEST 04 [10000 times test] >>
Changed   : 6662
Unchanged : 3338
<< TEST 05 [10000 times test] >>
Changed   : 6609
Unchanged : 3391

やっぱり,「変えた場合」に当たる確率は 2/3 くらいですね。頭で理解できて,コンピュータで実証されても,直感的には 1/2 だと思っちゃいます。

ともあれ,これ以上考えると頭がこんがらがってくるので,興味のある方は以下のリンクあたりを参照してください……。もうギブアップ。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN