© h.hofstede (h.hofstede@hogeland.nl)

SIMULEREN.
       
Simuleren betekent letterlijk  "naspelen"  of  "nabootsen", en dat is precies wat we onze trouwe TI deze les gaan laten doen.
Het zal daarbij gaan om kansexperimenten die te ingewikkeld zijn om direct uit te rekenen na te gaan spelen.
Een belangrijke "TOOL"  daarbij is de randomgenerator van onze TI.

Randomgenerator.
De TI heeft  4 speciale functies om een random (dat betekent "willekeurig") getal te maken. Daarvan zijn er twee erg interessant en 2 ook wat minder.  De interessanten zijn:

1.  randInt  (via  MATH- PRB - 5: randint)
Deze functie maakt een willekeurig geheel getal. Daarbij kun  je 3 getallen achter randint invullen, gescheiden door de dikke komma, dus zó:  randint(a, b, c)
a en b geven aan tussen welke waarden de twee gehele getallen moeten liggen (a en b zélf mogen daarbij ook nog)
c geeft hoeveel keer je zo'n willekeurig getal wilt hebben. Als je niets invult voor c dan krijg je er eentje.

2.  rand  (via  MATH - PRB - 1: rand)
Deze functie maakt een willekeurig decimaal getal (10 cijfers achter de komma) tussen 0 en 1. Hier kun je tussen haakjes erachter alleen maar aangeven hoeveel zulke getallen je wilt.
Nou zeg je misschien direct: "Dat komt toch nooit voor dat je precies een getal tussen 0 en 1 wilt",  maar ik hoop dat je begrijpt dan je met de functie:     a + b * rand   dan een decimaal getal tussen  a  en  a + b kunt maken. Kijk, dat is al veel algemener! 
       

(a  + b * rand)   maakt een  decimaal getal tussen  a  en  a + b

       
(de twee minder interessante randomfuncties zijn  trouwens randnorm (getallen die normaal verdeeld zijn)  en  randbin(getallen die binomiaal verdeeld zijn))

Uiteraard kun je de uitkomst van een worp weer direct opslaan in een geheugen naar keuze:
-   randint(1,4) → A  slaat een geheel getal tussen [1, 4]  op in geheugen A
-   8 * rand → X   slaat een decimaal getal tussen 0 en 8 op in geheugen X

Werken met  Lijsten.
Als je vaker een randomfunctie laat uitvoeren en wilt bijhouden hoe vaak elke uitkomst is voorgekomen kun je vaak het best werken met lijsten  van getallen. Die lijsten hebben de namen L1, L2, ....L6  die je boven de getaltoetsen vindt (2nd  1  geeft bijv.  L1)
Om daarmee te werken zijn de volgende commando's nuttig:
ClrAllLists  maakt alle lijsten schoon  (2nd  MEM   4: ClrAllLists)
seq(X, X, 1, 6)  →  L1  zet de getallen 1 tm 6 in L1  (we gaan zo meteen het gooien van een dobbelsteen simuleren, dus de mogelijk uitkomsten zijn dan 1 tm 6). Dat vind je bij  2nd - LIST - OPS - 5:seq
6 → dim(L2)  zorgt ervoor dat L2 ook uit 6 getallen gaat bestaan.  
dim vind je bij   2nd -LIST - OPS - 3:dim
in deze lijst gaan we zo meteen de aantallen keren dat 1 tm 6 werd gegooid zetten.
       
OK, Laten we gaan gooien!! Ik heb er zin in!
Dat gaat met het volgende programmaatje (regels zijn weer genummerd)

   
PROGRAM DOBBEL
1  : ClrHome
2   : ClrAllLists
3   : seq(X, X, 1, 6) → L1
4   : 6 → dim(L2)
5   : Input"Hoeveel keer?", N
6   : For (I, 1, N)
7   :     Randint(1,6)  → X
8   :     L2(X) + 1 →  L2(X)
9   : end
       
Wat gebeurt er allemaal?

1 + 2

scherm en lijsten schoonmaken  (je kunt ze trouwens ook in één regel zetten met een dubbele punt ertussen)
3 L1 vullen met  1, 2, 3, 4, 5, 6
4 L2 ook grootte 6 geven
5. In laten voeren hoe vaak je wilt gooien
7 Gooien met een dobbelsteen
8. Aantal gegooide ogen één verhogen
       
Voer het programma maar eens uit en kijk daarna bij STAT - EDIT wat er in de lijsten L1 en L2 is verschenen.
Bij mij gaf dat na 100 keer gooien de lijsten hiernaast.

Hmm... beetje vaak 6.... maar ja, 't is ook nog maar 100 keer.....
 

       
Het Monty-Hall Probleem

