[php] Dobbelstenen, kansen & simulatie

Pagina: 1
Acties:
  • 476 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • niels_999348
  • Registratie: Maart 2003
  • Laatst online: 20:39
Voor wiskunde heb ik de volgende opdracht:

Op de foto hiernaast zie je vier dobbelstenen. In figuur P.4 zie je de uitslagen van de vier dobbelstenen. Met de dobbelstenen speel je het volgende spel. Laat je tegenstander een van de dobbelstenen kiezen en kies daarna zelf een dobbelsteen uit de overgebleven drie. De speler die vervolgens het hoogste cijfer gooit krijgt een punt. Doe dit 20 keer. Steeds laat je je tegenstander als eerste een dobbelsteen kiezen. Winnaar is degene met de meeste punten.

Dobbelsteen A: 2, 2, 2, 2, 6, 6
Dobbelsteen B: 5, 5, 5, 1, 1, 1
Dobbelsteen C: 4, 4, 4, 4, 0, 0
Dobbelsteen D: 3, 3, 3, 3, 3, 3

Om te beginnen heb ik in php dit simulatie script geschreven:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php
set_time_limit(600);

$X = 100000; // We willen 100.000 partijtjes spelen
$worpen = 20; // 20 worpen per partijtje

while ( $spelen <= $X ) {

        while ( $gegooid <= $worpen ) {

$dobbelsteenA = array("4", "4", "4", "4", "0", "0");

$dobbelsteenA = $dobbelsteenA[rand(0,5)]; 

$dobbelsteenB = array("3", "3", "3", "3", "3", "3");

$dobbelsteenB = $dobbelsteenB[rand(0,5)]; 

    if ($dobbelsteenA > $dobbelsteenB){
    $Awonx = $Awonx +1;
    }
    if ($dobbelsteenB > $dobbelsteenA){
    $Bwonx = $Bwonx +1;
    }

$dobbelsteenA = "";
$dobbelsteenB = "";

$gegooid = $gegooid + 1;
        }

if ($Awonx > $BwonxB){
$Awon = $Awon +1;
}
if ($Bwonx > $Awonx){
$Bwon = $Bwon +1;
}

$Bwonx = "";
$Awonx = "";
$gegooid = "";

$spelen = $spelen +1;

}

echo"Totaal A: $Awonx ";
echo"Totaal B: $Bwonx ";

?>

Dit simuleert dan het gooien van C tegen D met 20 worpen per potje en 100.000 potjes.

Na alle optie's gedraaid te hebben kwam dit eruit:
Simulatie:

A - B = Totaal A: 94406 Totaal D: 5595
A - C = Totaal A: 69494 Totaal D: 30507
A - D = Totaal A: 5501 Totaal D: 94500

B - C = Totaal B: 94234 Totaal C: 5767
B - D = Totaal B: 49887 Totaal D: 50114

C - D = Totaal C: 94545 Totaal D: 5456

En ik heb mijn kansen zo berekend:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Kansen:

A - B:
P(A wint) = 2/3 x 1/2 + 1/3 x 1/2 + 1/3 x 1/2 = 2/3
P(B wint) = 1/2 x 2/3 = 1/3
--------------------------------------+
            1

A - C:
P(A wint) = 2/3 x 1/3 + 1/3 x 2/3 + 1/3 x 1/3 = 5/9
P(C wint) = 2/3 x 2/3 = 4/9
----------------------------------+
            1

A - D:
P(A wint) = 1/3 x 1 = 1/3
P(D wint) = 1 x 2/3 = 2/3
------------------------------------+
            1

B - C:
P(B wint) = 1/2 x 1/3 + 1/2 x 2/3 + 1/2 x 1/3 = 2/3
P(C wint) = 2/3 x 1/2 = 1/3
------------------------------------+
            1

B - D:
P(B wint) = 1/2 x 1 = 1/2
P(D wint) = 1 x 1/2 = 1/2
-------------------------------------+
            1

