Логистический рост и ёмкость среды
Экспонента из прошлого урока улетает в бесконечность — но реальные популяции упираются в потолок. Еды хватает на тысячу кроликов, и сколько бы их ни родилось, больше тысячи остров не прокормит. Сегодня добавим в модель этот потолок — ёмкость среды — и получим знаменитую S-образную кривую.
Ёмкость среды ($K$) — максимальное число особей, которое среда способна устойчиво прокормить. У этого потолка прирост популяции падает до нуля: рождаемость уравновешивается смертностью от нехватки ресурсов.
Зачем усложнять простую экспоненту? Потому что без потолка модель предсказывает абсурд — бесконечное число бактерий, кроликов, людей. Логистическая модель — это минимальная честная поправка: она ведёт себя как экспонента, пока места много, и плавно тормозит у ёмкости среды. Именно так выглядят реальные кривые заселения острова, роста колонии дрожжей в пробирке и насыщения рынка новым товаром.
Тормоз в формуле
Возьмём экспоненциальный прирост $rN$ и домножим его на «коэффициент тесноты» $(1 - N/K)$: $$N_{\text{новое}} = N + rN\left(1 - \frac{N}{K}\right)$$
Разберём множитель $(1 - N/K)$ — это и есть тормоз:
- Когда $N$ мало по сравнению с $K$, дробь $N/K \approx 0$, тормоз $\approx 1$, и формула почти совпадает с экспонентой: $N + rN$.
- Когда $N$ приближается к $K$, дробь $N/K \to 1$, тормоз $\to 0$, и прирост гаснет: популяция замирает у потолка.
- Если бы вдруг $N$ превысило $K$, тормоз стал бы отрицательным — популяция пошла бы вниз, к ёмкости среды.
Запустим: начнём с 10 особей, $r = 0.5$, ёмкость среды $K = 1000$, и проследим 20 шагов.
def logistic(N0, r, K, steps):
N = N0
out = [N]
for _ in range(steps):
N = N + r * N * (1 - N / K)
out.append(N)
return out
res = logistic(10, 0.5, 1000, 20)
print(f"{'шаг':>4} {'N':>8}")
for i in range(0, 21, 4):
print(f"{i:>4} {res[i]:>8.1f}")
Вывод:
шаг N 0 10.0 4 49.3 8 219.1 12 656.0 16 956.1 20 997.0
Три фазы S-образной кривой
Вглядитесь в числа — у роста явно три участка:
- Разгон (шаги 0–8). 10 → 49 → 219: популяция мала, тесноты нет, рост почти экспоненциальный. От 49 до 219 — это рост более чем в 4 раза за 4 шага.
- Стремительный подъём (шаги 8–12). 219 → 656: середина кривой, прирост максимален в абсолютных числах (+437 за 4 шага). Популяция «летит» через половину ёмкости среды.
- Насыщение (шаги 12–20). 656 → 956 → 997: подъём замедляется, кривая прижимается к потолку 1000. За последние 4 шага — лишь +41, потом ещё меньше.
Эти три фазы и складываются в букву S — отсюда название «S-образная кривая». В отличие от экспоненты, которая уходит в бесконечность, логистическая кривая выходит на горизонтальную полку у $K$.
N
1000 | ____________ у K (полка)
| __/
500 | __/ крутая середина
| _/
0 |__--/ медленный разгон
+-----------------------------> шаг
Как работает под капотом
Под капотом — снова цикл с одной строкой, но теперь прирост зависит от того, насколько мы близки к потолку. Сравним напрямую логистический рост и чистую экспоненту с тем же $r$ на первых шагах:
def exp_step(N, r):
return N + r * N
def log_step(N, r, K):
return N + r * N * (1 - N / K)
N_exp = N_log = 10.0
r, K = 0.5, 1000
print(f"{'шаг':>4} {'экспонента':>12} {'логистика':>12}")
for s in range(1, 6):
N_exp = exp_step(N_exp, r)
N_log = log_step(N_log, r, K)
print(f"{s:>4} {N_exp:>12.2f} {N_log:>12.2f}")
Вывод:
шаг экспонента логистика 1 15.00 14.95 2 22.50 22.31 3 33.75 33.22 4 50.62 49.28 5 75.94 72.71
На первых шагах различие крошечное: при $N$ около 10–70 на фоне $K = 1000$ теснота почти не чувствуется, тормоз $(1 - N/K)$ близок к единице. Расхождение копится медленно и проявится позже, когда $N$ подберётся к ёмкости среды. Это и есть смысл логистической модели: «как экспонента в начале, но с потолком в конце».
Где в природе встречается эта кривая? Дрожжи в пробирке, бактерии в чашке Петри, олени, завезённые на остров, число пользователей нового приложения — все они сначала растут почти экспоненциально, а затем выходят на полку, когда ресурс (еда, место, рынок) исчерпан. Параметр $K$ — это и есть «вместимость» конкретной среды.
Здесь мы считаем шагами — это дискретная имитация. У логистического роста есть и непрерывный аналог в виде дифференциального уравнения; его подробный вывод и точное решение (логистическая функция) разбираются в курсе про дифференциальные уравнения. Для понимания формы кривой и роли ёмкости среды пошаговой модели вполне достаточно.
Частые ошибки
- Считать, что тормоз $(1 - N/K)$ — это вычитание особей. Это множитель прироста: он не убивает особей, а уменьшает добавку на шаге. У потолка добавка просто стремится к нулю.
- Путать $r$ и $K$. $r$ отвечает за скорость разгона (как круто стартует кривая), $K$ — за высоту полки (где она остановится). Это два независимых параметра.
- Ждать, что популяция точно сядет на $K$. При умеренном $r$ она асимптотически приближается к $K$ (997, 999, …), но математически достигает его лишь в пределе.
- Брать слишком большой $r$. При очень большом $r$ дискретная логистическая модель перестаёт плавно выходить на полку и начинает «прыгать» вокруг $K$ (а при экстремальных $r$ — даёт хаос). Для гладкой S-кривой $r$ должен быть умеренным.
- Думать, что середина кривой — это замедление. Наоборот: в середине (около $K/2$) абсолютный прирост максимален, это самый крутой участок.
Итоги
- Логистический рост = экспоненциальный прирост $rN$, умноженный на тормоз $(1 - N/K)$.
- Ёмкость среды $K$ — это потолок: у него прирост гаснет, и кривая выходит на горизонтальную полку.
- Кривая S-образна: медленный разгон $\to$ крутая середина у $K/2$ $\to$ насыщение у $K$.
- Пока $N$ мало по сравнению с $K$, логистика почти неотличима от экспоненты.
- $r$ задаёт скорость разгона, $K$ — высоту полки; это независимые параметры. Непрерывный аналог — в курсе про дифференциальные уравнения.