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.

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?

Spore antallSeksere gjennom kastene
KastTallEr 6?antallSeksere
13Nei0
26Ja1
32Nei1
46Ja2
51Nei2
64Nei2
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.
Alternativ forklaring/metode: Regn ut hva resultatet «burde» blitt

Alternativ metode – innenfor pensum, men ikke hovedmetoden her

Sammenligne empirisk med teoretisk sannsynlighet

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}.

Empirisk vs. forventet
TypeAntall seksere
Forventet (teoretisk)1
Faktisk (denne kjøringen)2, innenfor normal variasjon

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
Spore antallKron
KastResultat
1.kron
2.mynt
3.kron
4.kron, antallKron=3
  1. Kastene er kron, mynt, kron, kron, altså 4 kast totalt
  2. tre av dem er kron
  3. antallKron økes 3 ganger

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
Empirisk sannsynlighet
Antall seksereKastP
1721 0000,17

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

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

Vis fasit
Teoretisk vs. empirisk sannsynlighet
TypeKilde
Fra formelteoretisk sannsynlighet
  1. Denne sannsynligheten regnes ut med en formel
  2. den er ikke basert på faktisk gjennomførte forsøk
  3. den kalles teoretisk 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
Avvik fra teoretisk sannsynlighet
TypeVerdi
Empirisk (53100\frac{53}{100})0,53
Teoretisk0,5
Differanse0,03
  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,530,5=0,030,53 - 0,5 = 0,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
Feil ved få forsøk
Antall forsøkPålitelighet
5for få til å konkludere
  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

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
Tolke pseudokoden
DelBetydning
Løkke 1 000 gangertrekk tilfeldig tall 1-6
Tell tallet 1simulerer og teller enere
  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
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 160,1667\frac{1}{6} \approx 0,1667?

Vis fasit
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
  1. 166510000=0,1665\frac{1 665}{10 000} = 0,1665 og 167210000=0,1672\frac{1 672}{10 000} = 0,1672, begge svært nære 160,1667\frac{1}{6} \approx 0,1667
  2. ja, begge er 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
10 000 mot 10 forsøk
Antall forsøkPålitelighet
10lav
10 000høy, jf. de store talls lov
  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

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
Bygge pseudokoden
StegHandling
StartantallSyvere=0
Gjenta 100 gangertrekk to tall, sjekk sum=7, øk telleren
  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