C - D:
P(C wint) = 2/3 x 1 = 2/3
P(D wint) = 1 x 1/3 = 1/3
-----------------------------------+
            1


Als je nu kijkt naar A - B dan zie je met simulatie:
A - B = Totaal A: 94406 Totaal D: 5595

En met mijn berekening:
P(A wint) = 2/3 x 1/2 + 1/3 x 1/2 + 1/3 x 1/2 = 2/3
P(B wint) = 1/2 x 2/3 = 1/3

Maar 2/3 van 100.000 is toch echt geen 94406!!!!
Dus nu is mijn vraag, wat is er fout mijn script of mijn berekeningen? 8)7

Kleine edit:
om het spel slim te spelen:
code:
1
2
3
4
Wanneer je tegenstander dobbelsteen A pakt moet jij: dobbelsteen D pakken (2/3 winkanst)
Wanneer je tegenstander dobbelsteen B pakt moet jij: dobbelsteen A pakken (2/3 winkanst)
Wanneer je tegenstander dobbelsteen C pakt moet jij: dobbelsteen B pakken (2/3 winkanst) OF A (5/9 winkanst)
Wanneer je tegenstander dobbelsteen D pakt moet jij: dobbelsteen C pakken (2/3 winkanst)

[ Voor 12% gewijzigd door niels_999348 op 14-05-2005 14:27 ]


Acties:
  • 0 Henk 'm!

  • 4VAlien
  • Registratie: November 2000
  • Laatst online: 24-06 09:47

4VAlien

Intarweb!

Dit is mijn kans tabel:

Afbeeldingslocatie: http://130.89.161.66/~rene/kans.png

Ik zie ook wat je fout doet. De kans om een individuele ronde te winnen is niet hetzelfde als de kans om het potje te winnen.

A tegen alleen B als voorbeeld:

verwachte score A : 20 * 2/3 = 13 1/3
verwachte score B : 20 * 1/3 = 6 2/3

Het is duidelijk dat B nauwelijks kans heeft om een potje over 20 ronden te winnen.

[ Voor 70% gewijzigd door 4VAlien op 14-05-2005 14:19 ]


Acties:
  • 0 Henk 'm!

  • niels_999348
  • Registratie: Maart 2003
  • Laatst online: 20:39
4VAlien schreef op zaterdag 14 mei 2005 @ 14:06:
Dit is mijn kans tabel:

[afbeelding]

Ik zie ook wat je fout doet. De kans om een individuele ronde te winnen is niet hetzelfde als de kans om het potje te winnen.

A tegen alleen B als voorbeeld:

verwachte score A : 20 * 2/3 = 13 1/3
verwachte score B : 20 * 1/3 = 6 2/3

Het is duidelijk dat B nauwelijks kans heeft om een potje over 20 ronden te winnen.
Mmms ik word er eerlijk gezegd niet veel wijzer van,
Ik speel 100.000 x het spelletje waarvan ik dus per spelletje 20x gooi. En nu bedoel jij dus dat de kans dat je X aantal potjes wint anders is dan als je 1 gooi wint?

[ Voor 55% gewijzigd door niels_999348 op 14-05-2005 14:22 ]


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:21

Dido

heforshe

Er gebeurt dan toch iets raars in je simulatie :)

De kansen zijn erg eenvoudig te berekenen:

Stel dat speler 1 dobbelstaan A kiest, dan zal speler twee altijd dobbelsteen D kiezen: hij heeft dan een winstkans van 2/3.
Als speler 1 B kiest, dan gooit speler 2 ook altijd met dobbelsteen D (winstkans is 50/50, hier klopt je simulatie wel :? )
Kiest speler 1 C, dan gooit speler 2 met B: 2/3 winstkans.
Kiest speler 2 D, dan kiest speler 2 voor steen C, ook 2/3 winstkans.

