Please Enter Your Search Term Below:
 Websearch   Directory   Dictionary   FactBook 
  Wikipedia: Empirical proof of the Monty Hall problem

Wikipedia: Empirical proof of the Monty Hall problem
Empirical proof of the Monty Hall problem
From Wikipedia, the free encyclopedia.

The purpose of the following Perl program is to prove the result to the Monty Hall problem. It performs a set number of games and keeps track of how often a sticker (someone who sticks to their first choice) and a switcher (someone who switches to another door) would win the game. The results are (within the tolerance of coincidence) close to a sticker/switcher ratio of 1:2, proving the hypothesis that the switcher has twice as much a chance of winning the prize as the sticker.

  1. !/usr/bin/perl

  2. Empirical test of the Monty Hall problem

  3. Use -v to see each game. (default: off)
  4. Use -i # to set number of iterations. (default: 3000)

use strict;

my $iterations = 3000; # How many games to play my $verbosity = 0;

while (@ARGV) {

   my $param = shift @ARGV;
   $verbosity = 1 if $param eq '-v';
   $iterations = int (shift @ARGV) if $param eq '-i';
}

sub verbose {

   print $_[0]."\\n" if $verbosity;
}

my $stickers; my $switchers;

print "Playing $iterations games...\\n\\n";

for(1..$iterations) {

   my @items = qw(goat goat prize);     # two goats, one prize
   my @door;

while (@items) { # this puts the @items into the @door array in random order push (@door, splice (@items, int rand @items, 1)); }

verbose ("Door 0: $door[0]; Door 1: $door[1]; Door 2: $door[2]");

my $contestant = int rand 3; verbose ("Contestant chooses door $contestant.");

my $monty;

# If the contestant picked the prize, Monty picks another door by random. if ($door[$contestant] eq 'prize') { $monty = ($contestant + (int rand 2) + 1) % 3; }

# Otherwise, he picks the other goat. else { $monty = $door [ ($contestant+1) % 3 ] eq 'goat' ? ($contestant+1) % 3 : ($contestant+2) % 3; }

verbose ("Monty opens door $monty.");

# Now only two doors are open. If the sticker wins, the switcher loses and vice versa. if ($door[$contestant] eq 'prize') { verbose ("Sticker wins. Switcher loses."); $stickers++; } else { verbose ("Sticker loses. Switcher wins."); $switchers++; }

}

print "Grand totals: Sticker has won $stickers times Switcher has won $switchers times ";


  

From Wikipedia, the free encyclopedia. 
Modified by Geona