Simulere tilfeldige forsøk med programmering

Noen sannsynligheter er kompliserte å regne ut nøyaktig for hånd. Da kan du bruke en algoritme til å SIMULERE mange tilfeldige forsøk (f.eks. tusen terningkast) og telle hvor ofte et utfall skjer. Jo flere forsøk, jo nærmere kommer den EMPIRISKE sannsynligheten (fra simuleringen) den TEORETISKE sannsynligheten (regnet ut med formel).

Tips

  • Jo flere forsøk simuleringen kjører, jo nærmere kommer resultatet den teoretiske sannsynligheten. Dette kalles «de store talls lov».
  • En simulering med FÅ forsøk (f.eks. 10) kan gi et resultat langt fra den teoretiske sannsynligheten, rent tilfeldig. Ikke la et lite antall forsøk lure deg til å tro formelen er feil.
  • Regn ut hva resultatet «burde» blitt. I stedet for bare å telle utfallet, sammenlign det med den TEORETISKE sannsynligheten: med P(sekser)=16P(\text{sekser}) = \frac{1}{6} over 6 kast «forventer» vi i snitt 1 sekser. Å få 2 seksere i én kjøring er innenfor normal tilfeldig variasjon. Det ville krevd mange flere kjøringer for å se om simuleringen faktisk nærmer seg 16\frac{1}{6}.

Eksempel: Spore en enkel simulering av terningkast

En algoritme kaster en terning 6 ganger og teller antall seksere. Pseudokoden er: «SETT antallSeksere = 0. FOR HVERT kast (6 ganger): trekk et tilfeldig tall fra 1 til 6. HVIS tallet er 6: øk antallSeksere med 1.» I én kjøring ble tallene 3, 6, 2, 6, 1, 4. Hvor mange seksere telte algoritmen?

Løsning:
  1. Vi sporer algoritmen gjennom de seks kastene 3, 6, 2, 6, 1, 4
  2. kast 1 (3): ikke 6, antallSeksere fortsatt 0
  3. kast 2 (6): er 6, antallSeksere blir 1
  4. kast 3 (2): ikke 6, fortsatt 1
  5. kast 4 (6): er 6, antallSeksere blir 2
  6. kast 5 (1) og kast 6 (4): ikke 6, fortsatt 2
  7. svaret er antallSeksere = 2.
Spore antallSeksere gjennom kastene
KastTallEr 6?antallSeksere
13Nei0
26Ja1
32Nei1
46Ja2
51Nei2
64Nei2

Oppgaver

Prøv minst én oppgave på hvert nivå.

Lett(3)

L-31En simulering kaster en mynt 4 ganger: kron, mynt, kron, kron. Bruk pseudokoden «SETT antallKron = 0. HVIS kastet er kron: øk antallKron med 1.» Hvor mange ganger blir antallKron øket?

Vis fasit
  1. Kastene er kron, mynt, kron, kron, altså 4 kast totalt
  2. tre av dem er kron
  3. antallKron økes 3 ganger
Spore antallKron
KastResultat
1.kron
2.mynt
3.kron
4.kron, antallKron=3

L-32En simulering av 1 000 terningkast fikk 6 på 172 av kastene. Hva er den empiriske sannsynligheten (som desimaltall, avrundet til to desimaler)?

Vis fasit

172 av 1 000 kast: 1721 000=0,17\frac{172}{1\ 000} = 0{,}17

Empirisk sannsynlighet
Antall seksereKastP
1721 0000,17

L-33Hva kalles sannsynligheten du regner ut FRA en formel, i motsetning til den du får FRA en simulering?

Vis fasit
  1. Denne sannsynligheten regnes ut med en formel
  2. den er ikke basert på faktisk gjennomførte forsøk
  3. den kalles teoretisk sannsynlighet
Teoretisk vs. empirisk sannsynlighet
TypeKilde
Fra formelteoretisk sannsynlighet
Middels(3)

M-31En algoritme simulerer 100 myntkast og teller 53 kron. Hvor langt er dette fra den teoretiske sannsynligheten (0,5)?

Vis fasit
  1. 53 av 100 kast ga kron
  2. empirisk sannsynlighet: 53100=0,53\frac{53}{100} = 0{,}53
  3. teoretisk: 0,5
  4. differanse: 0,53−0,5=0,030{,}53 - 0{,}5 = 0{,}03
Avvik fra teoretisk sannsynlighet
TypeVerdi
Empirisk (53100\frac{53}{100})0,53
Teoretisk0,5
Differanse0,03

M-32En elev kjører en simulering med bare 5 terningkast og får 0 seksere. Konkluderer med at «sannsynligheten for sekser er 0». Hva er feilen i resonnementet?

Vis fasit
  1. Med så få forsøk (5) er det høyst sannsynlig å ikke få noen seksere selv om P(sekser)=16P(\text{sekser})=\frac{1}{6} er riktig
  2. for få forsøk til å konkludere
Feil ved få forsøk
Antall forsøkPålitelighet
5for få til å konkludere

M-33Skriv om følgende pseudokode-steg til vanlig norsk: «FOR HVERT kast (1 000 ganger): trekk et tilfeldig tall fra 1 til 6. HVIS tallet er 1: øk antallEttere med 1.»

Vis fasit
  1. Løkken gjentar 1 000 ganger, trekker et tilfeldig tall 1-6, og teller de gangene tallet blir 1
  2. simulerer 1 000 terningkast og teller enere
Tolke pseudokoden
DelBetydning
Løkke 1 000 gangertrekk tilfeldig tall 1-6
Tell tallet 1simulerer og teller enere
Vanskelig(3)

V-31To simuleringer av 10 000 terningkast fikk henholdsvis 1 665 og 1 672 seksere. Er begge resultatene rimelige sammenlignet med den teoretiske sannsynligheten 16≈0,1667\frac{1}{6} \approx 0{,}1667?

Vis fasit
  1. 1 66510 000=0,1665\frac{1\ 665}{10\ 000} = 0{,}1665 og 1 67210 000=0,1672\frac{1\ 672}{10\ 000} = 0{,}1672, begge svært nære 16≈0,1667\frac{1}{6} \approx 0{,}1667
  2. ja, begge er rimelige
Sammenligne to simuleringer
SimuleringAndel
1 66510\frac{665}{10} 0000,1665
1 67210\frac{672}{10} 0000,1672
Teoretisk (16\frac{1}{6})0,1667, begge rimelige

V-32Hvorfor gir en simulering med 10 000 forsøk normalt et mer pålitelig anslag på sannsynligheten enn en simulering med 10 forsøk?

Vis fasit
  1. 10 000 forsøk er mye mer enn 10 forsøk, og jo flere forsøk, jo mindre påvirker tilfeldige svingninger andelen totalt
  2. flere forsøk gir mer pålitelig anslag, jf. de store talls lov
10 000 mot 10 forsøk
Antall forsøkPålitelighet
10lav
10 000høy, jf. de store talls lov

V-33Skriv pseudokode (i samme stil som i eksempelet) for å simulere 100 kast med to terninger og telle hvor mange ganger summen blir 7.

Vis fasit
  1. Algoritmen må gjenta 100 ganger, trekke TO tilfeldige tall per runde, regne ut summen, og telle når summen er 7
  2. SETT antallSyvere=0, gjenta 100 ganger: trekk to tall, sjekk om summen er 7, øk telleren
Bygge pseudokoden
StegHandling
StartantallSyvere=0
Gjenta 100 gangertrekk to tall, sjekk sum=7, øk telleren