Met andere woorden, er zit een fout in je simulatie, maar als beide spelers slim spelen, dan klopt je simulatie wel: speler 1 zal altijd met steen B gooien, speler 2 altijd met steen D :)

edit: Ik had inderdaad over het hoofd gezien dat je 100.000 keer een potje van 20 spelletjes speelt. Dat verandert inderdaad je winstkansen, en verklaart ook waarom geval B-D wel klopt (daar veranderen je kansen niet).

In het geval dat een speler 1/3 kans heeft een individueel potje te winnen, heeft hij een kans van 1/3^20 om twintig potjes achter elkaar te winnen. Dit als illustratie van het feit dat de kans dat je 20 potjes wint niet gelijk is aan de kans dat je 1 potje wint ;)

[ Voor 28% gewijzigd door Dido op 14-05-2005 14:26 ]

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • BestTested!
  • Registratie: Oktober 2003
  • Laatst online: 21:32
Zoals 4VAlien al vermeldde. De kans om een enkel dobbelpotje te winnen heb je wel goed uitgerekend. Maar om de totale match te winnen, zal je dus 11 potjes van de 20 moeten winnen.

Acties:
  • 0 Henk 'm!

  • niels_999348
  • Registratie: Maart 2003
  • Laatst online: 20:39
Dido schreef op zaterdag 14 mei 2005 @ 14:23:
Er gebeurt dan toch iets raars in je simulatie :)

De kansen zijn erg eenvoudig te berekenen:

Stel dat speler 1 dobbelstaan A kiest, dan zal speler twee altijd dobbelsteen D kiezen: hij heeft dan een winstkans van 2/3.
Als speler 1 B kiest, dan gooit speler 2 ook altijd met dobbelsteen D (winstkans is 50/50, hier klopt je simulatie wel :? )
Kiest speler 1 C, dan gooit speler 2 met B: 2/3 winstkans.
Kiest speler 2 D, dan kiest speler 2 voor steen C, ook 2/3 winstkans.

Met andere woorden, er zit een fout in je simulatie, maar als beide spelers slim spelen, dan klopt je simulatie wel: speler 1 zal altijd met steen B gooien, speler 2 altijd met steen D :)
Mijn simulatie is alleen voor C - D als je een ander wilt moet je gewoon even de dobbelsteen waarden veranderen.

Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:21

Dido

heforshe

niels_999 schreef op zaterdag 14 mei 2005 @ 14:25:
[...]

Mijn simulatie is alleen voor C - D als je een ander wilt moet je gewoon even de dobbelsteen waarden veranderen.
Dat had ik wel gezien, maar zie mijn edit ;)
Feit blijft dat je simulatie voor een ideaal spelletje wel degelijk klopt, omdat de enige voor beide spelers meest gunstige situatie degene is waar speler 1 met steen B gooit, en speler 2 met steen D. Iedere andere keuze van speler 1 betekent dat ie geheid verliest als spler 2 nadenkt :)

[ Voor 35% gewijzigd door Dido op 14-05-2005 14:28 ]

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • niels_999348
  • Registratie: Maart 2003
  • Laatst online: 20:39
Dido schreef op zaterdag 14 mei 2005 @ 14:27:
[...]

Dat had ik wel gezien, maar zie mijn edit ;)
Feit blijft dat je simulatie voor een ideaal spelletje wel degelijk klopt, omdat de enige voor beide spelers meest gunstige situatie degene is waar speler 1 met steen B gooit, en speler 2 met steen D. Iedere andere keuze van speler 1 betekent dat ie geheid verliest als spler 2 nadenkt :)
Ja... maar ik kan die waarden dus veranderen van de dobbelstenen (wist je denk ik al),
maar als je kijkt dan is van b.v. A - B:
A - B = Totaal A: 94406 Totaal D: 5595
P(A wint) = 2/3 x 1/2 + 1/3 x 1/2 + 1/3 x 1/2 = 2/3
P(B wint) = 1/2 x 2/3 = 1/3