Je hebt een quiz gewonnen en krijgt drie deuren te zien. Achter één ervan staat een dure auto, achter de twee anderen staat een geit. Je kiest een deur uit, en daarna maakt de quizmaster één van de andere twee deuren open (hij weet dat de auto daar niet staat). Er blijkt dus inderdaad een geit achter deze deur te staan.

Hij vraagt je vervolgens heel gemeen: "Wil je nog van keus veranderen?". 
Is dat een goede tactiek of niet? Of maakt het allemaal niets uit?

Nou, gewoon simuleren maar, zou ik zeggen.....
       
N is hoe vaak we het experiment uitvoeren
W is hoe vaak we moeten Wisselen, B is hoe vaak we moeten Blijven

-  P is de deur waar de prijs echt achter zit.
-  K is de deur die we hebben gekozen.
-  X is de deur die de quizzmaster open maakt.

De blauwe lus zorgt ervoor dat de deur die opengemaakt wordt (X)  NIET de prijs is (P) en NIET de door ons gekozen deur (K). Zolang dat nog wel zo is kies je een andere deur om open te maken Dat is wat de quizzmaster doet (de enige mogelijke deur openmaken als wij niet de prijs hadden, of willekeurig één van de overige 2 deuren openmaken als wij wel de prijs hadden)

Let op dat nieuwe commando "or".
Dat test of aan de eerste OF de tweede voorwaarde is voldaan. (je vindt het bij  TEST - LOGIC - 2:or)


De rest is vanzelfsprekend denk ik:
 -   Als onze keuze de prijs is moeten we Blijven (B)
 -   Als onze keuze de prijs niet is moeten we Wisselen (W).
(het rode deel met die W is trouwens overbodig, want daar doen we verder toch niets mee)

Mijn TI gaf bij 500 keer simuleren:
PROGRAM DEUREN
:  ClrHome
:  Input"Hoe vaak?", N
:  0 → W
:  0 → B
:  For (I, 1, N)
:       randint(1, 3) → P
:       randint(1, 3) → K
:       randint(1, 3) → X
:       While  (X = P)  or  (X = K)

:            randint(1, 3)  → X
:       End     

:       If  K = P
:             Then
:             B + 1  → B 
:             Else
:             W + 1  → W

:        End
:  End
:  Disp  "procent blijven:", 100 * B/N
       

 

       
Het blijkt dat je in onze simulatie in 33% van de gevallen moet blijven bij je keuze en in 67% dus moet switchen.
       
Stukkie geschiedenis....

Deze vraag werd beroemd toen hij gesteld werd door een lezer van  Parade Magazine in 1990 in de column van Marilyn Vos Savant  (dat was de vrouw met het hoogste IQ van alle vrouwen in de VS; ze stond daarmee in het Guiness Book of World Records).  Marilyn had een column waarin lezers vragen mochten stellen aan haar. Op deze vraag antwoordde ze dat je moest switchen omdat je dan een kans van 2/3 op de auto had.

Nou, toen was het hek van de dam!!!

Meer dan 10000 lezers reageerden, dat dat toch onzin was, immers er zijn op het beslismoment nog slechts twee deuren over, dus de kans is 50% op de prijs of je nou switcht of niet.....
Een groot deel van die lezers bestond zelfs uit wiskundigen !!!

Toch had Marilyn gelijk!
Als je ons programma hierboven bekijkt, dan zie je meteen waarom dat zo is!!!!!
Kijk:  de enige plek waar B eentje hoger wordt gemaakt is na de test  K = P
Maar die test heeft niets met die blauwe flauwekul te maken !!!!!! Dat verandert niets aan K of aan P
 
Eigenlijk het enige dat je doet is twee random getallen K en P kiezen (uit 1, 2, 3)  en daarna kijken of K gelijk is aan P.  Nou, dat is natuurlijk in  1/3 van de keren het geval, en DAN moet je blijven!  Dus 2/3 switchen...

foutje

plaatjes

       
  OPGAVEN
       
1. Verander het dobbelprogramma hierboven zodat je met 3 stenen gooit in plaats van 1.
       
2. Je gooit net zolang met een dobbelsteen totdat je een keer lager gooit dan de vorige keer. Daarna stop je.
Hoe vaak zul je dan gemiddeld kunnen gooien?
Schrijf een programma dat dat voor je simuleert. Laat het programma vragen hoe vaak je moet simuleren.
       
3. Het probleem van de verzamelaar.
Schrijf een programma dat simuleert hoe vaak je gemiddeld met een dobbelsteen moet gooien om alle aantallen ogen (1 tm 6) een keer gegooid te hebben.
       
     
       

© h.hofstede (h.hofstede@hogeland.nl)