Lojistik büyüme modeli aşağıdaki diferansiyel denklemle tanımlanıyor.
\(\frac{dx}{dt} = x \frac {r}{K}(K – x) \)
Burada \(x \) o anlık nüfusu verirken \(\frac{dx}{dt} \) terimi de bir sonraki an için nüfusun ne kadar değişeceğini belirtiyor. \(K – x \) ifadesi, nüfus \(K \) teriminden büyük olduğunda negatif , küçük olduğunda da pozitif oluyor. Yani nüfus bu terimden büyükken nüfusun değişimi negatif (azalma yonünde), küçükken de pozitif (artış yönünde) olmakta. Bu durumda bu sistemde nüfus K değerine ulaşma eğiliminde olmalı. \(\frac {r}{K} \) terimi de bu yaklaşmanın hızını kontrol ediyor.
Kendimce yaptığım bu analiz sonunda tahmin yapmam gerekirse denge noktasının \(x = K \) noktasında olduğunu söylerdim. Bunların matematiksel çıkarımını yapmadan sadece deneysel gözlemlerini yapmak istiyorum. Bunun için aşağıdaki programı nüfusun ilk değeri için \(x = K = 300\) noktasında başlattım. Beklentim sabit bir grafik elde etmek.
import numpy as np
import matplotlib.pyplot as plt
def h(r, K, x):
return r*(1 - x / K)
r = 0.021476
K = 300
x = K
populations = np.array([x])
for i in range(1, 1000):
x = x + x*h(r, K, x)
populations = np.append(populations, [x])
plt.plot(populations)
plt.ylabel("nüfus")
plt.xlabel("zaman")
plt.show()
Nüfus gerçekten de sabit kalıyor. Peki başlangıç nüfusunu bu değerden biraz uzaklaştırırsak ne olur?
import numpy as np
import matplotlib.pyplot as plt
def h(r, K, x):
return r*(1 - x / K)
r = 0.021476
K = 300
x = K + 10
populations = np.array([x])
for i in range(1, 1000):
x = x + x*h(r, K, x)
populations = np.append(populations, [x])
plt.plot(populations)
plt.ylabel("nüfus")
plt.xlabel("zaman")
plt.show()
Bu programda nüfusu \(x = K + 10\) değerinden başlattım.
Kafamdan yaptığım analizden de beklediğim gibi nüfus gerçekten de kararlı duruma dönmeye çalışıyor. Demek ki bu sistem asimptotik kararlılığa sahip. Elbette bu çıkarımı matematiksel ispatı vermeden yapamam ama bu yazılarda daha çok sezgisel çalışmayı düşünüyorum.
Evrimsel oyun teorisi kitabında şimdi de sistemlerde kararlılıklar konusuna giriş kısmına geldim. Nüfus konusunda kararlılıktan kastedilen şöyle bir şey. Sistemdeki nüfuslar kararlı bir durumdaysa, bu nüfuslarda yapılan ufak değişiklikler sonunda sistem yine bu kararlı olduğu durumdaki nüfuslara yakın sayılarda kalacak. Anladığım kadarıyla kararlı durumdaki sayılara dönmek zorunda değil. Bu farklı kararlılıkların da değişik isimleri var. Örneğin nüfuslar bir zaman sonra (çok uzun zaman da olsa) baştaki kararlı durumdaki sayılara dönüyorsa asimptotik kararlılık deniyor. Eğer baştaki sayılara dönmüyorlar ama her zaman yakınlarda kalıyorlarsa da Lyapunov kararlı deniyormuş.
Geçenlerde bir yazıda Lotka-Volterra modelini anlamaya çalışmıştım. Modelin denklemleri aşağıdaki gibiydi:
\(\frac{dx}{dt} = \alpha x – \beta x \cdot y \)
\(\frac{dy}{dt} = \delta x \cdot y – \gamma y \)
\(x \) ve \(y \) av ve avcı türlerinin nüfuslarıdır. \(\frac{dx}{dt}\) ve \(\frac{dy}{dt}\) değerleri de bu nüfusların her adımda ne kadar değiştiğini gösteriyor. Eğer kararlı bir durumdaysak bu değişimlerin 0 olmasını bekleriz, yani nüfusların sabit kaldığı noktalardayızdır. Nüfusların sabit kalacağı noktaların biri iki nüfusun da sıfır olduğu yerdir. İki tür de yok olduğundan yeni bireylerin oluşma şansı yoktur (normal şartlarda). Bu çok ilginç bir durum değil ama. Bunun yerine bu iki türün aynı anda kararlı bir şekilde varlığını sürdürebildiği bir çözüme bakmak istiyorum. Bunun için değişim terimlerinin sıfır olduğu diğer çözümlere bakacağım.
Önce x nüfusundaki değişikliğin sıfır olması için y nüfusunun kaç olması gerektiğini bulayım.
\(\frac{dx}{dt}= \alpha x – \beta x \cdot y = 0\)
\(\alpha x = \beta x \cdot y \)
\(\frac{\alpha}{\beta} \frac {x}{x} = y \)
\(y = \frac {\alpha}{\beta} \)
Şimdi aynı şekilde y nüfusundaki değişikliğin sıfır olması için x nüfusunun ne olması gerektiğine bakayım.
\(\frac{dy}{dt} = \delta x \cdot y – \gamma y = 0\)
\(\delta x \cdot y = \gamma y \)
\(x = \frac {\gamma}{\delta} \frac {y}{y} \)
\(x = \frac {\gamma}{\delta} \)
Bu eşitlikleri aşağıdaki programla denediğim zaman nüfusların gerçekten de sabir kaldığını gördüm.
from random import betavariate
import numpy as np
import matplotlib.pyplot as plt
alpha = 0.1
beta = 0.04
gamma = 0.04
delta = 0.01
x = gamma/delta
y = alpha/beta
populations = np.empty((0, 2), int)
populations = np.append(populations, np.array(
[[x, y]]), axis=0)
for i in range(1, 1000):
x = x + alpha*x - beta*x*y
if x < 0:
x = 0
y = y + delta*x*y - gamma*y
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()
Peki bu kararlı nüfusları azıcık değiştirirsem ne olur diye düşündüm.
from random import betavariate
import numpy as np
import matplotlib.pyplot as plt
alpha = 0.1
beta = 0.04
gamma = 0.04
delta = 0.01
x = gamma/delta + 0.01
y = alpha/beta - 0.01
populations = np.empty((0, 2), int)
populations = np.append(populations, np.array(
[[x, y]]), axis=0)
for i in range(1, 1000):
x = x + alpha*x - beta*x*y
if x < 0:
x = 0
y = y + delta*x*y - gamma*y
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()
Bu programda başlangıç nüfuslarını çok az değiştirdim ve sonuçta aşağıdaki nüfus değişim grafiğini elde ettim.
Burada da görüldüğü gibi nüfuslar kararlı nüfusların yakınlarında kalıyor ama kararlı nüfuslara dönmüyor. Demek ki bu sistemde asimptotik kararlılık değil de Lyapunov kararlılığı var. Bunu böyle pat diye söyledim ama dayanağım ne? Şimdiye kadar sadece tek bir deneme yaptım ve bu denemeyi sonsuza kadar bile götürmedim. Demek ki biraz da matematik yapmak gerekecek ama o da başka bir yazıda artık.