Maar 2/3 en 1/3 komt toch echt niet overeen met 94406 en 5595 :?

Acties:
  • 0 Henk 'm!

  • BestTested!
  • Registratie: Oktober 2003
  • Laatst online: 21:32
Om even terug te komen op de hoofdvraag.

Dus nu is mijn vraag, wat is er fout mijn script of mijn berekeningen?

In feite dus je berekening. Je hebt inderdaad gelijk de kans 1/3 tegen 2/3 is bij deze simulatie voor elk potje dat ze tegen mekaar spelen.
Een math duurt 20 potjes zoals je eerder al zei. Om de kans te bereken dat de gehele match wordt dus gewonnen zal je dus iets moeten berekenen als.
P(B wint) = 1/311 * aantal combinaties om 11 uit 20 te nemen (11 boven 20 ofzoiets).

Kansrekening is al een tijdje geleden. Maar volgens mij komt dit antwoord al een stuk dichter in de buurt van je simulatie-uitkomst

[edit] klein foutje. Hoeft niet precies 11 potjes te winnen, minstens 11. Dus kleine aanpassing aan bovenstaande berekening nodig!

[ Voor 10% gewijzigd door BestTested! op 14-05-2005 14:41 ]


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:21

Dido

heforshe

niels_999 schreef op zaterdag 14 mei 2005 @ 14:32:
Ja... maar ik kan die waarden dus veranderen van de dobbelstenen (wist je denk ik al),
maar als je kijkt dan is van b.v. A - B:
A - B = Totaal A: 94406 Totaal D: 5595
P(A wint) = 2/3 x 1/2 + 1/3 x 1/2 + 1/3 x 1/2 = 2/3
P(B wint) = 1/2 x 2/3 = 1/3

Maar 2/3 en 1/3 komt toch echt niet overeen met 94406 en 5595 :?
Dat had ik inderdaad gezien. Je simulatie zou dus wel kunnen kloppen, maar als je mijn edit nog eens goed leest, dan snap je misschien dat je berekeningen van geen kant kloppen.

Ik merkte slechts op dat ze wel kloppen in het geval van een 50/50 kansverdeling, en dat is het geval voor het ideale spel. Uit de vraagstelling leidt ik af dat uitgegaan mag worden van twee slimme spelers, dus ga ik ervan uit dat ze altijd de B-D combinatie kiezen, en de kans dus op elke manier 50/50 is, per spel, per 20 spellen, en per 100.000 keer 20 spellen :)

Als je de kans uit wlt rekenen dat iemand een pot van 20 spellen wint als ie 1/3 kans heeft om 1 spel te winnen zul je moeten uitrekenen wat de kans is dat hij minimaal 11 van de 20 spellen wint.

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • 4VAlien
  • Registratie: November 2000
  • Laatst online: 24-06 09:47

4VAlien

Intarweb!

Zo reken je de kansen uit voor a en b. (Het restant, 1-awin-bwin is de kans op een gelijkspel). Binomiaal (20,i) betekent 20 boven i.

code:
1
2
3
4
5
6
for i from 11 to 20 do

bwin := bwin + binomial(20,i)*(1/3)^i*(2/3)^(20-i);
awin := awin + binomial(20,i)*(2/3)^i*(1/3)^(20-i);

od;

Acties:
  • 0 Henk 'm!

  • niels_999348
  • Registratie: Maart 2003
  • Laatst online: 20:39
Dido schreef op zaterdag 14 mei 2005 @ 14:36:
[...]

Dat had ik inderdaad gezien. Je simulatie zou dus wel kunnen kloppen, maar als je mijn edit nog eens goed leest, dan snap je misschien dat je berekeningen van geen kant kloppen.

