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.