Näytetään tekstit, joissa on tunniste ekologia. Näytä kaikki tekstit
Näytetään tekstit, joissa on tunniste ekologia. Näytä kaikki tekstit

maanantai 12. helmikuuta 2024

Ekologinen kaavakokoelma

Tähän postaukseen olen pyrkinyt kokoamaan lyhyesti ekologisen sovellusalan kaavoja aiemmista postauksistani. Pidän tarkoituksella turhat selittelyt mahdollisimman lyhyenä, ja pyrin keskittymään vain olennaiseen. Lisätietoa malleista ja niitä koskevista ominaisuuksista löytyy aihetta tarkastelevista blogipostauksista. Poikkeuksena kaksi viimeistä mallia, joista en ainakaan kirjoitushetkellä ole julkaissut erillisiä kirjoitelmia.

Kasvumallit

Kahdesta vakiona käytetystä kasvumallista eksponentiaalinen kasvaa kiihtyvää tahtia ja sopiikin siksi ekologisia sovelluksia paremmin esimerkiksi koronkorkoa tai taloudellista kasvua kuvaaviin malleihin. Logistinen kasvu taas olettaa kasvun tasaantuvan, ja mallin on siksi havaittu sopivan edellistä paremmin myös ekologisiin ja väestötieteellisiin sovelluksiin.

Eksponentiaalinen kasvu

\begin{equation}\frac{dN}{dt}=(b-d)N(t)  \end{equation}

Logistinen kasvu

\begin{equation}\frac{dN}{dt}=rN(1-\frac{N}{K}). \end{equation}

Peto-saalismallit

Peto-saalis-mallit kuvaavat petoeläinten sekä niiden saaliiden välistä dynamiikkaa. Lotka-Volterra on alan klassikko ja yksi vanhimmista lajissaan, mutta mallin epämääräiset oletukset mm. populaatioiden kasvun ja petojen loputtoman ruokahalun suhteen johtivat nopeasti vaihtoehtoisten mallien kehittämiseen. Kahdesta suositumpi, Arditi-Ginzburg, painottaa petojen ja saaliseläinten välistä suhdetta dynamiikassaan, perusajatuksena siis, että liian vähä saalistiheys johtaa petojen harvenemiseen, mutta myös liian suuri petojen tiheys saaliiden vähenemiseen. Rosenzweig-MacArthur ottaa huomioon pelkän saalistuksen ohella myös eläinten luonnollisen poistuman. Molemmat mallit ovat erittäin herkkiä lähtöoletuksille sekä käytetyille funktioille, joten näiden kanssa on oltava tarkkoja.

 Lotka-volterra

\begin{equation} \frac{dx}{dt} = \alpha x - \beta xy \end{equation}
\begin{equation} \frac{dy}{dt} = \delta xy - \gamma y, \end{equation}

Arditi-Ginzburg

\begin{equation} \frac{dx}{dt}=f(x)x-g(\frac{x}{y})y \end{equation}
\begin{equation} \frac{dy}{dt}=\alpha g(\frac{x}{y})y -\beta y \end{equation}

Rosenzweig-MacArthur

\begin{equation} \frac{dx}{dt}=rx(1-\frac{x}{K})-yh(x) \end{equation}
\begin{equation} \frac{dy}{dt}=y(-\delta+\gamma h(x)) \end{equation}

Lajien välinen kilpailu

Lajien välisessä kilpailussa yksi tai useampi samasta elintilasta ja ekologisesta lokerosta kilpaileva laji on mallinnettu logistisen kasvumallin mukaan. Tässä tapauksessa oletuksena siis on, että elintilan resurssit kykenevät elättämään vain tietyn määrän eläimiä. Kahden lajin kesken voi syntyä myös tasapaino, jolloin molemmat kykenevät ylläpitämään elinkelpoista populaatiota.

Logistinen kilpailumalli

\begin{equation} \frac{dN_i}{dt} = r_i N_i (\frac{K_i-N_i}{K_i}) \end{equation}

Evoluutiomallit

Evoluutiomalleissa mallinnetaan valittujen alleelien siirtymistä sukupolvelta toiselle. Wright-Fisher mallissa oletetaan, että siirtymä sukupolvien välillä tapahtuu kerralla ilman hallitsemattomasti sekaisin lisääntyviä yksilöitä. Wright-Fisherin binomilaskentaan perustuva malli perustuukin eläimiä paremmin kausittain lisääntyvän ja lakastuvan kasvikunnan ilmiöiden kuvaamiseen. Eläinkunnan mallintamiseen soveltuvassa Moran-mallissa Markov-säännön mukaisesti yksilöt voivat vapaasti siirtyä tilasta toiseen, eli lisääntyä tai kuolla, ja eri sukupolvet voivat elää ja lisääntyä sekaisin keskenään.

Wright-Fisher -malli

\begin{equation}\binom{2N}{k}p^q q^{2N-k}=\frac{(2N)!}{k!(2N-k)!}p^q q^{2N-k}\end{equation}

Moran-malli

\begin{equation}P_{i,i-1}=\frac{N-1}{N}\frac{i}{N} \end{equation}
\begin{equation}P_{i,i}=1-P_{i,i-1}-P_{i,i+1}\end{equation}
\begin{equation}P_{i,i+1} = \frac{1}{N} \frac{N-1}{N} \end{equation}

