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

Рис. 1. Накопление предметов разрывает возврат ресурса в игровую экосистему
Что подсказала рыба Адриатики?
Вопрос пришёл к Вито Вольтерре от будущего зятя. Биолог Умберто Д’Анкона собрал статистику рыбных рынков Триеста, Фиуме и Венеции и заметил странность: в годы Первой мировой войны, когда интенсивность лова снизилась, доля хрящевых рыб, среди которых много хищников, в улове выросла. В Фиуме она поднялась примерно с 12% в 1914 году до 36% в 1918-м и вернулась к 11% к 1923-му.
Вольтерра построил модель и опубликовал её в 1926 году. Альфред Лотка независимо развивал близкие идеи: от автокаталитических реакций 1910 года к взаимодействию биологических популяций и книге «Элементы физической биологии» 1925 года. Так появилась одна из самых известных моделей «хищник – жертва».
Как устроена модель?
Численности овец x и волков y связаны двумя дифференциальными уравнениями:
dx/dt = αx − βxy; dy/dt = δxy − γy.
Здесь α – удельная скорость размножения овец, γ – удельная смертность волков без пищи. Коэффициент β описывает потери добычи при встречах с хищниками, δ – прирост хищников за счёт добычи. Время t будем измерять в сутках, а численности пока считать непрерывными величинами.
Положительное равновесие даёт неочевидное правило: численность овец задают параметры волка, а численность волков – параметры овцы. Из уравнений получаем x* = γ/δ и y* = α/β. При α = γ = 1 в сутки, β = 0,02 и δ = 0,01 это 100 овец и 50 волков.

Рис. 2. Доля хрящевых рыб в улове выросла при ослаблении промысла
Стадо, стартовавшее со 120 овцами и 40 волками, в этом примере колеблется примерно от 74 до 131 овцы с периодом 6,3 суток. Вдоль траектории сохраняется инвариант – комбинация обеих численностей, которая не меняется со временем:
H = δx − γ ln x + βy − α ln y.
Для положительных численностей траектории вокруг равновесия замкнуты. Однако это свойство исходных уравнений, а не обещание любого алгоритма расчёта. Неверная численная схема способна постепенно увести решение с такой орбиты.
Где заканчивается применимость уравнений?
Без волков овцы в исходной модели растут экспоненциально и неограниченно. В игре запас пищи и место для появления животных обычно конечны. Логистическое слагаемое Ферхюльста позволяет учесть ёмкость среды, но тем самым меняет модель и её поведение: прежний инвариант уже нельзя требовать от нового уравнения.
Есть и проблема дробных особей. Непрерывная модель позволяет численности упасть до миллионной доли животного и затем восстановиться. Денис Моллисон критиковал подобное следствие моделей распространения бешенства: расчёт мог давать плотность 10−18 заражённой лисы на квадратный километр. Отсюда название «проблема атто-лисы» (англ. atto-fox problem).
В игре с целыми особями после исчезновения последнего животного восстановление не возникает само. Нужно явно определить, когда популяция считается вымершей, откуда приходят новые особи и есть ли защищённый резерв. Округление численности на каждом тике также меняет динамику и требует отдельной проверки.
Почему промысел первыми убирает волков?
Вольтерра объяснил наблюдение Д’Анконы дополнительным членом. Пусть обе популяции изымают с одинаковой удельной интенсивностью h: потери за единицу времени пропорциональны текущей численности каждого вида. Тогда h вычитается из удельного прироста добычи и прибавляется к удельной смертности хищника:
dx/dt = (α − h)x − βxy; dy/dt = δxy − (γ + h)y.
При 0 ≤ h < α сохраняется положительное равновесие: x* = (γ + h)/δ, y* = (α − h)/β. Эти же значения дают средние численности по замкнутому циклу. С усилением одинакового промысла средняя численность добычи растёт, а хищника падает.

