Алексей Мешков

Может ли модель повторить цикл «рысь–заяц»

Самый известный экологический цикл в мире — заяц и рысь в Канаде: примерно каждые 10 лет их становится то в десятки раз больше, то меньше. Я проверил, может ли моя игрушечная экосистема его повторить. Период — да, легко. Всё остальное — нет.

Пилот калибровки модели по реальным данным. Вопрос не «правда ли это про зайцев», а «умеем ли мы честно сравнивать модель с реальным рядом и видеть, где она ломается». Октябрь 2026.

Модель — экосистема первой итерации, только без эволюции: травоядные и хищники ходят случайно и едят, когда могут.

Коротко

  • Цикл с периодом ~10 лет получается легко. Но это слабый тест: период почти целиком задаётся свободной ручкой «сколько шагов модели в одном году».
  • Запаздывание рыси не повторяется. В данных пик рыси отстаёт от пика зайца на ~1,5 года. В модели — на 2,5–3 года, и подбор параметров почти не сдвигает эту цифру.
  • Размах колебаний в 2–3 раза меньше реального. Реальный заяц меняется примерно в 40 раз от минимума до максимума, модель — в 3–5 раз.
  • Форма цикла совпала, но такую почти синусоидальную форму даёт почти любая циклящая модель. Подтверждение слабое.
  • Итог: цикл с нужным периодом есть, а настоящего цикла рыси и зайца нет. Две содержательные метрики — запаздывание и размах — не сошлись.

Данные

Число шкурок зайца-беляка и канадской рыси, которые охотники продали Компании Гудзонова залива в 1845–1935 годах. Числа не правились. Для независимой проверки периода взят ещё ряд по рыси с реки Маккензи (1821–1934).

Что видно в данныхЗначение
Период цикла~10 лет (Маккензи: 9,7)
Насколько рысь отстаёт от зайца1,5 года = 0,15 цикла
Размах, заяц / рысь≈ в 40 / 14 раз от минимума до максимума
Доля цикла на ростоколо половины у обоих

Ряд зайца заметно менее регулярный, чем ряд рыси. Это известная особенность именно ряда шкурок.

Ряды шкурок зайца и рыси 1845–1935 и их метрики: период, отставание, амплитуда

Как сравнивал

  • Сравнивается форма, а не абсолютные числа. Шкурки — не численность, поэтому смотрим период, отставание рыси, размах и форму цикла.
  • Допуски взяты из самих данных: насколько каждая метрика гуляет по 45-летним окнам реального ряда. «Совпало» значит, что отличие укладывается в два таких разброса.
  • Подгонял только период и отставание. Девять параметров модели (рост растений, обмен и смертность зайца, охота и смертность рыси, шагов в году) подбирал алгоритмом CMA-ES.
  • Размах и форму в подбор не включал — это отложенная проверка. Если модель верна, они должны совпасть сами.
  • Против подгонки под шум: 20 лучших вариантов перепроверены на 8 новых случайных запусках. Все цифры ниже — по ним.

До калибровки: с параметрами первой итерации рысь вымирает во всех запусках. Из 96 случайных наборов параметров обе популяции выживают в 31, отчётливый цикл есть в 5. И у всех пяти рысь отстаёт на 0,28–0,32 цикла.

Лучшее, что получилось

Показан запуск со средним, а не лучшим качеством. Ряды нормированы, начало симуляции сдвинуто так, чтобы совпасть по фазе с зайцем. Других подгонок на картинке нет.

Реальные ряды шкурок зайца и рыси против лучшей симуляции, калибровка A
Калибровка A: модель как есть. Сплошная линия — данные, пунктир — симуляция. Период похож, а пики рыси в модели запаздывают сильнее.

Осторожно: нормировка прячет главный провал. Без неё видно, насколько реальный цикл глубже:

Те же ряды без нормировки размаха: реальные колебания намного глубже модельных

Попытка исправить: корм хуже, когда зайцев много