keskiviikko 7. helmikuuta 2024

Peliteoria ja ekologia, osa 1: Nashin tasapaino, evoluutio ja ESS

ESS-lähde otettu täältä, minkä ohella ohella käytössä on ollut myös Smithin ja Pricen kirja. En päässyt käsiksi Thomasin vaihtoehtoista ESS-määritelmää käsittelevään aineistoon, joten tyydyin sen kohdalla tylsästi vain Wikipedian artikkeliin.

Vangin dilemma. Nashin tasapaino merkitty punaisella. Tässä tilanteessa kumpikaan osapuoli ei voi yksipuolisesti parantaa asemaansa muuttamalla strategiaansa, joten Nashin tasapaino on ruudussa (2,2).




Formaalimmin muotoiltuna: Olkoon kuvatunlainen nelikenttä sekä strategiat S ja T, jolloin siis diagonaali vasemmalta oikealle on (S,S) ja (T,T). Tällöin Nashin tasapaino saavutetaan tilanteessa, jossa
\begin{equation}E(S,S) \geq E(S,T),\end{equation}
eli kumpikaan osapuoli ei voi yksipuolisesti parantaa asemaansa muuttamalla strategiaansa. Nashin tasapaino ei välttämättä kuitenkaan ole pareto-optimaalinen, jolloin siis saavutettu tasapaino olisi kirjaimellinen optimitilanne kummallekin pelaajalle. Vangin dilemmassa ylempänä vangit pääsisivät yhteensä vähemmällä vaikenemalla.

Evolutionary Stable Strategy eli ESS voidaan kirjoittaa edellisen määritelmän tavoinS != T
\begin{equation}E(S,S) > E(S,T) \ \textbf{tai} \end{equation}
\begin{equation}E(S,S)=E(S,T) \ \textbf{ja} \ E(S,T)>E(T,T) \end{equation}

Määritelmän ylempi osa tarkoittaa "vahvaa Nashin ehtoa", eli tilannetta, jossa strategiaa muuttamalla ei voi yksipuolisesti parantaa tilannettaan, mutta jossa ei ole edes yhtä hyvää lopputulosta tarjolla, vaan pelkästään heikompia. Alemmassa oletetaan kolme lopputulemaltaan identtistä strategiaa sekä yksi muita huonompi. Jo määritelmästä siis huomataan, että Nashin tasapaino ei välttämättä aina ole ESS. Yllä kuvatussa vangin dilemmassa Nashin tasapaino on ESS, sillä kilpailevat strategiat (S,T) ja (T,S) ovat strategiaa (S,S) heikompia lopputulokseltaan. Tässä tapauksessa myös E(T,T) on ESS. E(T,T) on myös pareto-optimaalinen.

Tavallisen ESS-mallin ohella on myös olemassa "vahva" määritemä jonka mukaan kun S != T, pätee
\begin{equation}E(S,S) \geq E(S,T) \ \textbf{ja} \end{equation}
\begin{equation} E(S,T)>E(T,T). \end{equation}

Vahvan määritelmän mukaan ESS on Nashin tasapaino, jolle pätee lisäksi aiempi ESS-ehto. Vahva ESS ei välttämättä ole tavanomainen tai seuraavassa esitettävä heikko ESS. Tässä tapauksessa Nashin tasapaina jo tavallinen ESS eivät ole vahvasti ESS, sillä lopputulokseltaan paras strategia ei ole vaihtoehtoja heikompi. Vahvan määritelmän mukainen ESS voisikin siis löytyä tässä tapauksessa strategiasta (T,T), sillä tällöin se on kaikkia vaihtoehtoja parempi, mutta strategia (S,S) ei voi täyttää määritelmän alemman osan vaatimusta. Tällöin strategia (T,T) on myös pareto-optimaalinen.

Weakly Evolutionary Stable Strategy eli WESS voidaan kirjoittaa edellisen määritelmän tavoin, S != T
\begin{equation}E(S,S) > E(S,T) \ \textbf{tai} \end{equation}
\begin{equation}E(S,S)=E(S,T) \ \textbf{ja} \ E(S,T) \geq E(T,T) \end{equation}

Tällöin siis avautuu mahdollisuus, että kaikki strategiayhdistelmät ovatkin lopputulemaltaan yhtä hyviä. Vangin dilemman Nashin tasapaino ja ESS on määritelmän ylemmän osan perusteella myös heikko. Strategia (T,T) on paitsi heikko ESS, myös pareto-optimaalinen.

Jatketaan aiempia määritelmiä uusilla tuloksilla.

Jos strategialle S != T pätee
\begin{equation}E(S,T)>E(T,T), \end{equation}
on kyseessä on lokaalisti ylivertainen strategia. Tällöin kahden strategia S tuotta lähtökohtaisesti aina paremman lopputuloksen strategiaa T vastaan pelattuna.
Jos taas on olemassa sellainen ũ>0 ja u välillä (0,ũ), joilla pätee
\begin{equation}E(S, uT + (1-u)S)>E(T,uT+(1-u)S),\end{equation}
on strategialla S tasainen invaasiomuuri. Tällöin jos populaation alueella on pienempi kilpaileva populaati strategialla T, strategiaa S käyttävä populaatio hiljalleen syrjäyttää kilpailijansa luonnollisen kilpailuetunsa kautta. Oletuksena kaikki ryhmän jäsenet pitäytyvät samassa yksittäisessä strategiassa.

