(no subject)
Wednesday, October 29th, 2008 01:14Есть такая занятная дурь — парадокс Монти Холла. Повторять статью из Википедии не буду, расскажу лучше про приколы с восприятием. Программисты — народ тёмный, недоверчивый, «пока не пощупаю — не поверю», и для проверки этого парадокса пишут небольшие программы.
zmeuka: «Ситуация сильно напоминает тест на понимание ТЗ»
#!/usr/bin/perl
$hit=0;
$loopc=100000;
$rand_loc_auto=0;
$rand_loc_choise=0;
for ($loop=0; $loop<$loopc; $loop++) {
# Making a choise
$loc_auto=mkrand(3); $rand_loc_auto[$loc_auto]++; # Automobile
$loc_choise=mkrand(3); $rand_loc_choise[$loc_choise]++; # Player's choise
# Automobile chosen from start
if ($loc_choise==$loc_auto) {
$loc_open=mkrand(2);
if ($loc_auto==0) { $loc_open++; }
if ($loc_auto==1) { if ($loc_open==1) { $loc_open++; } }
} else {
# Goat was chosen
$loc_open=0;
if ($loc_open==$loc_auto) { $loc_open++; }
if ($loc_open==$loc_chose) { $loc_open++; }
}
# $loc_open - number of opened door
## Variant 1 - choise at is was
# $loc_final=$loc_choise;
# Variant 2 - choise of the other door
$loc_final=0; # final user choise
if ($loc_final==$loc_choise) { $loc_final++; }
if ($loc_final==$loc_open) { $loc_final++; }
# print "A:$loc_auto C:$loc_choise O:$loc_open F:$loc_final\n";
if ($loc_final==$loc_auto) { $hit++; }
}
$v=sprintf("%3.3f", $hit/$loopc);
print "Hit: $hit / $loopc = $v\n";
print "LA: $rand_loc_auto[0] $rand_loc_auto[1] $rand_loc_auto[2]\n";
print "LC: $rand_loc_choise[0] $rand_loc_choise[1] $rand_loc_choise[2]\n";
sub mkrand {
local($base)=@_[0];
local($rv);
$rv=int(rand($base));
return $rv;
}<?php
// http://ru.wikipedia.org/wiki/Парадокс_Монти_Холла
mt_srand();
$выигрыш_1 = $выигрыш_2 = 0;
for( $итерация=0; $итерация<10000; $итерация++ ) {
$дверь_с_призом = mt_rand(1,3);
$первый_выбор_игорка = mt_rand(1,3);
$дверь_открытая_ведущим = $второй_выбор_игрока = -1;
// первая стратегия
if( $дверь_с_призом==$первый_выбор_игорка ) $выигрыш_1++;
// вторая стратегия
for( $дверь=1; $дверь<=3; $дверь++ )
if( $дверь!=$дверь_с_призом && $дверь!=$первый_выбор_игорка )
$дверь_открытая_ведущим = $дверь;
for( $дверь=1; $дверь<=3; $дверь++ )
if( $дверь!=$первый_выбор_игорка && $дверь!=$дверь_открытая_ведущим )
$второй_выбор_игрока = $дверь;
if( $дверь_с_призом==$второй_выбор_игрока ) $выигрыш_2++;
}
echo "Стратегия: никогда не менять выбор, выигрыш = $выигрыш_1<br>";
echo "Стратегия: всегда менять выбор, выигрыш = $выигрыш_2<br>";
show_source(__FILE__);
?>#!/usr/bin/ruby
CASES_COUNT = 1_000_000
class Array
def random
return self[rand(self.size)]
end
end
def perform_test(change_selection)
hits = 0
misses = 0
doors = [:car, :goat, :goat]
CASES_COUNT.times do
doors.shuffle!
car_door = doors.index(:car)
user_choice = rand(3)
goat_door = ([0, 1, 2]-[car_door, user_choice]).random
user_choice = ([0, 1, 2]-[user_choice, goat_door]).first if change_selection
case doors[user_choice]
when :car then hits += 1
when :goat then misses += 1
end
end
return [hits, misses]
end
hits, misses = perform_test(false)
puts "Hits: #{hits}; Misses: #{misses}"
puts "WinRate: #{hits.to_f/CASES_COUNT}"
hits, misses = perform_test(true)
puts "Hits: #{hits}; Misses: #{misses}"
puts "WinRate: #{hits.to_f/CASES_COUNT}"
no subject
Date: Wednesday, October 29th, 2008 12:44 am (UTC)trace ("Probability to win when door stays the same:"+Number (1/3));
trace ("Probability to win when door changed:"+Number (2/3));
а начинал, а начинал то :)))
function rnd ():Number { return Math.floor(Math.random ()*3); }
var i_change:Number = 0;
var i_dont:Number = 0;
var i,car,guess,goat:Number;
for (i=0;i<1000000;i++)
{
car = rnd ();
guess = rnd ();
goat = (car+1)%3; // а от этих двух строчек ничего и не зависит...
if (goat==guess) goat = (car+2)%3;
if (car==guess) i_dont++;
else i_change++;
}
trace ("Win when changed : "+i_change);
trace ("Win when stayed : "+i_dont);
no subject
Date: Wednesday, October 29th, 2008 05:22 am (UTC)Моё малость битое.
Date: Wednesday, October 29th, 2008 09:07 am (UTC)no subject
Date: Wednesday, October 29th, 2008 10:21 am (UTC)http://newtricker.livejournal.com/63200.html
no subject
Date: Wednesday, October 29th, 2008 09:19 pm (UTC)no subject
Date: Sunday, December 28th, 2008 08:06 am (UTC)http://swfmaster.ru/test/3doors.html
в ответ на
http://object.livejournal.com/?skip=40
(там в середине страницы две темы с примерами народного творчества).
no subject
Date: Tuesday, August 31st, 2010 04:35 pm (UTC)