Рис. 3. При одинаковом умеренном промысле средние численности двух видов расходятся
Счёт для того же стада прямой. При h = 0,25 в сутки в среднем получаем 125 овец и 37,5 волка, при 0,5 – 150 и 25, при 0,75 – 175 и 12,5. Дробные значения здесь означают среднее по времени, а не половину волка на карте.
На границе h = α положительное равновесие исчезает, и при положительных начальных численностях хищники со временем вымирают. Но число 200 овец, полученное формальной подстановкой в первую формулу, нельзя выдавать за обязательный итог. При исчезнувших волках у добычи здесь нулевой чистый прирост, а оставшееся поголовье зависит от начальных условий и предшествующего движения. При h > α в этой модели убывает уже и добыча.
Ослабление промысла во время войны могло увеличить долю хищников в улове. Легович в работе 2008 года показал изменения адриатических рыбных сообществ, согласующиеся с принципом Вольтерры. При этом состав улова не равен прямой переписи всех рыб, а простая модель не доказывает, что у исторического изменения была только одна причина.
Для геймдизайна вывод неудобный: охота на оба вида при одинаковой удельной интенсивности может одновременно поднимать среднее поголовье травоядных и сокращать хищников. Это вывод заданной модели. Избирательная охота, ограниченный корм, миграции и дискретное вымирание способны изменить картину.
Почему в Ultima Online закончилась шерсть?
Экосистему Ultima Online придумали Раф Костер и Кристен Костер. Поля зарастали травой, травоядные ели траву, хищники охотились на травоядных, драконы искали еду и логово. Каждое существо имело ресурсный вес: кролик нёс мех и мясо, волк – мех и мясо хищника, дракон – чешую и мясо. Общий запас ресурса на игровой мир оставался фиксированным.

Рис. 4. Внешне живое стадо может зависеть от ресурса, запертого в предметах игроков
Популярная версия гибели звучит так: игроки прокатились по миру роем и выбили всё, что успевало появиться. В пояснении, обновлённом 28 августа 2024 года, Костер поправил этот пересказ и развёл два разных сюжета. Поведенческий интеллект животных отключили из-за вычислительной цены: каждому зверю требовался радиальный поиск с последующим поиском пути.
Закрытый ресурсный цикл, по его словам, сломался иначе. Игроки забивали овец, делали из шерсти множество рубашек ради прокачки ремесла, затем копили изделия или продавали очень медленно. Центральный банк исчерпал свободную шерсть и больше не мог порождать овец. Костер отдельно указывает, что исходную экологическую систему убрали ещё на этапе бета-тестирования, до релиза 1997 года.
Разбор Зака Симпсона «Внутриигровая экономика Ultima Online» стал одним из ранних подробных исследований экономики многопользовательских миров и способствовал распространению термина faucet-drain economy – «экономика кранов и стоков». Источники вводят ресурс в оборот, а стоки выводят его. В закрытом цикле особенно важно, когда ресурс возвращается и возвращается ли вообще.
Сколько овец оставляет рубашка в сундуке?
Упрощённая расчётная модель воспроизводит механизм, но не параметры настоящего сервера Ultima Online. Пусть в мире W = 10’000 единиц шерсти, каждая овца связывает w = 2 единицы, а удельная интенсивность забоя q = 0,2 в сутки. Новое животное появляется сразу, как только для него освобождается ресурс; прочих расходов шерсти в примере нет.
Если рубашка возвращает ресурс в среднем через T суток, то в стационарном режиме изделия связывают wqTx единиц, а живые овцы – wx. Из баланса W = wx + wqTx получаем:
x* = W / [w(1 + qT)].
Чем дольше хранится рубашка, тем меньше стадо. При пяти сутках ожидания это 2’500 овец, при двадцати – 1’000, при ста – около 238, при пятистах – около 50. Если ресурс совсем не возвращается, положительного стационарного стада при продолжающемся забое в таком закрытом пуле не остаётся.

Рис. 5. Задержка возврата шерсти связывает запас, необходимый для появления овец
Важно, что простая передача рубашки другому игроку сама по себе не возвращает шерсть в банк. Нужно событие, которое действительно освобождает связанный ресурс: предусмотренное игрой уничтожение, переработка или иной сток. Для экономики имеет значение движение ресурса, а не только число торговых операций.
В исходной модели Лотки – Вольтерры скорость размножения добычи α постоянна, а её корм не учитывается. Закрытый банк добавляет ограничение, которого в этих уравнениях нет: стадо зависит от запаса и скорости возврата ресурса. Поэтому увеличение частоты появления овец не исправит отсутствие шерсти. В этом сбое важно не только, сколько животных убили, но и куда после этого ушёл ресурс.
Как ошибка расчёта раскручивает цикл?
Третья угроза появляется ещё до игроков, при первом прогоне сервера. Уравнения считают по тикам. В явном методе Эйлера новое значение равно старому плюс шаг, умноженный на производную; обе производные берут по прежним численностям.
Для нашего примера метод постепенно уводит орбиту наружу. При десяти тиках в сутки минимумы стада по циклам составляют примерно 69, 59, 47, 34, 20 и 7,5 овцы. Затем, через 45,2 суток после старта, расчётная численность впервые становится меньше единицы. Если игровой код в этот момент обнуляет популяцию, возникает искусственное вымирание.
Само непрерывное решение от пересечения порога x = 1 не исчезает. Исходные уравнения с теми же параметрами сохраняют минимум около 74,08 овцы. Порог меньше единицы в численном расчёте показывает расхождение с моделью, а правило обнуления уже превращает его в событие игрового мира.
Мельче шаг – позже пересечение порога. При двадцати тиках в сутки оно происходит примерно через 95,05 суток, при пятидесяти – через 236,94. В этом опыте срок растёт примерно пропорционально частоте тиков. Уменьшение шага откладывает сбой, но не устраняет причину накопления ошибки.