Seuraavat kolme määritelmää ovat yhtenevät:
1. Strategia on vahva ESS.
2. Strategialla on tasainen invaasiomuuri.
3. Strategia on lokaalisti ylivertainen.

Viimeiset kaksi määritelmää ja teoreema ovat Hofbauerin artikkelista, johon en pääse toistaiseksi käsiksi. Hofbauerin artikkelissa on tähän kuitenkin olemassa myös todistus, joten jos joskus satun sen löytämään, saatan sen käydä täällä tarkemmin läpi. Paremman puutteessa käytetään lähteenä tässä Stanfordin yliopiston filosofian laitoksen tieteellisiin julkaisuihin erikoistuneelta mainiolta SEP-sivustolta/tietokannasta löytyvää artikkelia. Strategian ylivertaisuus voidaan ainakin johtaa suoraan vahvan ESS:n määritelmästä.

Seuraavaan lähde täältä. En pääse lukemaan Sigmundin ja Nowakin alkuperäisartikkelia, joten käytän tässä vain sekundaarista lähdettä. Seuraavassa on sovellettu ESS-teoriaa populaatiokokoihin. Todellisessa maailmassa populaatioiden välinen dynamiikka nimittäin riippuu pelkän strategian ohella myös elintilasta ja resursseista kilpailevien yksilöiden määristä. Tätä tarkoitusta varten määritellään  myös erilliset kriittiset rajat populaatiokoille sekä näiden vaikutukselle ryhmien välisessä kilpailussa.

Olkoon evolutiivisia strategioita kuvaava matriisi muotoa.



Matriisin strategioiden E_A ja E_B kelpoisuus voidaan ilmaista muodossa
\begin{equation}E_A = ap_A +bp_A\end{equation}
\begin{equation}E_b = cp_B +dp_B.\end{equation}

Tällöin ehto mutaation A invaasiolle on

\begin{equation}E_A > E_B, \ eli \ p_A > \frac{d-b}{a-c}p_B. \end{equation}

Edellisestä huomataan, että strategioiden välinen siirtymäpiste on ehto

\begin{equation}p_A = \frac{d-b}{a-c}p_B\end{equation}

Oletetaan seuraavaksi, että a>c, tällöin voidaan sama kirjoittaa
\begin{equation}\lambda = \frac{p_A}{p_B}\end{equation}sekä invaasiokynnys  muodossa
\begin{equation}\lambda_0 = \frac{d-b}{a-c}.\end{equation}

Kun pätee
\begin{equation}\lambda_0 = \lambda, \end{equation}
kaksi strategiaa ovat tasapainossa, mutta kun siirrytään epäyhtälöihin, valloittaa toinen strategia elintilaa toiselta. Tällöin mutaatiot ja kilpailevat populaatiot syrjäyttävät vähitellen alkuperäispopulaatiota - tai toisin päin. Invaasiokynnyksen ollessa pieni vähäisemmänkin ulkopuolisen ryhmän on helppoa tunkeuta vallitsevan populaation elinalueille, ja homogeenisen populaation ylläpitäminen käy vaikeammaksi. Yllä annettu esitys siis perustuu sellaisenaan viimeksi annettuun lähteeseen.

Aiemmasta peto-saalismallista ja sen yhteydestä ESS-malliin täällä. En nyt ala turhia referoimaan erinomaisen tekstin sisältöä tänne, mutta sanotaan nyt vaikka, että dynaamisessa tapauksessa aiemmat stabiliteettitulokset sekä erityisesti asymptoottista stabiiliutta koskeva teoria osuvat näppärästi yhteen ESS-strategian kanssa. Järjestelmän ollessa stabiili populaatio kykenee siis pitämään puolensa mutaatioita vastaan.

Peliteorian dynaamisempa puolta tullaan käsittelemään erikseen ESS-sarjan myöhemmissä osissa.

torstai 18. tammikuuta 2024

Vaihtoehtoja Lotka-Volterralle

Diclaimer: Bloggerin matematiikkatyökalu on järjettömän buginen ja epäluotettava. Siksi olenkin tekstissäni pyrkinyt mahdollisuuksien mukaan välttämään ylimääräisten symbolien käyttöä.

Edellisessä, Lotka-Volterran peto-saalis -mallia käsittelevässä postauksessa käytiin läpi mallin historiaa sekä yleisiä ominaispiirteitä ja rajoituksia. Huomattiin, että kyseinen malli perustuu hyvin epärealistisille oletuksille peto- ja saaliseläinten kantojen ominaisuuksista. Käytännössä onkin huomattu, ettei Lotka-Volterra aina pädekään erityisen tarkasti kaikissa tilanteissa, minä vuoksi mallille onkin vuosien varrella kehitetty vaihtoehtoisia, oletuksiltaan joustavampia peto-saalis -malleja. Tässä postauksessa käydään läpi kaksi keskeisintä ja ehkäpä yleisimmin käytettyä: Arditi Ginzburg sekä Rosenzweig-MacArthur.

