ζ༼Ɵ͆ل͜Ɵ͆༽ᶘ

Симуляция популяции на Python (ч.2)

0 комментов
17.08.2020
1 мин чтения

Добавим еду

Давайте дадим нашей популяции какое-то количество еды y. Пусть прирост популяции зависит от того, сколько у неё еды и как она её потребляет:

\(\frac{\Delta x(t)}{\Delta t} = p_{1}*x(t)*y(t)-p_{2}*x(t)\)

То есть мы предполагаем, что выжили только те особи, которым досталась еда. Также не забудем про то, что количество еды зависит от того, сколько её съела популяция. Для этого введём новый коэффициент – p3. Образно говоря, он показывает, какая часть еды приходится на одну особь:

\(\frac{\Delta y(t)}{\Delta t} = -p_{3}*y(t)*x(t)\)

Да, количество еды мы рассматриваем, как функцию от времени. Умножим оба выражения на \(\Delta t\) :

\(\Delta x(t) = (p_{1}*x(t)*y(t)-p_{2}*x(t))*\Delta t\)

\(\Delta y(t) = (-p_{3}*y(t)*x(t))*\Delta t\)

Поздравляю, мы только что нашли итеративное решение системы дифференциальных уравнений. Надо отобразить это в коде.

Код

import matplotlib.pyplot as plt  # для рисования графика
import numpy as np  # для вычислений

x0 = 10  # начальное число особей
y0 = 5 # еда
X = [x0]  # массив для хранения количества особей в каждый момент времени
Y = [y0]  # массив для хранения количества еды в каждый момент времени
p1 = 0.6
p2 = 0.3
p3 = 0.05
dt = 0.01  # очень маленький промежуток времени
Tfin = 10  # время, до которого мы смотрим за популяцией
periods = np.arange(0, Tfin, dt)  # массив точек, отстоящих друг от друга на промежуток dt

x = x0
y = y0
for t in periods:
    x +=  (p1*x*y-p2*x)* dt  # меняем популяцию согласно найденным формулам
    y += -p3*x*y* dt
    X.append(x)  # добавляем текущую популяцию в массив
    Y.append(y)  # добавляем текущее количество еды в массив
plt.figure(figsize=(10, 5), num='Популяция')
plt.subplot(121) # Необходимо для 2-х графиков в одном окне
plt.plot(periods, X[:len(X) - 1])  # рисуем функцию популяции
plt.xlabel("ВРЕМЯ")
plt.ylabel("ПОПУЛЯЦИЯ")

plt.subplot(122)
plt.plot(periods, Y[:len(Y) - 1])  # рисуем функцию еды
plt.xlabel("ВРЕМЯ")
plt.ylabel("ЕДА")
plt.show()

Результат

Как можно увидеть, сначала особи объелись и сильно размножились. Потом еды стало не хватать, и началось вымирание. Если поиграть с начальными количествами еды и особей, а также с коэффициентами, можно получить интересные графики.

В следующей и заключительной статье мы добавим ещё одну популяцию и увидим, насколько хаотическим станет поведение начальной.

2
Сегодня
День улёта