Kuklūs bandymai atsakyti į amžinus klausimus laikiname pasaulyje.
-
Šešėlis
- senbuvis
- Posts: 1127
- Joined: 2007-08-01 21:58
2010-10-02 22:48
Šaunuolis, kad nepasivarginai ištirti reikalą moksliškai
Turėjau kelias minutes laisvo laiko, siūlau patį moksliškiausią įmanomą sprendimą Pascal kalba (tingiu perrašinėt kokiai populiaresnei):
program Ožkos;
var laimingosdurys, {laimingų durų numeris: gali būti nuo 1 iki 3}
spėjimas, {spėjamų durų numeris: gali būti nuo 1 iki 3}
atidaromosdurys : integer; {vedėjo atidaromų durų numeris: gali būti nuo 1 iki 3}
atspėta, {kiek kartų atspėta}
kartojimai : longint; {kiek kartų kartoti ciklą}
procentinėdalis : real; {eksperimento rezultatas, išreikštas procentais}
begin
Randomize;
atspėta := 0;
kartojimai := 0;
repeat begin
laimingosdurys := Random(3)+1; {gali būti bet kurios iš 3}
spėjimas := Random(3)+1;
atidaromosdurys := Random(3)+1;
while (atidaromosdurys = laimingosdurys) or (atidaromosdurys = spėjimas) do {užtikrinama, kad nesutaptų su ankstesniais kintamaisiais}
atidaromosdurys := Random(3)+1;
if ((spėjimas = 1) and (atidaromosdurys = 2)) or ((spėjimas = 2) and (atidaromosdurys = 1)) then {imituojamas durų pasirinkimo keitimas}
spėjimas := 3 else
if ((spėjimas = 2) and (atidaromosdurys = 3)) or ((spėjimas = 3) and (atidaromosdurys = 2)) then
spėjimas := 1 else
if ((spėjimas = 1) and (atidaromosdurys = 3)) or ((spėjimas = 3) and (atidaromosdurys = 1)) then
spėjimas := 2;
if spėjimas = laimingosdurys then
Inc(atspėta); {atspėjus padidinti vienetu}
Inc(kartojimai)
end;
until kartojimai = 100000; {galima įrašyti bet kokį sveikąjį skaičių}
procentinėdalis := atspėta/kartojimai*100;
WriteLn(Trunc(procentinėdalis), ' % spėjimų buvo sėkmingi');
WriteLn('Spauskite Enter');
Readln
end.
Mano rezultatai svyruoja nuo 66 iki 67 proc. Dar toks įdomus dalykas: nuėmus „else“ operatorius, rezultatas ima svyruoti apie 50 proc.
-
insurrectum
- pradedantis
- Posts: 493
- Joined: 2006-09-28 15:01
2010-10-05 01:36
Šešėlis wrote:
Turėjau kelias minutes laisvo laiko, siūlau patį moksliškiausią įmanomą sprendimą Pascal kalba (tingiu perrašinėt kokiai populiaresnei):
Oho koks populiarus užsiemimas, va mano sena kreatura Matlabui:
Code: Select all
function Ozkos ()
statsCoiseA = zeros (1000);
statsCoiseB = zeros (1000);
sumWinA=0;
sumWinB=0;
for t=1:10000
doors = randperm(3); %1,2 - ozkos, 3-automobilis
playerChoiseA = randi(3);
playerChoiseB = 0;
showmanChoise = 0;
for n=1:3
if n ~= playerChoiseA && 3~= doors(n)
if 3 == doors (playerChoiseA) && 0 == showmanChoise && 0.5 > rand(1)
showmanChoise = n;
continue;
else
showmanChoise = n;
break;
end
end
end
for n=1:3
if n ~= playerChoiseA && n~= showmanChoise
playerChoiseB = n;
break;
end
end
sumWinA = sumWinA + (3 == doors (playerChoiseA));
sumWinB = sumWinB + (3 == doors (playerChoiseB));
if 0 == mod (t, 10)
statsCoiseA(t/10) = sumWinA/t;
statsCoiseB(t/10) = sumWinB/t;
end;
end
x=1:10:10000;
plot (x,statsCoiseA,'b-',...
x,statsCoiseB,'r-');
xlabel (strcat('choiseA=', num2str(statsCoiseA(1000)), '; choiseB=', num2str(statsCoiseB(1000))));
end
Svetimas wrote:2. Tikimybinis modelis, kai vedėjas žino, kas yra už durų.
Kažkur yra klaida. Modelis paprastas:
Code: Select all
--> 1/2 ožka
1/3 auto --|
--> 1/2 ožka
1/3 ožka -----> 1 auto
1/3 ožka -----> 1 auto
Teorinė automobilio tikimybe keičiant duris = (1/3)*1 + (1/3)*1 = 2/3 = 0.66666. Visiškai sutampa su mano ir Šešėlio eksperimentais.
-
Attachments
-
-
Svetimas
- senbuvis
- Posts: 4692
- Joined: 2004-05-25 19:04
- Location: Vilnius
2010-10-05 20:36
insurrectum wrote:Svetimas wrote:2. Tikimybinis modelis, kai vedėjas žino, kas yra už durų.
Kažkur yra klaida. Modelis paprastas:
Code: Select all
--> 1/2 ožka
1/3 auto --|
--> 1/2 ožka
1/3 ožka -----> 1 auto
1/3 ožka -----> 1 auto
Teorinė automobilio tikimybe keičiant duris = (1/3)*1 + (1/3)*1 = 2/3 = 0.66666. Visiškai sutampa su mano ir Šešėlio eksperimentais.
Deja, klaidos nėra. Ir pagal manąjį modelį automobilio tikimybė keičiant duris = 2/3, o nekeičiant durų = 1/3.
O vat tavo modelio pacituotam fragmente nesupratau. Ką kokią prasmę jame turi kairė ir dešinė pusės?
-
insurrectum
- pradedantis
- Posts: 493
- Joined: 2006-09-28 15:01
2010-10-05 22:10
Svetimas wrote:
Deja, klaidos nėra. Ir pagal manąjį modelį automobilio tikimybė keičiant duris = 2/3, o nekeičiant durų = 1/3.
Sorry, neįskaičiau, labai jau painiai užrašei...
Svetimas wrote:
O vat tavo modelio pacituotam fragmente nesupratau. Ką kokią prasmę jame turi kairė ir dešinė pusės?
Įprastas tikimybių medžio diagrama, visos įmanomos įvykių permutacijos. Pasilikti prie pirmų durų atitinka kairė pusę, keisti duris - dešinę (tikimybės dauginamos einant medžiu iki pradžios, gaunama šakos tikimybė. Šakos, kurios atitinką kriterijų (šiuo atveju paprastas TAIP/NE) sumuojamos.
Apie tikimybių medžius gali kad ir šitam vadovėly paskaityt :
http://www.dartmouth.edu/~chance/teachi ... ok.mac.pdf