Mistä Lotka-Volterraa siis tarkalleen ottaen kritisoitiin? Ensinnäkin: Lotka-Volterra lähti oletuksesta, että petoeläimillä on rajaton ruokahalu, mikä ei reaalimaailmassa voi pitää eikä pidäkään paikkanasa. Samoin Lotka-Volterrassa petoeläinten puuttumisen seurauksena saaliseläimen kanta kasvaa Malthusin lain mukaisesti rajattomasti - tämäkään oletus ei välttämättä kestä päivänvaloa. Tässä  erinomaisesa luennossa on käsitelty ekologisten mallien ominaisuuksia syvällisemmin ja kattavammin kuin tässä blogipostauksessa.

Arditi-Ginzburg

Arditi-Ginzburgin peto-saalis -malliksi kutsutaan yhtälöparia

\begin{equation} \frac{dx}{dt}=f(x)x-g(\frac{x}{y})y \end{equation}

\begin{equation} \frac{dy}{dt}=\alpha g(\frac{x}{y})y -\beta y \end{equation}
jossa funktio f() kuvaa saaliseläimen kannan luonnollisia muutoksia, funktio g() liittyy saaliseläinten sekä petojen kantojen suhteeseen, alfa on vakio petojen saaliiksi saamasta lisääntymisedusta sekä beta petojen kuolemaa kuvaava suhdeluku. Arditi-Ginzburg ottaa siis huomioon monipuolisemmin populaatioiden muutoksen muutenkin kuin näiden keskinäisen riippuvuuden kautta. Malli onkin vahvasti suhdelukupainotteinen. Arditin ja Ginzburgin päätyminen mainittuihin suhdelukuihin on pitkä tarina, josta voi lukea tarkemmin täällä, referoin keskeisiä kohtia tänne muutamin täydennyksin ja huomioin. 

Tässä kohtaa on syytä huomata, ettei funktioita f() ja g() oleteta yleisesti annetuiksi, vaan niiden paikalle voidaan sovittaa tarpeen mukaan erilaisia suhdeluvuilla toimivia troofisia funktioita eriävine ominaisuuksineen. Tässä blogipostauksessa on tarkoituksella käytetty mahdollisimman yksinkertaisia troofisia funktioita

\begin{equation}f(x)=\gamma x \end{equation}

sekä

\begin{equation}g(\frac{x}{y})= \frac {\gamma x}{y} \end{equation}

jolloin yhtälöpari voidaan kirjoittaa muotoon

\begin{equation} \frac{dx}{dt}=\gamma x² - \gamma x \end{equation} 

\begin{equation} \frac{dy}{dt}=\alpha \gamma x -\beta y \end{equation}

ja asettamalla derivaatat nolliksi, saadaan tasapainopisteiksi (0,0) , (1,gamma*alfa/beta), joiden muodostama Jacobin matriisi on muotoa

\begin{bmatrix} 2 \gamma x - \gamma & 0 \\ \alpha \gamma & -\beta \end{bmatrix}

mistä huomataan, että mikäli beta ja gamma oletetaan aina nollaa suuremmaksi, ovat matriisin ominaisarvot origossa aina samanmerkkiset, eli järjestelmä on annetuilla arvoilla ja oletuksilla lähtökohtaisesti epävakaa. Toisen tasapainopisteen kohdalla itseisarvoista on toinen positiivinen ja toinen negatiivinen, jolloin kyseessä on epävakaa satulapiste. Ominaisarvoista ja stabiiliudesta lisää tämän linkin takaa.

Demonstroisin mieluusti mallia soveltuvalla kuvaajalla, mutta annetuilla oletuksilla ja valinnoilla kannat nousevat aluksi vain pudotakseen nopeasti nollaan, joten vaikka esimerkkinä käytetyt funktiot malliin sopivatkin, eivät ne yhdessä näytä tuottavan juurikaan kelvollista jälkeä. Tässä yksi pätevä opetus siitä, miksi lähtöoletusten kanssa on oltava tarkkana!

Rosenzweig-MacArthur

Rosenzweig-MacArthur -malliksi kutsutaan yhtälöparia

\begin{equation} \frac{dx}{dt}=rx(1-\frac{x}{K})-yh(x) \end{equation}

\begin{equation} \frac{dy}{dt}=y(-\delta+\gamma h(x)) \end{equation}

 Rosenzweig-MacArthur -mallista voi lukea lisää täällä. Yhtenä keskeisenä tavoitteena Rosenzweigilla ja MacArthurilla oli saaliseläimen populaation malthuslaisen kasvun rajoittaminen logistisella kasvufunktiolla. Yksinkertaisuudessaan ylempi differentiaaliyhtälö kuvaa saaliseläimen lisääntymistä ja kuolemaa muista kuin petoeläimestä johtuvista syistä vähennettynä petoeläimen saalistamisesta johtuva väheneminen. Alempi differentiaaliyhtälö kuvaa petoeläinkannan kasvua ja vähenemistä. Tässä mallissa funktio h(x) kuvaa petoeläimen saalistamien saaliseläinten lukumäärää, K populaatioiden koko yhteensä, delta petoläinten poistumaa ja gamma lisääntymistä.

