Конкуренция и сосуществование видов
В прошлом уроке хищник ел жертву. А что, если два вида не едят друг друга, а просто делят один и тот же пирог — траву, свет, место? Тогда каждый мешает и себе, и соседу. Иногда сильный вытесняет слабого до нуля, а иногда оба уживаются. От чего это зависит — разберём сегодня.
Конкуренция видов — взаимодействие, при котором два вида используют общий ограниченный ресурс, и присутствие одного снижает доступный ресурс для другого. Каждый вид тормозит и собственный рост (теснота внутри вида), и рост соперника.
Зачем эта модель? Она отвечает на один из главных вопросов экологии: почему в одной нише не уживаются два очень похожих вида? Конкуренция — это «логистический рост на двоих»: к собственной тесноте каждого вида добавляется давление чужака. Результат бывает драматичным — кто-то вылетает в ноль, — а бывает мирным сосуществованием. И всё решают коэффициенты.
Логистика на двоих
Вспомним логистический тормоз $(1 - N/K)$ из урока 5.2. Для двух видов он расширяется: теперь тесноту создаёт не только свой вид, но и чужой — со своим «весом» влияния:
$$\begin{cases} \frac{dN_1}{dt} = r_1 N_1 \left(1 - \frac{N_1 + a_{12} N_2}{K_1}\right) \\ \frac{dN_2}{dt} = r_2 N_2 \left(1 - \frac{N_2 + a_{21} N_1}{K_2}\right) \end{cases}$$
- $K_1, K_2$ — ёмкость среды для каждого вида, будь он один.
- $a_{12}$ — насколько одна особь вида 2 давит на вид 1 (в пересчёте на «своих»). Если $a_{12} = 1$, чужак мешает виду 1 ровно как свой; если $a_{12} \lt 1$ — слабее; если $a_{12} \gt 1$ — сильнее.
- $a_{21}$ — симметрично: насколько вид 1 давит на вид 2.
Логика простая: вид 1 чувствует тесноту от своих ($N_1$) плюс от чужих с весом $a_{12}$ ($a_{12} N_2$). Когда суммарное давление достигает $K_1$, рост вида 1 останавливается.
Два исхода: исключение и сосуществование
У этой модели по сути два сценария. Покажем их схематично, без запуска, чтобы увидеть саму логику:
СЦЕНАРИЙ A — конкурентное исключение
(вид 1 давит на вид 2 сильнее, чем тот терпит)
вид 1: ____----‾‾‾‾‾ выходит к своей ёмкости K1
вид 2: ‾‾‾‾----____.. вытеснен почти в ноль
----------------> время
Итог: остаётся один вид. Слабый проигрывает.
СЦЕНАРИЙ B — сосуществование
(каждый давит на чужого слабее, чем на своих)
вид 1: ___---‾‾‾‾‾‾‾ стабильный уровень ниже K1
вид 2: ___---‾‾‾‾‾‾‾ стабильный уровень ниже K2
----------------> время
Итог: оба выживают на сниженной численности.
Принцип конкурентного исключения (его называют принципом Гаузе): если два вида претендуют на абсолютно одну и ту же нишу и один хоть немного эффективнее, он рано или поздно вытеснит другого. Уживаться позволяет только разделение ниши — когда каждый давит на чужака слабее, чем на сородича ($a_{12}$ и $a_{21}$ малы). Тогда возможно сосуществование.
Считаем исход явно
Чтобы не гадать по дробным числам, заставим имитацию саму вынести вердикт: прогоним модель и сравним итоговые численности булевым флагом. Возьмём параметры, где вид 1 — заведомо сильнее: у него выше ёмкость среды и он сильно давит на вид 2 ($a_{21}$ велик), а вид 2 на него — слабо ($a_{12}$ мал).
def competition(N1, N2, r1, r2, K1, K2, a12, a21, steps):
out = []
for s in range(steps):
dN1 = r1 * N1 * (1 - (N1 + a12 * N2) / K1)
dN2 = r2 * N2 * (1 - (N2 + a21 * N1) / K2)
N1 += dN1
N2 += dN2
out.append((s, N1, N2))
return out
# вид 1 сильнее: больше ёмкость, сильно давит на вид 2 (a21=1.5),
# а вид 2 на него — слабо (a12=0.3)
res = competition(10, 10, 0.2, 0.2, 1000, 600, 0.3, 1.5, 300)
s, N1, N2 = res[-1]
print("Вид 1 победил:", N1 > N2)
print("Вид 2 почти вытеснен:", N2 < 5)
print("Вид 1 близок к своей ёмкости:", N1 > 900)
Вывод:
Вид 1 победил: True Вид 2 почти вытеснен: True Вид 1 близок к своей ёмкости: True
Мы не приводим точные дробные численности — они нам и не нужны. Важна структура исхода, и она гарантирована логикой: вид 1 с большей ёмкостью и сильным давлением вытесняет вид 2 практически в ноль, а сам выходит почти на свою ёмкость среды $K_1 = 1000$. Это сценарий A — конкурентное исключение.
Как работает под капотом
Кто победит, решает не один параметр, а их соотношение. Грубо говоря, вид выживает, если давление на него со стороны чужака слабее, чем он сам способен вытеснить чужака. Поиграем качественно: оставим всё симметричным, но будем менять «агрессивность» $a$ и смотреть, к какому из двух сценариев приходит система.
def winner(a12, a21):
N1 = N2 = 10.0
r, K = 0.2, 1000.0
for _ in range(500):
N1 += r * N1 * (1 - (N1 + a12 * N2) / K)
N2 += r * N2 * (1 - (N2 + a21 * N1) / K)
if N1 > 5 and N2 > 5:
return "сосуществование"
return "вид 1" if N1 > N2 else "вид 2"
print("a12=0.5 a21=0.5:", winner(0.5, 0.5))
print("a12=0.5 a21=2.0:", winner(0.5, 2.0))
print("a12=2.0 a21=0.5:", winner(2.0, 0.5))
Вывод:
a12=0.5 a21=0.5: сосуществование a12=0.5 a21=2.0: вид 1 a12=2.0 a21=0.5: вид 2
Читается прозрачно. Когда оба коэффициента слабые ($0.5 \lt 1$) — каждый давит на чужого мягче, чем на своих, и виды уживаются (сценарий B). Стоит одному из коэффициентов стать большим ($\gt 1$), и соответствующий вид становится жертвой сильного давления и вылетает: при $a_{21} = 2.0$ вид 1 беспощадно давит вид 2, и побеждает вид 1; при зеркальном $a_{12} = 2.0$ — наоборот. Никаких выдуманных дробей: только устойчивые качественные исходы.
Это снова дискретная имитация. У модели конкуренции (её называют системой Лотки-Вольтерры для конкуренции) есть непрерывный аналог в виде дифференциальных уравнений; строгий анализ равновесий и условий сосуществования — в курсе про дифференциальные уравнения. Нам здесь важно понять качественную развилку: исключение или сосуществование.
Частые ошибки
- Путать конкуренцию с хищничеством. Здесь виды не едят друг друга — они делят ресурс. Оба члена давления отрицательны для роста (тормоз), тогда как у хищника один член плюсовой.
- Считать, что побеждает тот, у кого больше $r$. Скорость разгона важна на старте, но исход определяет соотношение коэффициентов давления $a_{12}$, $a_{21}$ и ёмкостей $K_1$, $K_2$.
- Ждать, что сосуществование возможно всегда. Если ниши совпадают полностью и кто-то эффективнее, работает принцип конкурентного исключения — слабый вытесняется.
- Гнаться за точными дробными числами. В таких имитациях надёжнее опираться на качественный исход (кто больше, кто вылетел в ноль), чем на конкретные десятые доли.
- Думать, что $a_{12} = a_{21}$ всегда. Влияние несимметрично: один вид может давить на другого куда сильнее, чем наоборот.
Итоги
- Конкуренция — это логистический рост двух видов, где каждый тормозит и себя, и соперника.
- Коэффициенты $a_{12}$, $a_{21}$ задают силу давления чужого вида относительно собственного.
- Два исхода: конкурентное исключение (сильный вытесняет слабого в ноль) и сосуществование (оба выживают на сниженной численности).
- Исход решает соотношение коэффициентов и ёмкостей, а не один параметр; влияние видов несимметрично.
- В имитации надёжнее читать качественный результат (булев флаг «кто победил»), чем точные дробные числа. Непрерывный аналог — в курсе про дифференциальные уравнения.