Oppgave i modellering for biologi-OL#
I denne opppava skal du se nærmere på modeller for populasjonsdynamikk og populasjonssimuleringer.
Simulering av populasjonsdynamikk#
Vi kan utforske hvordan ulike faktorer påvirker en populasjon ved å bruke programmering. Eksempelet nedenfor viser et eksempel på hvordan dette kan gjøres. IKKE KJØR PROGRAMMET ENDA.
I programmet defineres en del variabler for antall harer (N) i en populasjon. Deretter defineres tidsrommet vi ønsker å studere populasjonen i, og en vekstrate for antall harer per tidsenhet.
Vi legger deretter startbetingelsene i to lister (harer og tid) for å kunne plotte antall harer mot tida etterpå.
Simuleringsløkka er det viktigste i programmet. Denne løkka går helt til tida er større enn eller lik slutt-tida. For hvert tidssteg beregner vi antall harer ved neste tid. Da bruker vi følgende modell:
Oppgave
Forklar med egne ord hva modellen ovenfor sier om populasjonen. Hvilke forutsetninger ligger til grunn for modellen (hva forutsetter vi om populasjonen)?
Skisser en graf som viser antall harer som funksjon av tid uten å kjøre programmet.
Nå kan du kjøre programmet. Studer grafen - ser den ut som du trodde? Diskuter hvorfor/hvorfor ikke.
Legg til egnede aksetitler i programmet. Du kan legge til aksetitler på denne måten før show-kommandoen (ikke fjern anførselstegnene):
xlabel("aksetittel")
ylabel("aksetittel")
Hvilke forutsetninger legger vi til grunn for populasjonsmodellen vår? Eksperimenter med ulike verdier av k. Hvilke biotiske og abiotiske faktorer kan påvirke denne konstanten?
Modifiser programmet på disse måtene trinnvis og studer og beskriv veksten etter hver endring: a) Det blir mindre mat fra og med den 20. måneden. Juster vekstfaktoren fra og med denne måneden for å reflektere dette. Du kan selv bestemme hvor mye endringen skal ha å si. Begrunn valget ditt og forklar hva modellen nå beskriver. Du kan få et hint om hvordan du kan gjøre det her:
Hint
Du kan legge følgende if-test (vilkår) inni løkka:
while t < t_slutt:
if t == 20:
k = k - #etellerannet
Bytt ut #etellerannet med en egnet tall.
b) Dersom antall harer overstiger 200 i økosystemet, griper vi inn og avliver 50 stykker. Benytt samme hint ovenfor til å sjekke om harene overstiger 200. Hvis du ikke får det til, kan du se løsningsforslaget her:
Løsningsforslag
Du kan legge følgende if-test (vilkår) inni løkka:
while t < t_slutt:
if t == 20:
k = k - 0.1
if N > 200:
N = N - 50
N = N + k*N
t = t + dt
harer.append(N)
tid.append(t)
Lag et program som simulerer vekst av bakterier. Bruk programmet ovenfor som utgangspunkt. Programmet kan være nesten helt likt, men du kan fjerne modifikasjonene du gjorde i oppgave 6. Den eneste forskjellen, er at simuleringen skal benytte følgende modell for bakterievekst:
der \(B_{t+dt}\) er antallet bakterier ved neste tid, \(t + dt\), og \(B_t\) er antallet bakterier ved tida \(t\). I tillegg har vi lagt inn en bæreevne \(b\).
Løsningsforslag
Du kan legge følgende if-test (vilkår) inni løkka:
from pylab import *
N0 = 100 # Bakterier ved t = 0
N = N0
t = 0 # Starttid i timer
t_slutt = 12*5 # Tid i måneder
dt = 1 # Tidssteg mellom hver simulering
k = 0.1*dt # Vekstrate per time
b = 1000 # Bæreevne
# Arrayer
bakterier = []
tid = []
bakterier.append(N0)
tid.append(t)
# Beregningsløkke
while t < t_slutt:
N = N + k*N*(1 - N/b)
t = t + dt
bakterier.append(N)
tid.append(t)
scatter(tid,bakterier)
show()
Forklar hvordan modellen ovenfor skiller seg fra modellen vi brukte for å studere harene.
Forklar hva som menes med bæreevne og velg en passende bæreevne for simuleringen din. Pass på at programmet simulerer lenge nok fram i tid til at populasjonen når bæreevnen. Modifiser gjerne programmet med for eksempel varierene vekst eller annet.
Hvilke tetthetsavhengige og tetthetsuavhengige faktorer påvirker populasjonen, bæreevnen og reproduksjonsraten i modellen ovenfor?
Kan du tenke deg andre modeller for populasjonsvekst? Prøv gjerne å modifisere programmet ovenfor og test ulike modeller. Du kan gjerne finne på ting helt selv, så lenge du begrunner godt!