EcoSimulation — 05. Модель с перекрывающимися поколениями

 

Д.А. Шабанов
Конспект курса
"
Имитационное моделирование сложных биосистем
(с использованием Microsoft Excel)
"

Логистический рост Модель с перекрывающимися поколениями Перестройка модели с учетом выживаемости особей
Имитационное моделирование биосистем-04  Имитационное моделирование биосистем-05 Имитационное моделирование биосистем-06

 

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

Для начала сделаем как можно более простую модель. Зададим в ней два пола, три поколения, и смертность в результате конкуренции, когда численность превышает емкость среды (это не логистический рост, а экспоненциальный, который "обрезается" каждый раз, когда емкость среды превышает емкость среды). Эту модель не следует считать окончательной, но ее создание позволит нам рассмотреть некоторые важные принципы построения имитационных моделей.

При создании этой модели используем две возможности, которые мы еще не применяли. Во-первых, для тех ячеек, где мы вводили исходные данные, используем имена. Для этого достаточно щелкнуть на ячейке правой клавишей мыши, и Excel сам предложит вариант "Присвоить имя". Кстати, если в предыдущей ячейке стоит, к примеру, n(f1)0, то для этой ячейки Excel автоматически предложит имя n_f1_0. Во-вторых, в качестве средств управления используем полосы прокрутки. Это одна из разновидностей элементов управления, предусмотренных Excel. Самый простой способ вставить в файл полосу прокрутки — скопировать ее из того файла, где она уже есть. Более сложный (но более правильный) способ таков.

Чтобы можно было вставить в файл полосу прокрутки и другие элементы управления, надо сделать доступной панель "Developer" ("Разработчик"). Надо пройти по пути "File/Options/Customize Ribbon/" ("Файл"/"Параметры"/"Настройка ленты"). В правой части окна станет доступен список "Main Tabs" ("Основные вкладки"). В нем надо поставить галочку напротив меню "Developer" ("Разработчик").  В верхнем меню появится опция "Developer" ("Разработчик"). В ней нужно выбрать диалог "Insert" ("Вставить"), а в том — элемент управления формы "Scroll bar (Form Control)" ("Полоса прокрутки"). Вначале она будет вертикальной; перетаскивая мышью маркеры, расположенные в ее углах, можно сделать полосу горизонтальной. Щелкнув на полосе прокрутки правой кнопкой мыши и выбрав пункт "Format Control" ("Формат объекта"), можно указать, какой ячейкой будет управлять эта полоса, какие граничные (минимальное и максимальное) значения она будет задавать, а также с каким шагом будет изменяться значение при перемещении движка.

Начиная с этой модели, мы будем придерживаться стиля обозначений, который можно назвать "рекомендованным", по крайней мере, для популяционноэкологических моделей. Список обозначений, которые используются в таких моделях, приведен здесь. Рассматриваемая совокупность особей в них состоит из отдельных групп. Для обозначения совокупности в целом используются прописные (большие) буквы, для обозначения больших групп, которые делятся на части, — тоже большие буквы, но с указанием в скобках, к кому они относятся, а для отдельных групп — строчные (маленькие). Для обозначения численности групп на разных этапах цикла могут использоваться разные обозначения. Например, в начале цикла в следующей модели численность группы обозначается буквой αn, а после сокращения — ωn ("движение" от начального состояния до конечного символтзируют первая и последняя буквы греческого алфавита). Начальная численность всей рассматриваемой нами популяции обозначается αN, начальная численность самок — αN(F), численность самок первого возраста — αn(f1). Чтобы обозначить момент времени, используются подстрочные индексы; например, окончательная численность самок второго возраста на 14-м цикле работы модели обозначается ωn(f2)14. В таком случае численность самок после сокращения может обозначаться как ωN(F). Численность пар (pair) с самками второго возраста обозначим как ωN(PF2). Можно было бы использовать и строчную букву p, но тогда ее можно будет спутать с общепринятым обозначением вероятности. Поскольку численность пар вычисляется с учетом количества самцов, будем считать, что мы "имеем право" использовать прописную букву. 