Yllä annetussa artikkelissa on erinomaisen syvällistä analyysia aiheesta, ja tässäkin blogissa tullaan ehdottomasti myöhemmin käsittelemään mainittua teoriaa, mutta tässä vaiheessa tyydymme käymään lyhyesti mallin pääkohdat läpi. Smith yksinkertaistaa yllä annetun kaavan Holling II -tyyppiseksi peto-saalis -malliksi, jolloin sen muodoksi saadaan
\begin{equation} \frac{dx}{dt} = x(1-\frac{x}{K})-\frac{mxy}{1+x} \end{equation}
\begin{equation} \frac{dy}{dt} = y(-c + \frac{mx}{1+x})\end{equation}


Tutkitaan seuraavaksi lyhyesti mallin stabiilisuusominaisuuksia. Tasapainopisteet saadaan yhtälöparista
\begin{equation} 0 = x(1-\frac{x}{K}-\frac{my}{1+x})\end{equation}
\begin{equation} 0 = y(-c + \frac{mx}{1+x})\end{equation}

Tässä tapauksessa tasapainopisteet ovat (0,0), (k,0). Smithin \ määritellään myös eläinten välisen yhteiselon tasapainopiste, mutta emme ota sitä tällä kertaa huomioon. Jacobin matriisiksi saamme tasapainopisteellä (k,0)
\begin{equation}J=\begin{bmatrix} -1 & -\frac{mk}{1+k} \\ 0 & \frac{mk}{1+k}-c \end{bmatrix}\end{equation}
mistä huomataan, että piste on epästabiili, sillä toinen ominaisarvoista on aina positiivinen, ja alempikin on negatiivinen vain jos pätee
\begin{equation}\frac{mk}{1+k}<c.\end{equation}
Tasapainopisteen (0,0) Jacobin matriisi on
\begin{equation}J=\begin{bmatrix} 1 & -m \\ 0 & -c \end{bmatrix},\end{equation}
mistä taas huomataan, että pisteet ovat epästabiileja, sillä toinen ominaisarvo on välttämättä positiivinen, sillä oletuksena c > 0.

Ensimmäisessä kuvaajassa on voimassa
\begin{equation}\frac{mk}{1+k}<c,\end{equation} jolloin piste (k,0) ja (0,0) ovat epästabiileja

Alemmassa epäyhtälö on käännetty, jolloin pisteet (k,0) ja (0,0) edelleen epästabiileja, mutta käyrien muoto on täysin erilainen.

Käytetyt koodit, muokattu Lotka-Volterran mallista:

import numpy as np
import matplotlib
matplotlib.use('tkagg')
import matplotlib.pyplot as plt
from scipy.integrate import odeint

y0 = [10,1] # fish, bears, units in hundreds

t = np.linspace(0,50,num=1000)

m = 1.1
c = 2
k = 100

params = [m,c,k]

def sim(variables, t, params):
    # fish population
    x = variables[0]
    # bear population
    y = variables[1]
    
    m = params[0]
    c = params[1]
    k = params[2]
    
    dxdt = x*(1-x/k) - m*x*y/(1+x)
    dydt = -c*y + m*x*y/(1+x)
    
    return([dxdt,dydt])

y = odeint(sim, y0, t, args=(params,))

f,(ax1,ax2) = plt.subplots(2)

line1, = ax1.plot(t,y[:,0], color="b")

line2, = ax2.plot(t,y[:,1], color="r")

ax1.set_ylabel("Fish (hundreds)")
ax2.set_ylabel("Bears (hundreds)")
ax2.set_xlabel("Time")

plt.show()

sunnuntai 14. tammikuuta 2024

Logistiset kasvumallit

Diclaimer: Bloggerin matematiikkatyökalu on järjettömän buginen ja epäluotettava. Siksi olenkin tekstissäni pyrkinyt mahdollisuuksien mukaan välttämään ylimääräisten symbolien käyttöä.

Lähdetään oletuksesta, että N(t) on populaation koko hetkellä t, b on syntyneiden määrä ja d kuolleiden määrä. Saadaan

\begin{equation}N(t+\triangle t)=N(t)+b \triangle t N(t) -d \triangle t N(t)  \end{equation}

\begin{equation}\frac{N(t+\triangle t)-N(t)}{\triangle t}=(b-d)N(t)  \end{equation}

kun t lähestyy nollaa, saadaan differentiaaliyhtälöksi

\begin{equation}\frac{dN}{dt}=(b-d)N(t)  \end{equation}

sekä differentiaaliyhtälön ratkaisuksi

\begin{equation}N(t)=N_0 e^{rt},  \end{equation}
missä r on kasvuvauhti. Kyseessä on toisin sanoen eksponentiaalisesti kasvava yhtälö. Malthusin lähde, Chasnovin Mathemathical Biology -moniste löytyy ilmaiseksi täältä. Seuraavassa yksinkertainen diskreetti esimerkki eksponentiaalisen kasvun mallin kuvaajasta:

Perusominaisuuksiltaan eksponentiaalinen malli sopii erinomaisesti taloudellisen kasvun ja kassaantumisen kuvaamiseen, mutta resurssien luonnossa asettamien rajoitusten vuoksi erityisen huonosti populaatioiden kasvun mallintamiseen. Tästä syystä Malthusin kasvumallin pohjalta kehitettiin Verholstin malli eli logistinen kasvumalli, jossa otetaan huomioon kasvun yläraja K:

\begin{equation}\frac{dN}{dt}=F(N)=rN(1-\frac{N}{K}). \end{equation}
Verhulstin mallissa N kuvaa populaation kokoa, r kasvuvakiota ja K populaation koon ylärajaa. Logistisen kasvumallin kasvunopeus hidastuu ajan ja populaation koon kasvun mukana. Logistisen kasvumallin differentiaaliyhtälölle voidaan muotoilla seuraavanlainen kuvaaja populaation muutosnopeuden ja koon mukaan:


Logistinen kasvumalli ratkaisemalla differentiaaliyhtälöiden ratkaisumenetelmiä hyödyntäen päädytään kaavaan

\begin{equation}N(t)=\frac{P_0*K*e^{r*t}}{(K-P_0)+P_0*e^{rt}} \end{equation}

jonka pohjalta saadaan muotoiltua populaation koon kuvaaja:

 

Logistiselle kasvumallille saadaan tasapainopisteiksi N=0 ja N=K. Tasapainopisteiden stabiilius saadaan tarkistettua derivoimalla logistinen malli, jolloin saadaan
\begin{equation}F'(N)=r(1-\frac{2N}{K}). \end{equation}

Sovittamalla tasapainopisteet derivoituun yhtälöön, huomataan, että kun N=0, yhtälö saa muodon F'(0)=r ja kun F'(K)=-r. Kyseessä on toisin sanoen satulapiste, jossa nollapiste on epästabiili sekä K stabiili. Populaatio voi siis lähestyä nollapistettä mielivaltaisen lähelle kyeten kuitenkin kasvamaan siitä pois, mutta lähestyminen kapasiteetin ylärajaa (voi) johtaa ajautumiseen kohti ääripistettä.

Logistisella mallilla on olemassa myös Allee-efektillä täydennetty muoto

\begin{equation}\frac{dN}{dt}=-rN(1-\frac{N}{A})(1-\frac{N}{K}), \end{equation}
missä populaation kasvuvauhti on negatiivinen kun 0<A<N sekä positiivinen kun N<A<K, oletuksella että on aina voimassa A<K. Ensimmäisessä tapaksessa Allee-efektiä sanotaan "vahvaksi", jälkimmäisessä "heikoksi".  Tällöin populaation koolla on siis vaikutusta kasvunopeuteen, mutta vaikutuksen suuruus ja suunta riippuvat muuttujan A arvoista. Allee-efektillä varustetun logistisen kasvumallin kuvaajat ovat vahvalla Allee-efektillä kun K=102 ja A=40:

sekä heikolla kun A = 10 ja N = 11-100:


Allee-efektillä täydennetyn mallin stabiilisuusominaisuudet seuraavat pitkälti tavallisen logistisen mallin vastaavia, joten niitä ei tässä erikseen käydä läpi. Aiheesta on syvällisemmin kirjoittanut Lv, Chen ja Chen artikkelissaan.

Wallace ja Tsoularis muotoilivat esseessään seuraavan yleisen muodon logistisen kasvun funktiolle:

\begin{equation} \frac{dN}{dt}=rN^{\alpha}(1-(\frac{N}{K})^{\beta})^{\gamma} .\end{equation}

Huomataan, että kun alfa = 1 ja gamma = 0, saadaan eksponentiaalinen kasvumalli. Kun taas alfa = 1, beta=1 ja gamma=1, saadaan tavallinen logistinen kasvumalli. Muuttujien eri arvoilla voidaan edelleen muotoilla suoraan ainakin Gompertzin malli, Blumbergin malli, Hyper-Gompertz... käytännössä kaikki kuvaavat samanlaista käyrää, mutta pienin erilaisin painotuksin. Mainittuja malleja ei tässä käsitellä enempää.

Käytetyt R-koodit:


eksponentiaalifunktio <- function(r,t){
    funktio <- r*exp(t)
    return(funktio)
}

plot(x=1:7,y=eksponentiaalifunktio(0.1,1:7),type = "l", col="red",xlab="aika",ylab = "populaation koko")
 
logistinen_funktio <- function(r,N,K){
funktio <- r*N*(1-N/K)
return(funktio)
}


plot(x=0:100,y=logistinen_funktio(0.5,0:100,100),type = "l", col="red",xlab="N",ylab = "F(N)")
 
logistinen_funktio1 <- function(p_0,K,t,r){
funktio <- p_0*K*exp(r*t)/((k-p_0)+p_0*exp(r*t))
return(funktio)
} 
 
plot(x=0:30,y=logistinen_funktio1(1,100,0:30,0.5),type = "l", col="red",xlab="aika",ylab = "populaation koko")

allee_funktio <- function(r,N,K,A){
    funktio <- -r*N*(1-N/A)*(1-N/K)
    return(funktio)
}

plot(x=0:100,y=allee_funktio(0.5,0:100,102,40),type = "l", col="red",xlab="N",ylab = "F(N)")
lines(x, y2, type = "l", col = "black")   
plot(x=0:89,y=allee_funktio(0.5,11:100,102,10),type = "l", col="red",xlab="N",ylab = "F(N)")
lines(x, y2, type = "l", col = "black")  