Ik merkte slechts op dat ze wel kloppen in het geval van een 50/50 kansverdeling, en dat is het geval voor het ideale spel. Uit de vraagstelling leidt ik af dat uitgegaan mag worden van twee slimme spelers, dus ga ik ervan uit dat ze altijd de B-D combinatie kiezen, en de kans dus op elke manier 50/50 is, per spel, per 20 spellen, en per 100.000 keer 20 spellen :)

Als je de kans uit wlt rekenen dat iemand een pot van 20 spellen wint als ie 1/3 kans heeft om 1 spel te winnen zul je moeten uitrekenen wat de kans is dat hij minimaal 11 van de 20 spellen wint.
Dus de kans dat A 1 potje van 20 ronden wint =
1 - binomcdf(20,2/3,10) = 0,908
0,908 x 100.000 = 90800
De kans dat A 1 potje van 20 ronden verliest =
1 - binomcdf(20,1/3,10) = 0,376
0,376 x 100.000 = 37600

Kortom gezegd ik denk dat dat de juiste berekeningen zijn :)
Geven jullie mij gelijk? :P
4VAlien schreef op zaterdag 14 mei 2005 @ 15:03:
Zo reken je de kansen uit voor a en b. (Het restant, 1-awin-bwin is de kans op een gelijkspel). Binomiaal (20,i) betekent 20 boven i.

code:
1
2
3
4
5
6
for i from 11 to 20 do

bwin := bwin + binomial(20,i)*(1/3)^i*(2/3)^(20-i);
awin := awin + binomial(20,i)*(2/3)^i*(1/3)^(20-i);

od;
Ik heb zo'n gevoel dat jij precies hetzelfde doet als mij alleen ik het op de TI 84 plus manier doe :9 tsja je bent scholier of niet he :+

[ Voor 19% gewijzigd door niels_999348 op 14-05-2005 15:16 ]


Acties:
  • 0 Henk 'm!

  • 4VAlien
  • Registratie: November 2000
  • Laatst online: 24-06 09:47

4VAlien

Intarweb!

je hebt alleen wat lelijke off by one errors in je code, zo speel je 100.001 partijen en volgens mij 21 ronden per potje, dat van die 21 ronden per potje maakt wel uit!!!
Dus de kans dat A 1 potje van 20 ronden wint =
1 - binomcdf(20,2/3,10) = 0,908
0,908 x 100.000 = 90800
De kans dat A 1 potje van 20 ronden verliest =
1 - binomcdf(20,1/3,10) = 0,376
0,376 x 100.000 = 37600
0,908 als winstkans heb ik ook, maar 0,908 + 0,376 is groter dan één dus daar laat ik je nog even mee stoeien.

[ Voor 51% gewijzigd door 4VAlien op 14-05-2005 15:24 ]


Acties:
  • 0 Henk 'm!

  • niels_999348
  • Registratie: Maart 2003
  • Laatst online: 20:39
4VAlien schreef op zaterdag 14 mei 2005 @ 15:20:
je hebt alleen wat lelijke off by one errors in je code, zo speel je 100.001 partijen en volgens mij 21 ronden per potje, dat van die 21 ronden per potje maakt wel uit!!!


[...]


0,908 als winstkans heb ik ook, maar 0,908 + 0,376 is groter dan één dus daar laat ik je nog even mee stoeien.
Kuch Kuch
0,0376 sorry voor mijn fout ;)
0,0376 + 0,908 komt best in de buurt van 1 dan heb je natuurlijk ook nog gelijk spelen :p
0,0376 x 100.000 = 3760 dus :P dat ligt nog dichter bij mijn simulatie

Precieze berekening:
(1-binomcdf(20,1/3,10))+(1-binomcdf(20,2/3,10))+binompdf(20,1/3,10) = 1
_/-\o_ :9 dat is volgens mij helemaal correct niet?

[ Voor 12% gewijzigd door niels_999348 op 14-05-2005 15:34 ]