Другие характеристики групп также обозначаются подобным образом. Например, в следующей модели к числу начальных параметров относится плодовитость самок. Для ее обозначения использована буква b (от breed); плодовитость самок второго возраста — b(f2).

 

Описание простейшей модели

Итак, рассмотрим структуру простейшей модели, имитирующей динамику популяции из трех поколений (рис. 5.1).

Рис. 5.1. Модель с тремя поколениями и сокращением численности особей до K на каждом цикле

Рассмотрим эту модель подробнее (кроме прочего, ее можно скачать, хотя, конечно, полезнее сделать ее самостоятельно).

В информационном блоке даны короткие пояснения относительно работы модели.

В блоке для входных параметров — 6 ячеек, пояснения к которым видны на рисунке, а присвоенные им имена (сверху вниз) таковы: n_f1_0, n_m1_0, K, b_f2, b_f3 и F_M

Вывод результатов представлен обычным графиком, а структуру поля для расчетов мы сейчас подробно проанализируем.

В столбце A представлены шаги модели (циклы, соответствующие в действительности, например, годам). Первая строка расчетов — нулевая, A17{0}. Вторая ячейка этого столбца и все последующие ("растянутые" из ячейки A18) содержат простейший счетчик: A18{=A17+1}.

В столбце B указывается численность самок первого года в начале цикла — αn(f1). Формулы в ячейках таковы: B17{=n_f1_0}, B18{=ОКРУГЛВНИЗ(S17/2+СЛЧИС();)}; все последующие ячейки этого столбца получены из B18 "растягиванием". Смысл этой формулы прост. В ячейке S17 указано количество потомства, появившегося на предыдущем шаге модели. Половина этого количества — самки. Округление (важное, в том случае, если появляется нечетное количество потомков) носит вероятностный характер (как объяснялось ранее).

В столбце C указывается численность самок второго года в начале цикла — αn(f2). Формулы в ячейках таковы: С17{0} (по условиям все особи в начале работы модели относятся к первому возрасту), С18{=I17}; все последующие ячейки столбца получены из С18 "растягиванием". В ячейке I17 указывается численность самок первого возраста, которые жили в системе год назад (после сокращения численности). Теперь они достигли второго возраста.

Аналогичные формулы введены в столбец D, где указывается численность самок третьего года — αn(f3). Формулы в ячейках таковы: D17{0}, D18{0} (третьегодки не успевают появиться и через год), D19{=J18}; все последующие ячейки столбца получены из D19 "растягиванием". Объяснение этой формы аналогично предыдущему случаю — это численность самок предыдущего возраста годом раньше.

Формулы в столбце E, где указывается численность самцов первого года, αn(m1), определяют число самцов как разность между общим количеством потомков и числом самок в их составе; E18{=S17-B18}. Столбец F аналогичен столбцу C, а G — аналогичен D.

Движемся далее. В столбце H (αN) указывается общая численность всех особей; H17{=СУММ(B17:G17)}. Функцию СУММ мы еще не рассматривали, но ее применение интуитивно понятно и не требует особого пояснения.

В столбцах I - N численность всех возрастных классов пересчитывается после сравнения αN и K. Их обозначения аналогичны таковым для столбцов B - G, за тем исключением, что мы рассматриваем уже численность групп после сокращения (ωn). Для пересчета используются формулы, аналогичные следующей: I17{=ОКРУГЛВНИЗ(ЕСЛИ($H17>K;B17*K/$H17;B17)+СЛЧИС();)}. В функции ЕСЛИ определяется, выполняется ли условие H17>K, то есть превышает ли суммарная численность особей емкость среды. Если не превышает, сокращение не производится. Если превышает, численность всех групп сокращается пропорционально, домножаясь на величину K/H17, то есть на разность от деления емкости среды на имеющуюся численность. К примеру, если численность особей превосходит емкость среды в два раза, то K/H17=1/2 и численность всех групп особей уменьшается вдвое. Вычисленная с помощью функции ЕСЛИ величина подвергается вероятностному округлению с помощью функций ОКРУГЛВНИЗ и СЛЧИС, как это описывалось на предыдущей странице.

