Вариант пространственной модели «Хищник-Жертва»

Пусть клетки автомата могут быть заняты растительностью и животными (хищниками или жертвами).

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

- для каждой клетки задается максимальное количество травы, которое способно вырасти на данной клетке. Как только количество травы на клетке становится меньше максимального, она начинает расти вновь с заданной скоростью.

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

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

Траве:

Предел роста не достигнут?

Вырасти на заданную высоту.

Рис. 1

Этот алгоритм реализован в функции serengeti1.m. Дело в том, что объектом, вдохновившим нас на разработку этой модели, является экосистема национального парка Серенгети (Танзания).

Одной из особенностей Серенгети является миграция животных. Ежегодно, в засушливый период октября и ноября, более миллиона антилоп гну и около двухсот тысяч зебр перемещаются с северных холмов на южные равнины, где в это время идут непродолжительные тропические дожди. Затем с наступлением дождливого сезона в апреле-июне животные мигрируют на запад и север. Ни засуха, ни хищники не могут их остановить. В течение этого ежегодного длительного путешествия животные проходят 3000 км, съедая около 4000 тонн травы каждый день. Много животных погибает, однако и в пути рождается примерно четверть миллиона детенышей.

НЕ нашли? Не то? Что вы ищете?

Возвращаясь в функции serengeti1.m, отметим, что в ней также задано переменное количество травы, возрастающее линейно от левой к правой границе игрового мира.

function x = initVegetation(s, A)

[ X, Y ] = meshgrid( 1:s, 1:s );

x = A*X;

Коэффициент A характеризует градиент изменения растительности, s — определяет размер игрового «мира».

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

Начнем с описания поведения травоядных (рис. 2).

В клетке есть агенты?

M = Число агентов в клетке # M > 0

Для каждого агента из M выполнить:

Травоядным:

Корм в ячейке есть?

Оставаться на месте. Уменьшить запас травы. Энергия += (Прирост энергии – Убыль энергии)

Иначе

Корм есть в ячейке по соседству?

Вычислить ячейку по соседству с максимальным объемом корма

Перейти в нее. Энергия -= Убыль энергии

Иначе

Перейти в произвольную ячейку по соседству. Энергия -= Убыль энергии

Энергии недостаточно для существования?

Умереть

Конец цикла «Для каждого агента…»

Конец «В клетке есть агенты?»

Рис. 2

Начальное распределение травоядных задается функцией initAgents():

function a = initAgents(size, maxenergy)

k = 1;

for i = 1:size;

for j = 1:size;

if rand < 0.2 % поместить в клетку жертву и задать ее параметры

a(k).i = i;

a(k).j = j;

a(k).energy = maxenergy;

a(k).number = k;

k = k + 1;

end

end

end

Каждая особь задается структурой a, полями которой являются:

-  координаты особи (i, j);

-  энергия, которой обладает особь (energy);

-  индивидуальным номером (number)/

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

Функция displayAgents(size, a,txt, ptime) отображает размещение животных. Параметр txt управляет выводом на экран количество животных в данной ячейке.

Алгоритм, показанный на рис. 2 реализован в функции serengeti2.m. Очевидно, что его необходимо дополнить возможностью воспроизводства животных (рис. 3).

В клетке есть агенты?

M = Число агентов в клетке # M > 0

Для каждого агента из M выполнить:

Травоядным:

Инкрементировать счетчик воспроизводства

Корм в ячейке есть?

Оставаться на месте. Уменьшить запас травы. Энергия += (Прирост энергии – Убыль энергии)

Иначе

Корм есть в ячейке по соседству?

Вычислить ячейку по соседству с максимальным объемом корма

Перейти в нее. Энергия -= Убыль энергии

Иначе

Перейти в произвольную ячейку по соседству. Энергия -= Убыль энергии

Энергии недостаточно для существования?

Умереть

Счетчик воспроизводства превысил верхнюю границу диапазона воспроизводства?

Сбросить счетчик воспроизводства

Иначе

(Счетчик воспроизводства находится в диапазоне воспроизводства) И (Энергии достаточно для воспроизводства)?