Acties:
  • 0 Henk 'm!

  • niels_999348
  • Registratie: Maart 2003
  • Laatst online: 20:39
En nu ben ik er helemaal uit:
Op de foto hiernaast zie je vier dobbelstenen. In figuur P.4 zie je de uitslagen van de vier dobbelstenen. Met de dobbelstenen speel je het volgende spel. Laat je tegenstander een van de dobbelstenen kiezen en kies daarna zelf een dobbelsteen uit de overgebleven drie. De speler die vervolgens het hoogste cijfer gooit krijgt een punt. Doe dit 20 keer. Steeds laat je je tegenstander als eerste een dobbelsteen kiezen. Winnaar is degene met de meeste punten.

Dobbelsteen A: 2, 2, 2, 2, 6, 6
Dobbelsteen B: 5, 5, 5, 1, 1, 1
Dobbelsteen C: 4, 4, 4, 4, 0, 0
Dobbelsteen D: 3, 3, 3, 3, 3, 3

Als voorbeeld som met uitleg doe ik de kans dat A tegen B wint of verliest:

Voor 1 keer gooien is de kans:
P(A wint) = 2/3 x 1/2 + 1/3 x 1/2 + 1/3 x 1/2 = 2/3
P(B wint) = 1/2 x 2/3 = 1/3

Maar omdat we nu 20x gooien moeten we de kansen op A wint 11x tot en met A wint 20x:
P(A wint 1 rondje) = 1-binomcdf(20,2/3,10) = 0,908
P(B wint 1 rondje) = 1-binomcdf(20,1/3,10) = 0,0376
P(Gelijkspel) = binompdf(20,1/3,10) OF binompdf(20,2/3,10) = 0,054

Wanneer we nu kijken naar een script dat 100.000 rondjes x 20 keer gooien simuleert:

Totaal A: 90942
Totaal B: 3769
Totaal gelijkspel: 5289
Totaal worpen: 20
Totaal spelen: 100000

0,908 x 100.000 = 90800
0,0376 x 100.000 = 3760
0,054 x 100.000 = 5400

Hieruit blijkt dat als je tegenstander dobbelsteen B pakt jij zeker te weten wint als jij A pakt.

En dan mijn updated php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php 
set_time_limit(600); 

$X = 100000; // We willen 100.000 partijtjes spelen 
$worpen = 20; // 20 worpen per partijtje 

while ( $spelen != $X ) { 

        while ( $gegooid != $worpen ) { 

$dobbelsteenA = array("2", "2", "2", "2", "6", "6"); 

$dobbelsteenA = $dobbelsteenA[rand(0,5)];  

$dobbelsteenB = array("5", "5", "5", "1", "1", "1"); 

$dobbelsteenB = $dobbelsteenB[rand(0,5)];  

    if ($dobbelsteenA > $dobbelsteenB){ 
    $Awonx = $Awonx +1; 
    } 
    if ($dobbelsteenB > $dobbelsteenA){ 
    $Bwonx = $Bwonx +1; 
    } 

$dobbelsteenA = ""; 
$dobbelsteenB = ""; 

$gegooid = $gegooid + 1; 
        } 

if ($Bwonx < $Awonx){
$Awon = $Awon +1; 
} 
if ($Bwonx > $Awonx){ 
$Bwon = $Bwon +1; 
} 
if ($Bwonx == $Awonx){
$gelijkspel = $gelijkspel +1;
}

$Bwonx = ""; 
$Awonx = "";
$worpenecht = $gegooid;
$gegooid = ""; 

$spelen = $spelen +1; 

} 

echo"Totaal A: $Awon <br>"; 
echo"Totaal B: $Bwon <br>"; 
echo"Totaal gelijkspel: $gelijkspel <br>";
echo"Totaal worpen: $worpenecht <br>";
echo"Totaal spelen: $spelen <br>";
?>
Pagina: 1