Конкуренция и сосуществование видов
В прошлом уроке хищник ел жертву. А что, если два вида не едят друг друга, а просто делят один и тот же пирог — траву, свет, место? Тогда каждый мешает и себе, и соседу. Иногда сильный вытесняет слабого до нуля, а иногда оба уживаются. От чего это зависит — разберём сегодня.
Конкуренция видов — взаимодействие, при котором два вида используют общий ограниченный ресурс, и присутствие одного снижает доступный ресурс для другого. Каждый вид тормозит и собственный рост (теснота внутри вида), и рост соперника.
Зачем эта модель? Она отвечает на один из главных вопросов экологии: почему в одной нише не уживаются два очень похожих вида? Конкуренция — это «логистический рост на двоих»: к собственной тесноте каждого вида добавляется давление чужака. Результат бывает драматичным — кто-то вылетает в ноль, — а бывает мирным сосуществованием. И всё решают коэффициенты.
Логистика на двоих
Вспомним логистический тормоз (1 - N / K) из урока 5.2. Для двух видов он расширяется: теперь тесноту создаёт не только свой вид, но и чужой — со своим «весом» влияния. Прирост первого вида — dN1 = r1 * N1 * (1 - (N1 + a12 * N2) / K1), второго — dN2 = r2 * N2 * (1 - (N2 + a21 * N1) / K2).
- K1, K2 — ёмкость среды для каждого вида, будь он один.
- a12 — насколько одна особь вида 2 давит на вид 1 (в пересчёте на «своих»). Если a12 = 1, чужак мешает виду 1 ровно как свой; если a12 < 1 — слабее; если a12 > 1 — сильнее.
- a21 — симметрично: насколько вид 1 давит на вид 2.
Логика простая: вид 1 чувствует тесноту от своих (N1) плюс от чужих с весом a12 (a12 * N2). Когда суммарное давление достигает K1, рост вида 1 останавливается.
Два исхода: исключение и сосуществование
У этой модели по сути два сценария. Покажем их схематично, без запуска, чтобы увидеть саму логику:
СЦЕНАРИЙ A — конкурентное исключение
(вид 1 давит на вид 2 сильнее, чем тот терпит)
вид 1: ____----‾‾‾‾‾ выходит к своей ёмкости K1
вид 2: ‾‾‾‾----____.. вытеснен почти в ноль
----------------> время
Итог: остаётся один вид. Слабый проигрывает.
СЦЕНАРИЙ B — сосуществование
(каждый давит на чужого слабее, чем на своих)
вид 1: ___---‾‾‾‾‾‾‾ стабильный уровень ниже K1
вид 2: ___---‾‾‾‾‾‾‾ стабильный уровень ниже K2
----------------> время
Итог: оба выживают на сниженной численности.
Принцип конкурентного исключения (его называют принципом Гаузе): если два вида претендуют на абсолютно одну и ту же нишу и один хоть немного эффективнее, он рано или поздно вытеснит другого. Уживаться позволяет только разделение ниши — когда каждый давит на чужака слабее, чем на сородича (a12 и a21 малы). Тогда возможно сосуществование.
Считаем исход явно
Чтобы не гадать по дробным числам, заставим имитацию саму вынести вердикт: прогоним модель и сравним итоговые численности булевым флагом. Возьмём параметры, где вид 1 — заведомо сильнее: у него выше ёмкость среды и он сильно давит на вид 2 (a21 велик), а вид 2 на него — слабо (a12 мал).
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 практически в ноль, а сам выходит почти на свою ёмкость среды K1 = 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 < 1) — каждый давит на чужого мягче, чем на своих, и виды уживаются (сценарий B). Стоит одному из коэффициентов стать большим (> 1), и соответствующий вид становится жертвой сильного давления и вылетает: при a21 = 2.0 вид 1 беспощадно давит вид 2, и побеждает вид 1; при зеркальном a12 = 2.0 — наоборот. Никаких выдуманных дробей: только устойчивые качественные исходы.
Это снова дискретная имитация. У модели конкуренции (её называют системой Лотки-Вольтерры для конкуренции) есть непрерывный аналог в виде дифференциальных уравнений; строгий анализ равновесий и условий сосуществования — в курсе про дифференциальные уравнения. Нам здесь важно понять качественную развилку: исключение или сосуществование.
Частые ошибки
- Путать конкуренцию с хищничеством. Здесь виды не едят друг друга — они делят ресурс. Оба члена давления отрицательны для роста (тормоз), тогда как у хищника один член плюсовой.
- Считать, что побеждает тот, у кого больше r. Скорость разгона важна на старте, но исход определяет соотношение коэффициентов давления a12, a21 и ёмкостей K1, K2.
- Ждать, что сосуществование возможно всегда. Если ниши совпадают полностью и кто-то эффективнее, работает принцип конкурентного исключения — слабый вытесняется.
- Гнаться за точными дробными числами. В таких имитациях надёжнее опираться на качественный исход (кто больше, кто вылетел в ноль), чем на конкретные десятые доли.
- Думать, что a12 = a21 всегда. Влияние несимметрично: один вид может давить на другого куда сильнее, чем наоборот.
Итоги
- Конкуренция — это логистический рост двух видов, где каждый тормозит и себя, и соперника.
- Коэффициенты a12, a21 задают силу давления чужого вида относительно собственного.
- Два исхода: конкурентное исключение (сильный вытесняет слабого в ноль) и сосуществование (оба выживают на сниженной численности).
- Исход решает соотношение коэффициентов и ёмкостей, а не один параметр; влияние видов несимметрично.
- В имитации надёжнее читать качественный результат (булев флаг «кто победил»), чем точные дробные числа. Непрерывный аналог — в курсе про дифференциальные уравнения.