В столбцах O и P происходит вычисление общего количества половозрелых самок и самцов, ωN(F) и ωN(M) соответственно. Формулы очень просты: O17{=СУММ(J17:K17)} и P17{=СУММ(M17:N17)}, то есть складывается численность половозрелых самок и самцов всех возрастов.

В столбцах Q и R вычисляется количество пар с самками второго и третьего возрастов, ωN(PF2) и ωN(PF3) соответственно. Пример формулы для таких расчетов виден на рис. 5.1 в строке формул. В данном случае предусмотрено, что самцов может не хватить на всех самок, и вычисления проводятся так: Q17{=ЕСЛИ(P17=0;0;ОКРУГЛВНИЗ(ЕСЛИ(O17/P17>F_M;P17*F_M*J17/O17;J17);))} и R17{=ЕСЛИ(P17=0;0;ОКРУГЛВНИЗ(ЕСЛИ(O17/P17>F_M;P17*F_M*K17/O17;K17);))}. Первая из функций ЕСЛИ предохраняет от деления на 0, поскольку далее необходимо делить численность самок на численность самцов. Если самцов в популяции нет, то и пар нет. Если самцы есть, то надо определить, достаточна ли их численность для того, чтобы они покрыли всех самок. Если отношение числа самок к числу самцов меньше величины F_M, то численность пар с самками второго возраста равна численности самок второго возраста, а численность пар самок третьего возраста равна численности самок третьего возраста. Если самцов недостает (надо сказать, что при предусмотренных в модели условиях это может произойти только на самом первом этапе, если задать избыток самок и недостаток самцов), то численность пар самок обоих возрастов сокращается пропорционально наличествующему количеству самцов: количество_самцов * граничное_отношение_самок_к_самцам * количество_самок_соответствующего_возраста / количество_самок, или для самок второго возраста, P17*F_M*J17/O17.

Наконец, в столбце S вычисляется количество потомства (обозначим его как B). Для этого к произведению количества пар с самками второго возраста на плодовитость самок второго возраста следует добавить произведение количества пар с самками третьего возраста на плодовитость самок третьего возраста S17{=Q17*b_f2+R17*b_f3}. После этого все вычисления данного цикла закончены, можно переходить к следующему циклу и выполнять ту же последовательность действий опять.

 

Анализ полученной модели

Теперь есть смысл задуматься о некоторых аспектах полученной модели. Как видно по ее скрину (рис. 5.1), при некоторых сочетаниях значений входных величин в модели возникают угасающие биения. Важно понять, что является их причиной. Какие сочетания входных коэффициентов порождают эти биения? Чем отличаются ситуации в их минимумах и максимумах? Почему в течение нескольких первых лет при показанных на рисунке входных значениях рост модельной популяции был заторможен, а потом она сделала "рывок"?

Можно ли вычислить соотношение, изменение которого вызывает биения численности? Можно ли построить график такой величины? Можно ли наложить график такой величины на график динамики численности?

Какие упрощения, принятые при построении данной модели, были наиболее существенными? Вероятно, самое серьезное упрощение (тесно связанное с причиной биений) состоит в том, что смертность при превышении емкости среды для всех возрастных классов оказывалась одинаковой. Второе серьезное упрощение состоит в том, что численность популяции растет без какого-либо замедления, пока не достигает емкости среды, а потом год за годом резко срезается на этом уровне.

Исходя из сказанного, становится ясным направление дальнейшего усложнения полученной модели и приближения ее к действительности. Надо ввести отдельные показатели смертности (и, возможно, конкурентоспособности) для разных возрастных классов (и, вероятно, разных полов). Надо усложнить механизм конкурентного сокращения численности.

Программа дальнейших действий начинает вырисовываться...