Классическое объяснение короткого запаздывания: зайцы начинают падать ещё до пика рыси, потому что съедают свой корм и растения защищаются. Добавил в модель простую обратную связь: когда зайцев много, качество корма с задержкой падает, и заяц получает от еды меньше энергии. Это калибровка B.

  • Подбор выбрал слабый эффект: качество корма колеблется всего между 0,88 и 0,92.
  • Сильнее нельзя: зайцы недоедают и вымирают, а за ними и рысь.
  • Запаздывание улучшилось чуть-чуть (0,27 → 0,25 цикла), размах не вырос, цикл стал менее регулярным.
  • Отдельные варианты давали запаздывание ~0,20, но цикл в них почти пропадал. Короткое запаздывание в этой модели покупается ценой разрушения цикла.
Реальные ряды против симуляции с обратной связью через качество корма, калибровка B

Сводка метрик

МетрикаДанныеAB
период, лет (подгонялся)9,9610,11 ✔9,41 ✔
отставание рыси, доля цикла (подгонялось)0,150,27 ✘0,25 ✘
размах зайца (не подгонялся)1,620,71 ✘0,56 ✘
размах рыси (не подгонялся)1,130,47 ✘0,36 ✘
доля цикла на рост, заяц (не подгонялась)0,530,51 ✔0,51 ✔
форма цикла рыси (не подгонялась)—✘✘

Размах — log10 отношения высокого и низкого уровня; 1,62 значит примерно в 40 раз. ✔ — отличие в пределах двух разбросов данных. Улучшение B над A маленькое и статистически шаткое, хотя у B на два параметра больше.

Сравнение метрик данных, калибровки A и калибровки B

Почему, скорее всего, не сходится

Хищник в модели размножается «из запаса энергии» и откликается на добычу с инерцией, как в классической модели Лотки–Вольтерры. Такая система упирается в запаздывание около четверти цикла. В реальности зайцы, по-видимому, начинают падать раньше пика рыси: из-за корма, стресса, других хищников. Похоже, ограничение структурное, а не в параметрах.

Маленький размах, вероятно, связан с тем, что мир маленький и пространственный: сотни особей на сетке 56 × 56, случайность и локальные встречи гасят большие колебания.

И ещё одна подсказка: при найденном масштабе времени заяц в модели живёт 4–7 «лет» без голода и хищников, а настоящий заяц-беляк — 1–2 года. Быстрой популяции жертвы в модели не получается.

Насколько однозначны параметры

Плохо. В калибровке A 8 из 20 лучших вариантов неотличимы друг от друга, и смертность рыси в них гуляет на 25–40%. В B неотличимы 11 из 20, а обмен рыси меняется в 6 раз. По периоду и запаздыванию параметры B почти не определены. И это оценка снизу: все варианты из одного прогона подбора.

Несколько параметров упёрлись в границы допустимого (рост растений — максимум, обмен рыси — минимум). Это сигнал не точности, а того, что модель «тянется» за пределы разумного. Границы сознательно не расширял: подгонка экзотическими значениями сделала бы результат бессмысленным.

Разброс параметров среди вариантов, неотличимых от лучшего, калибровка A

Ограничения. Данные — число шкурок, а не численность: они зависят от цен на мех, усилий охотников и логистики компании. Запаздывание — как раз та метрика, которую торговля может исказить сильнее всего. Ряд один, около 9 циклов, его собственные метрики шумные. Период подгоняется почти тривиально, поэтому его совпадение — слабое достижение. Модель маленькая и пространственная, размер мира не калибровался. Структурный вариант B один и грубый (единое качество корма на весь мир). Глобальный оптимум подбора не гарантирован, хотя ни у одного из 96 случайных циклящих вариантов запаздывание не было меньше 0,28.

Что дальше

  1. Обратная проверка: подгонять размах и форму, проверять запаздывание.
  2. Другая структура: корм отрастает с задержкой локально, по клеткам; мир больше или менее «пространственный».
  3. Модель наблюдения: шкурки = f(численность, усилие охотников) с отдельным шумом. Это нужно перед палеоданными, где «прокси ≠ численность» ещё сильнее.
  4. Независимая проверка на ряде Маккензи: период и размах рыси.

Код, данные и все графики — в репозитории evo-brain-sim (папка calibration). Обсудить — в Telegram.