maanantai 8. tammikuuta 2024

Lotka-Volterra ja kahden lajin logistinen kilpailumalli

Diclaimer: Bloggerin matematiikkatyökalu on järjettömän buginen ja epäluotettava. Siksi olenkin tekstissäni pyrkinyt mahdollisuuksien mukaan välttämään ylimääräisten symbolien käyttöä.

Eräänä päivänä joskus ensimmäisen maailmansodan melskeiden jälkeisinä vuosina italialainen matemaatikko Vito Volterra sai tyttärensä ystävän vaikutuksesta tehtäväkseen selittää kalakantojen mystistä vaihtelua. Sodan vuoksi kalastaminen oli jäänyt maassa pitkäksi aikaa vähemmälle, ja Italian vesissä kaiken järjen mukaan eli enemmän saaliskalaa kuin aikoihin. Käytännössä kuitenkin huomattiin kalastajien haaveihin tarttuvan enemmän petoja kuin ravintoketjun pohjilla olevaa saalista. Volterra julkaisi tuloksensa vuonna 1926. Tämän tietämättä samaiseen tulokseen oli kuitenkin tullut Alfred J. Lotka soveltaessaan kemiallisiin reaktioihin kehittämiään funktioita biologisiin kohteisiin. Näin mallin nimeksi siis vakiintui Lotka-Volterran peto-saalis -malli. Kyseessä on yksi biologisen matematiikan perustuloksista.

Lotka-Volterran malli perustuu seuraaville yksinkertaisille oletuksille:
1. Saaliseläimet löytävät aina tarpeeksi ruokaa.
2. Petojen ravinto riippuu täysin saaliseläimistä.
3. Populaation muutosnopeus riippuu populaation koosta.
4. Tarkasteluaikana ympäristö ei muutu.
5. Petoeläimillä on loputon ruokahalu.
6. Kumpaakin populaatiota on vain yhtä "tyyppiä", eikä lajien yksilöiden välillä ole merkittävää eroa.

Käytännössä mallin oletukset eivät ole kovinkaan realistisia, minkä vuoksi Lotka-Volterrassa on perinteisesti ollut paljon kehittämisen ja soveltamisen varaa. Lotka-Volterran peto-saalismallia sekä logistista kasvumallia on edelleen jatkokehitelty ja yhdistelty spesifimpiä käyttökohteita silmällä pitäen, kuten Arditi-Ginzburgin sekä Rosenzweig-MacArthurin mallit, mutta nämä ansaitsevat omat blogipostauksensa joskus toiste.Tässä on käsitelty lähinnä yksinkertaiseen Lotka-Volterraan sekä kahden samasta ekologisesta lokerosta kilpailevan lajin malliin.

Lotka-Volterra -peto-saalis-malli

Lotka-Volterran peto-saalis-malliksi kutsutaan seuraavaa yhtälöparia:

\begin{equation} \frac{dx}{dt} = \alpha x - \beta xy \end{equation}

\begin{equation} \frac{dy}{dt} = \delta xy - \gamma y, \end{equation}

missä x on saaliseläinten esiintymistiheys, y saalistajien esiintymistiheys, alfa saaliseläimen maksimitiheys, beta saalistajan vaikutus saalistettavan lisääntymisnopeuteen, delta saaliseläimen vaikutus saalistajan lisääntymisnopeuteen sekä gamma saalistajan kuolemisnopeuteen.

Otetaan seuraavaksi esimerkki, jossa alfa on 1.1, beta 0.4, delta 0.1 ja gamma 0.4. Tällöin saadaan seuraavat ajasta riippuvat kuvaajat:


Kuvassa ylempänä saaliseläimen, tässä tapauksessa kalan, dynamiikka suhteutettuna saalistajan, eli karhun, vastaavaan suhteessa aikaan. Kuvasta huomataan petoeläimen nopean kasvun johtavan saaliseläimen ja pienellä viiveellä myös saalistajan itsensä kannan romahtamiseen. Saaliseläinten kannan kasvaessa seuraa saalistajan kanta perässä. 

Esimerkki ja sen visualisointiin käytetty python-koodi löytyvät Mike Saint Antoinen Youtube-kanavalta, josta löytyy enemmänkin ekologiseen mallintamiseen paneutuvaa materiaalia käyttökelpoisine ja selkeine koodeineen. Näitä tullaan soveltamaan enemmänkin jatkossa sikäli kuin mahdollista.

Jatketaan kuitenkin mallimme ominaisuuksien tutkimista. Haetaan ensin Lotka-Volterran tasapainopisteet, eli kun derivaatta on nolla, kirjoitetaan

\begin{equation} 0 = \alpha x - \beta xy \end{equation}

\begin{equation} 0 = \delta xy - \gamma y, \end{equation}

mistä nähdään, mallilla on kaksi tasapainopistetta, ensimmäinen kun x=0 ja y=0 sekä toinen, kun y = alfa/beta ja x = gamma/delta. Ottamalla mallista Jacobin matriisi

\begin{bmatrix}\alpha-\beta y & -\beta x \\ \delta y & \delta x - \gamma \end{bmatrix}

