Конкуренция и сосуществование видов

В прошлом уроке хищник ел жертву. А что, если два вида не едят друг друга, а просто делят один и тот же пирог — траву, свет, место? Тогда каждый мешает и себе, и соседу. Иногда сильный вытесняет слабого до нуля, а иногда оба уживаются. От чего это зависит — разберём сегодня.

Конкуренция видов — взаимодействие, при котором два вида используют общий ограниченный ресурс, и присутствие одного снижает доступный ресурс для другого. Каждый вид тормозит и собственный рост (теснота внутри вида), и рост соперника.

Зачем эта модель? Она отвечает на один из главных вопросов экологии: почему в одной нише не уживаются два очень похожих вида? Конкуренция — это «логистический рост на двоих»: к собственной тесноте каждого вида добавляется давление чужака. Результат бывает драматичным — кто-то вылетает в ноль, — а бывает мирным сосуществованием. И всё решают коэффициенты.

Логистика на двоих

Вспомним логистический тормоз (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 задают силу давления чужого вида относительно собственного.
  • Два исхода: конкурентное исключение (сильный вытесняет слабого в ноль) и сосуществование (оба выживают на сниженной численности).
  • Исход решает соотношение коэффициентов и ёмкостей, а не один параметр; влияние видов несимметрично.
  • В имитации надёжнее читать качественный результат (булев флаг «кто победил»), чем точные дробные числа. Непрерывный аналог — в курсе про дифференциальные уравнения.
Проверьте себя
1. Чем конкуренция двух видов отличается от модели хищник-жертва?
AВ конкуренции один вид поедает другой
BВ конкуренции виды делят общий ресурс и каждый тормозит и себя, и соперника
CВ конкуренции численности не меняются вовсе
DМежду этими моделями нет разницы
2. Что утверждает принцип конкурентного исключения (принцип Гаузе)?
AДва вида в одной нише всегда мирно сосуществуют
BЕсли два вида претендуют на одну нишу и один эффективнее, он вытеснит другого
CПобедитель определяется только скоростью размножения r
DКонкуренция всегда уничтожает оба вида
3. В имитации при a12 = 0.5 и a21 = 0.5 виды сосуществуют, а при a21 = 2.0 вид 1 вытесняет вид 2. Почему?
AПотому что r у видов разное
BПотому что при малых коэффициентах каждый давит на чужого слабее, чем на своих, а большой коэффициент означает сильное давление и вытеснение
CПотому что вид 1 всегда сильнее по определению
DПотому что ёмкость среды не влияет на исход