Repetisjon II: Biologioppgaver#
Simulering av tilfeldige hendelser kaller vi Monte Carlo-simuleringer etter det berømte kasinoet i Monte Carlo (MC). Her skal vi benytte MC-simuleringer til å simulere enkel nedarving av øyenfarge. Modellen vi bruker, baserer seg på at vi plukker ett tilfeldig allel som koder for øyenfarge fra mor og ett allel fra far. For å plukke ut et tilfeldig allel, kan vi bruke funksjonen choice, som plukker ut et tilfeldig element fra en liste:
from pylab import *
genotype_far = ["B", "b"]
print(choice(genotype_far))
b
Oppgave:
Forklar hvordan programsnutten ovenfor fungerer.
Lag et program som trekker et tilfeldig allel fra både mor og far. Programmet skal skrive ut hvilken genotype og fenotype barnet får. Du kan bruke koden nedenfor som utgangspunkt hvis du syns det er vanskelig å starte.
Hint: Fyll inn i koden
Løsningsforslag
from pylab import * genotype_mor = ["B", "b"] genotype_far = ["B", "b"] allel_mor = choice(genotype_mor) allel_far = choice(genotype_far) genotype = allel_mor + allel_far if genotype == "bb": fenotype = "blå" else: fenotype = "brune" print("barnet har genotypen", genotype, "og får derfor fenotypen", fenotype, "øyne.")
Forklar hva programmet nedenfor gjør uten å kjøre programmet. Hvilke forutsetninger og forenklinger legger vi til grunn for denne simuleringen?
Kjør programmet 3–4 ganger. Hva gjør programmet? Stemmer dette med det du trodde? Hvorfor varierer resultatene fra programmet mellom hver kjøring?
Endre systematisk på N og kjør programmet etter hver endring. Hva forteller resultatene av kjøringene deg? Endre nå systematisk på genotypene til mor og far, og undersøk hva som skjer. Skriv ned det du finner ut og prøv å validere resultatene fra simuleringene ved å lage krysningsskjemaer for nedarvingen.
Modifiser programmet slik at det lagrer den relative frekvensen av blåøyde barn og antall barn i hver sin liste hver gang løkka kjører. Plott den relative frekvensen av blåøyde barn mot antallet barn. Hva beskriver plottet? Drøft følgende diskusjon mellom to foreldre med genotype Bb: «Vi har jo fått fire barn – hvorfor har ingen av dem blå øyne? Det er veldig usannsynlig».
Løsningsforslag
from pylab import * genotype_mor = ["B", "b"] genotype_far = ["B", "b"] blaa = 0 N = 10000 frekvens = [] barn = [] for antall_barn in range(1, N+1): allel_mor = choice(genotype_mor) allel_far = choice(genotype_far) genotype = allel_mor + allel_far if genotype == "bb": blaa = blaa + 1 frekvens.append(blaa/antall_barn) barn.append(antall_barn) plot(barn, frekvens) xlabel("Antall kast") ylabel("Relativ frekvens blåøyde barn") axhline(y=1/4, color='red') # Markerer linja 1/4 title("Simulering av nedarving av øyenfarge med N = " + str(N)) show()
Vi skal nå lage et program som simulerer dihybrid krysning for fargen og formen på erter ved nedarving. I dihybrid krysning er genotypen og fenotypen bestemt av to gener. Fenotypene som er mulig i krysningen nedenfor, er gul eller grønn, rynkete eller glatt, der genvarianten for glatt (R) og gul (Y) er dominante. Lag et program som finner sannsynligheten for å få grønne, rynkete erter. Programmet kan gjerne plotte den relative frekvensen som funksjon av antall avkom, slik som ovenfor. Du kan ta utgangspunkt i programmet nedenfor og fylle inn det som mangler:
Løsningsforslag
from pylab import *
plante1_y = ["Y", "y"]
plante1_r = ["R", "r"]
plante2_y = ["Y", "y"]
plante2_r = ["R", "r"]
grønne_rynkete = 0
N = 10000
frekvens = []
avkom = []
for antall_avkom in range(1,N+1):
allel1 = choice(plante1_y)
allel2 = choice(plante1_r)
allel3 = choice(plante2_y)
allel4 = choice(plante2_r)
genotype = allel1 + allel2 + allel3 + allel4
if genotype in ["yyrr", "yryr", "yrry", "ryyr", "rryy", "ryry"]:
grønne_rynkete = grønne_rynkete + 1
frekvens.append(grønne_rynkete/antall_avkom)
avkom.append(antall_avkom)
plot(avkom, frekvens, color = "green")
xlabel("Antall avkom")
ylabel("Relativ frekvens av grønne, rynkete erter")
axhline(y = 1/16, color = "red") # Markerer linja 1/4
show()
Forklar hvordan programmet fungerer når du har lagd det ferdig.