Leslie modeli (bir avcı ve bir av türü)

Bu modeli internette arattığımda daha çok yaşlara göre tanımlanmış bir popülasyonda matrisli modeller buldum ama kitapta iki denklemle tanımlanmış bir model anlatılıyordu.

Lotka-Volterra modelinden farklı olarak av türü için yoğunlupa bağlı bir ölüm oranı parametresine ve avcı için de daha gerçekçi bir ölüm oranı terimine sahip. Önce modelin denklemlerini göstereyim:

\(\frac{dx}{dt} = \frac{r_1}{K_1}(K_1 – x) – b \cdot y \)

\(\frac{dy}{dt} = r_2 \cdot (1 – \frac {y}{c\cdot b \cdot x}) \)

\(x \) burada da av türünün nüfusunu gösteriyor, \(y \) de avcı nüfusunu.

\(K_1 \) sabiti diğer türlerin olmadığı durumda ortamda bulunabilecek popülasyon büyüklüğünü, bu durumda av türünün nüfusunu, belirliyor.

\(r_1 \) sabitini nüfuslar sıfıra yakınken av türünün çoğalma hızı olarak düşünebiliriz.

\(b \) sabiti avcıların avları ne kadar kolay avlayabildiğini gösteriyor. Yani yüksek \(b \) değeri avlanmanın çok olduğunu modelliyor.

\(r_2 \) sabitini nüfuslar sıfıra yakınken avcı türünün çoğalma hızı olarak kullanıyoruz.

\(c \) sabiti de avların avcı için besleyici değerini gösteriyor.

Şimdi bu sabitlerin nüfusların değişimini nasıl etkilediğine bakayım.

\(r_1 \) ve \(r_2 \) sabitleri kendilerinden beklendiği gibi türlerin üremelerini artırma eğiliminde. Bu sabitler büyüdükçe türlerin çoğalma hızı da artacaktır.

\(K_1 \) sabitinin sisteme etkisi biraz daha karışık. Bu terim hem payda hem de paydada bulunuyor. Burada \(\frac {K_1 – x}{K_1} \) ifadesine bakayım önce. Bu ifadenin payı ortamda daha ne kadar avcı nüfusu olabileceğini gösteriyor, paydası da ortamın tek başına ne kadar avı besleyebileceğini. Yani bu bölüm ortamda henüz tüketilmemiş av potansiyelinin oranını veriyor. Örneğin daha yüzde otuz av daha olabilir gibi. Yani bu terim av nüfusu azaldıkça artıyor ve \(r_1 \) terimiyle beraber av nüfusunun artması için daha çok uğraşıyor. Av nüfusu ortamın besleyebileceği maksimum olan \(K_1 \) sayısına ulaştığında bu oran da sıfır oluyor ve av türünün üremesini durdurmaya çalışıyor. Nüfus daha da artarsa av nüfusu ortamın kaldırabileceğinden fazla olduğundan bu terim üremeyi değil ölümü tetiklemeye başlıyor.

\(b \cdot y \) terimi avcıların o an toplamda ne kadar avlayacağını gösteriyor. Bunu da avın nüfus artışından çıkararak av nüfusunun net değişikliğini modelliyoruz. \(b \) sabiti ne kadar yüksekse av nüfusunda ölümler de o kadar çok olacaktır.

Avcı nüfusunu artıran ana terim tabii ki \(r_2 \) sabiti. Bunun yanında avcıların ölümünü belirleren diğer terim biraz daha karmaşık. Şimdi bunu anlamaya çalışayım.

\(1 – \frac {y}{c\cdot b \cdot x} \) teriminin değeri avcı nüfusu arttıkça azalmakta ve bir süre sonra negatife dönüşecek. Yani bu modelde avcı nüfusunun kontrolsüz artmasının avcıların nüfus artışını azaltacağı ve hatta avcılarda ölümleri artıracağı da göz önüne alınmış. Aynı mantıkla baktığımızda \(b \) (başarılı avlanma oranı), \(c\) (avın avcı için besleyiciliği) ya da av nüfusu arttıkça avcılarda ölüm miktarı azalacaktır.

Madem parametreleri biraz anlayabildim, bir de bu modeli python ile programlayayım dedim. Parametreleri seçmek biraz zor oldu ama. Epey bir deneme yanılmadan sonra şöyle bir sonuç elde ettim.


from random import betavariate
import numpy as np
import matplotlib.pyplot as plt

x = 10
y = 10
b = 0.1  # effectiveness of predators in killing preys
c = 5  # nutritional value of the prey to the predator
r1 = 1.4  # birth rate of prey
r2 = 0.8  # birth rate of predator
K1 = 50  # capacity

populations = np.empty((0, 2), int)
populations = np.append(populations, np.array(
    [[x, y]]), axis=0)

for i in range(1, 100):
    H1 = ((r1/K1)*(K1 - x) - b*y)
    H2 = 0
    x = x + x*H1
    if x < 0:
        x = 0

    if x != 0:
        H2 = (r2*(1 - (y/(c*b*x))))
        y = y + y*H2
    if y < 0:
        y = 0
    populations = np.append(populations, np.array(
        [[x, y]]), axis=0)

f, (ax1, ax2) = plt.subplots(2)
line1, = ax1.plot(populations[:, 0], color="b")
line2, = ax2.plot(populations[:, 1], color="r")

ax1.set_ylabel("Av")
ax2.set_ylabel("Avcı")
ax2.set_xlabel("zaman")
plt.show()