Воспроизвести потомство численностью не более заданной и с максимальной Энергией

Сбросить счетчик воспроизводства

Конец цикла «Для каждого агента…»

Конец «В клетке есть агенты?»

Рис. 3

Воспроизводство животных реализовано в функции reproduceAgents() (serengeti3.m).

Наконец, модель необходимо дополнить правилами, определяющими поведение хищников (рис. 4).

Хищникам:

Инкрементировать счетчик воспроизводства

Если в текущей ячейке корм (жертвы)?

Оставаться на месте

Энергия += (Вероятность прироста энергии * Прирост энергии – Убыль энергии)

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

Иначе

Корм есть в ячейке по соседству?

Вычислить ячейку по соседству с максимальным объемом корма

Перейти в нее. Энергия -= Убыль энергии

Иначе

Перейти в произвольную ячейку по соседству. Энергия -= Убыль энергии

Энергии недостаточно для существования?

Умереть

Счетчик воспроизводства превысил верхнюю границу диапазона воспроизводства?

Сбросить счетчик воспроизводства

Иначе

(Счетчик воспроизводства находится в диапазоне воспроизводства) И (Энергии достаточно для воспроизводства)?

Воспроизвести потомство численностью не более заданной и с максимальной Энергией

Сбросить счетчик воспроизводства

Рис. 4

Алгоритм поведения хищников имеет много общего с алгоритмом для травоядных (рис. 3). Существенно отличие выделено на рис. 4 жирным шрифтом.

Таким образом, полный цикл работы модели «Серенгети» можно записать следующим образом (рис. 5).

Траве:

Предел роста не достигнут?

Вырасти на заданную высоту.

В клетке есть агенты?

M = Число агентов в клетке # M > 0

Для каждого агента из M выполнить:

Травоядным:

Инкрементировать счетчик воспроизводства

В текущей ячейке хищник?

Перейти в соседнюю ячейку

Иначе

Корм в ячейке есть?

Оставаться на месте. Уменьшить запас травы. Энергия += (Прирост энергии – Убыль энергии)

Иначе

Корм есть в ячейке по соседству?

Вычислить ячейку по соседству с максимальным объемом корма

Перейти в нее. Энергия -= Убыль энергии

Иначе

Перейти в произвольную ячейку по соседству. Энергия -= Убыль энергии

Энергии недостаточно для существования?

Умереть

Счетчик воспроизводства превысил верхнюю границу диапазона воспроизводства?

Сбросить счетчик воспроизводства

Иначе

(Счетчик воспроизводства находится в диапазоне воспроизводства) И (Энергии достаточно для воспроизводства)?

Воспроизвести потомство численностью не более заданной и с максимальной Энергией

Сбросить счетчик воспроизводства

Хищникам:

Инкрементировать счетчик воспроизводства

Если в текущей ячейке корм (жертвы)?

Оставаться на месте

Энергия += (Вероятность прироста энергии * Прирост энергии – Убыль энергии)

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

Иначе

Корм есть в ячейке по соседству?

Вычислить ячейку по соседству с максимальным объемом корма

Перейти в нее. Энергия -= Убыль энергии

Иначе

Перейти в произвольную ячейку по соседству. Энергия -= Убыль энергии

Энергии недостаточно для существования?

Умереть

Счетчик воспроизводства превысил верхнюю границу диапазона воспроизводства?

Сбросить счетчик воспроизводства

Иначе

(Счетчик воспроизводства находится в диапазоне воспроизводства) И (Энергии достаточно для воспроизводства)?

Воспроизвести потомство численностью не более заданной и с максимальной Энергией

Сбросить счетчик воспроизводства

Конец цикла «Для каждого агента…»

Конец «В клетке есть агенты?»

Рис. 5

Цветом на рис. 5 выделены общие для хищников и жертв правила.

Эта модель реализована в функции serengeti4.m. Новыми в модели являются функции countPopulation(), определяющая численность популяции особей данного вида в данной клетке и delPrey(), реализующая сокращение популяции жертв на заданную величину (ndel).