Логистический рост и ёмкость среды
Экспонента из прошлого урока улетает в бесконечность — но реальные популяции упираются в потолок. Еды хватает на тысячу кроликов, и сколько бы их ни родилось, больше тысячи остров не прокормит. Сегодня добавим в модель этот потолок — ёмкость среды — и получим знаменитую S-образную кривую.
Ёмкость среды (K) — максимальное число особей, которое среда способна устойчиво прокормить. У этого потолка прирост популяции падает до нуля: рождаемость уравновешивается смертностью от нехватки ресурсов.
Зачем усложнять простую экспоненту? Потому что без потолка модель предсказывает абсурд — бесконечное число бактерий, кроликов, людей. Логистическая модель — это минимальная честная поправка: она ведёт себя как экспонента, пока места много, и плавно тормозит у ёмкости среды. Именно так выглядят реальные кривые заселения острова, роста колонии дрожжей в пробирке и насыщения рынка новым товаром.
Тормоз в формуле
Возьмём экспоненциальный прирост r * N и домножим его на «коэффициент тесноты» (1 - N / K): N_новое = N + r * N * (1 - N / K).
Разберём множитель (1 - N / K) — это и есть тормоз:
- Когда N мало по сравнению с K, дробь N / K ≈ 0, тормоз ≈ 1, и формула почти совпадает с экспонентой: N + r * N.
- Когда N приближается к K, дробь N / K → 1, тормоз → 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) абсолютный прирост максимален, это самый крутой участок.
Итоги
- Логистический рост = экспоненциальный прирост r * N, умноженный на тормоз (1 - N / K).
- Ёмкость среды K — это потолок: у него прирост гаснет, и кривая выходит на горизонтальную полку.
- Кривая S-образна: медленный разгон → крутая середина у K/2 → насыщение у K.
- Пока N мало по сравнению с K, логистика почти неотличима от экспоненты.
- r задаёт скорость разгона, K — высоту полки; это независимые параметры. Непрерывный аналог — в курсе про дифференциальные уравнения.