huomataan, että pisteessä (0,0) matriisin ominaisarvot ovat alfa ja -gamma,
eli funktion nollapiste on satulapiste ja epästabiili, sillä kyseiset vakiot ovat mallissa
oletusarvoisesti nollaa suurempia, eivätkä ominaisarvot siksi voi missään kohtaa olla
samanmerkkiset. Näin siis lajit voivat kutistua kuinka pieneksi tahansa ja kasvaa silti entiseen
kokoonsa. Toisella tasapainopisteellä saadulla Jacobin matriisilla ei ole reaalisia ominaisarvoja.

Kahden lajin logistinen Lotka-Volterra -kilpailumalli

Johdetaan seuraavaksi kahden lajin välinen kilpailumalli yhdistelemällä Lotka-Volterraa ja logistista kasvufunktiota

\begin{equation} \frac{dN_i}{dt} = r_i N_i (\frac{K_i-N_i}{K_i}) \end{equation}

missä N kuvaa populaation kokoa, K kapasiteettia sekä r kasvunopeutta. Yllä annettu kaava kuvaa lajin sisäisen kilpailun vaikutusta populaation kasvuun. Kun i = 1,2, saadaan kahden eri populaation toisistaan erillinen sisäinen dynamiikka. Yhdistämällä kahden populaation logistiset kasvumallit Lotka-Volterraan saadaan

\begin{equation} \frac{dN_1}{dt} = r_1 N_1 (\frac{K_1-N_1-\alpha_{12}N_2}{K_1}) \end{equation}
\begin{equation} \frac{dN_2}{dt} = r_2 N_2 (\frac{K_2-N_2-\alpha_{21}N_1}{K_2}) \end{equation}

Kaavat kuvaavat kahden populaation kilpailullista tilannetta, alfat toisen populaation vaikutusta toisen kasvuun. Edelleen voidaan laskea tasapainoehdot:

\begin{equation} N_1 = K_1 - \alpha_{12}N_2 \end{equation}

\begin{equation} N_2 = K_2 - \alpha_{21}N_1 \end{equation}

mistä huomataan, että kun kun ylemmässä kaavassa N_1 = 0, saadaan N_2 = K_1/alfa_12 sekä alemmassa N_1 = K_2/alfa_21 kun N_2 = 0. Tulosta vastaavat kuvat virtaussuuntineen ja  perusteluineen löytyvät täältä. Ottamalla seuraavaksi Jacobin matriisi, jonka diagonaalialkiot ovat muotoa


\begin{equation} J_{ii} = r_i(\frac{K_i-2N_i-\alpha_{ij}N_j}{K_i}) \end{equation}

sekä päätyalkiot muotoa

\begin{equation} J_{ij} = \frac{-r_i N_j \alpha_{ji}}{K_i} \end{equation}

Asettamalla saadut tasapainopisteet (K_1/a_21,0) ja (0,K_2/a_12), huomataan, että päätyalkioista toinen menee aina nollaan, toinen diagonaalialkioista on aina negatiivinen sekä matriisin ominaisarvot ovat samanmerkkisiä vain jos pätee K_1/a_21 > K_2 ja K_2/a_12 > K_1.

Esimerkkinä kahden kilpaleivan lajin vaikutuksesta toisiinsa saa helposti luotua kuvaajat muokkaamalla aiempaa koodia. Satunnaisilla annetuilla arvoilla saadaan susien ja karhujen välisestä kilpailusta seuraavat kuvaajat:

Kuvasta nähdään, että koska kasvuvakio r_1 > r_2, susien lisääntyminen on nopeampaa, mutta karhujen ilmaantuessa kilpailemaan elintilasta näiden populaatioiden koot tasaantuvat sinne 600-650 tietämille kummassakin. Kyseessä on kahden lajin välinen stabiili tasapainotila, sillä annetuilla arvoilla K_(1,2) = 1000 sekä alfa_(1,2) = 0.5 stabiilin tasapainopisteen ehdot täyttyvät.


Kilpailumallissa käytetty Python-koodi, muokattu aiemmasta koodista:

import numpy as np
import matplotlib
matplotlib.use('tkagg')
import matplotlib.pyplot as plt
from scipy.integrate import odeint

y0 = [10,1]
t = np.linspace(0,50,num=1000)

alpha_12 = 0.5
alpha_21 = 0.5
r_1 = 0.8
r_2 = 0.7
K_1 = 1000
K_2 = 1000

params = [alpha_12, alpha_21,r_1,r_2,K_1,K_2]
    x = variables[0]
    y = variables[1]
    
    alpha_12 = params[0]
    alpha_21 = params[1]
    r_1 = params[2]
    r_2 = params[3]
    K_1 = params[4]
    K_2 = params[5]
    
    dxdt = r_1 * x * (K_1 - x - alpha_12 * y)/K_1
    dydt = r_2 * y * (K_2 - y - alpha_21 * x)/K_2
    
    return([dxdt,dydt])

y = odeint(sim, y0, t, args=(params,))

f,(ax1,ax2) = plt.subplots(2)

line1, = ax1.plot(t,y[:,0], color="b")

line2, = ax2.plot(t,y[:,1], color="r")

ax1.set_ylabel("Wolves (hundreds)")
ax2.set_ylabel("Bears (hundreds)")
ax2.set_xlabel("Time")

plt.show()