Рис. 6. Порядок обновления популяций меняет поведение численного решения
Что даёт последовательное обновление?
В проверенном варианте сначала обновляем овец по прежним значениям, затем волков – уже по новой численности овец:
xn+1 = xn + Δt·xn(α − βyn).
yn+1 = yn + Δt·yn(δxn+1 − γ).
При шаге Δt = 0,1 суток и том же старте минимум овец за 400 суток расчёта составляет около 73,68. Колебания остаются ограниченными в этом прогоне. Изменение порядка вычислений требует небольшой правки кода, но заметно меняет результат.
Называть такую замену универсальным лекарством нельзя. Последовательная схема не сохраняет исходный инвариант точно и при неподходящем шаге также может дать отрицательные численности. Положительность, отклонение H и устойчивость амплитуды проверяют отдельно; результат одного прогона не переносится автоматически на любые параметры и расширения модели.
Какие ошибки повторяются чаще всего?
Первая – чинить только волков. Если хищников вытесняет одинаковый промысел обоих видов, повышение урона не меняет причину потери равновесия. Нужно проверить удельные темпы изъятия и размножения, а затем уже выбирать управляемые параметры. Прямое добавление спавна меняет модель и должно оцениваться как отдельное решение.
Вторая – считать устойчивость установленной после короткого прогона. При малом шаге численная ошибка может долго оставаться незаметной. Нужны длительный тест, сравнение нескольких шагов, контроль численностей и, для неизменённой модели, инварианта.
Третья – учитывать ресурс только на карте. Шерсть в сундуках, товары на аукционе и инвентари неактивных игроков тоже входят в баланс закрытого пула. Задержка возврата уменьшает стадо по зависимости 1 / (1 + qT), а не просто пропорционально сроку хранения.
Как превратить расчёт в правила игрового мира?
Проблема атто-лисы показывает, что удачной формулы мало: нужно определить смысл очень малой численности. Эндрю Фаулер в статье 2021 года в Bulletin of Mathematical Biology предложил учитывать резервуар, в котором уязвимые особи могут переждать неблагоприятный период. Идея близка к убежищу в системах «хищник – жертва»; для игры это основание продумать защищённый резерв и условия восстановления, а не обещание автоматического спасения любого вида.
Игры тем временем превратили промысел в политику. В Eco от Strange Loop Games, вышедшей в ранний доступ в 2018 году, игроки развивают цивилизацию под угрозой метеорита и стараются не разрушить экосистему. Данные о мире помогают обсуждать и принимать законы; сервер применяет предусмотренные ими ограничения и стимулы. Интенсивность изъятия ресурса, подобная h в нашем примере, становится предметом коллективного решения.
Практический порядок проверки:
- сопоставить ожидаемую удельную интенсивность охоты со скоростью размножения каждого вида и явно записать допущения модели
- сравнить численные схемы и несколько шагов на длинном прогоне; проверить положительность, амплитуду и применимые инварианты
- включить в баланс ресурсы на карте, в предметах, на аукционе и у неактивных игроков; измерить задержку возврата
- определить правила вымирания, защищённого резерва и восстановления с учётом целого числа особей
- проверить лимиты, сезоны, налоги и другие рычаги промысла в сценариях поведения игроков, прежде чем менять частоту появления животных.
Поставьте проверку экосистемы рядом с нагрузочным тестом. Сначала отделите поведение уравнений от ошибки вычислений, затем проверьте движение ресурса и только после этого меняйте игровые правила. Уравнение показывает направление изменения, учёт запасов – доступный масштаб, а длительный прогон – выдержит ли выбранная реализация собственные правила.
Что запомнить?
- В классической модели равновесную численность каждого вида задают параметры другого, а положительные траектории вокруг равновесия замкнуты.
- Одинаковый удельный промысел повышает среднее поголовье добычи лишь в области существования положительного равновесия; на пороге вывод требует отдельного разбора.
- По объяснению Костера, закрытый ресурсный цикл Ultima Online пострадал от накопления предметов, связывающих ресурс для новых животных.
- В проверенном примере явный Эйлер пересекает порог одной овцы через 45,2 суток; последовательное обновление удерживает ограниченные колебания за 400 суток, но тоже требует проверки.
- Жизнеспособность игровой экологии определяют вместе: уравнения, схема расчёта, ресурсный баланс и правила исчезновения и восстановления популяций.