Home
entries friends calendar user info Советы о сексе Previous Previous Next Next
worldmind - Проверяем парадокс Монти Холла имитационным моделированием

Advertisement

[info]worldmind
Add to Memories
Tell a Friend
Проверяем парадокс Монти Холла имитационным моделированием
У френдов вычитал ссылку на парадокс Монти-Холла, заинтересовался разослал окружающим - завязался спор. Прочитал Парадокс Монти Холла в википедии, но спора это не решило. Выход один - брут форс - имитационное моделирование, по быстрому был накорябан скрипт (замечания приветствуются, но желательно по алгоритму, так как ничего не вылизывал - задача одноразовая).
Скрипт запускался два раза - для гарантированной раздельной генерации случайных чисел - в первом проходе считалось количество угадываний если игрок меняет выбор (my $change_choice = 1;), а во втором если не меняет (my $change_choice = 0;), в результате, на 10 000 игр:
Gamer NOT change choice
2562

Gamer change choice
7586

Как раз получаем соотношение 1/3 к 2/3 т.е. разницу в два раза, как и гласит наука, а не 1/2 к 1/2 как кажется с точки зрения бытового здравого смысла.
Сам скрипт под катом:

#!/usr/bin/perl

use strict;
use warnings;

my $iteration     = 10000;
my $change_choice = 1;

print "\n";
print modelingMontyHall($change_choice);
print "\n";

sub modelingMontyHall {
    my $change_choice   = shift;
    my $success_counter = 0;
    my ( $i, $j );
    my @doors;    # 0 - animal, 1 - car
    my $gamer_choice;
    my $showman_open_door;
    my $result = 0;
    my $success_door;

    if ($change_choice) {print "Gamer change choice\n"} else {print "Gamer NOT change choice\n"};

    for ( $i = 0 ; $i < $iteration ; $i++ ) {

        # Preparing
        @doors                = ( 0, 0, 0 );
        $success_door         = int( rand() * 3 );
        $doors[$success_door] = 1;                   # door with car

        # First step
        $gamer_choice = 0;
        for ( $j = 0 ; $j < 3 ; $j++ ) {
            if ( ( $j != $gamer_choice ) and ( $doors[$j] == 0 ) ) {
                $showman_open_door = $j;
                last;
            }
        }

        # Second step
        if ($change_choice) {
            for ( $j = 0 ; $j < 3 ; $j++ ) {
                if ( ( $j != $gamer_choice ) and ( $j != $showman_open_door ) ) {
                    $gamer_choice = $j;
                    last;
                }
            }
        }

        # Count result
        if ( $doors[$gamer_choice] ) {
            $result++;
        }
    }
    return $result;
}

Tags: ,

Comments
machin From: [info]machin Date: March 18th, 2008 03:58 pm (UTC) (Link)
Шокирован
1 comment or Leave a comment
profile
User: [info]worldmind
Name: worldmind
calendar
Back July 2009
1234
567891011
12131415161718
19202122232425
262728293031
page summary
tags

Advertisement

Customize