ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.03.2021
Просмотров: 6583
Скачиваний: 50
646
клины, и показано изменение численности популяций.
Рис. 7.45.
Результаты конкуренции, полученные с помощью модели Лотки-Вольтерры при различ-
ных параметрах. На рисунке
а в
зоне I численность обеих популяций падает; в зоне II - числен-
ность первой популяции растет, второй - уменьшается; в зоне 111 - численность обеих популяций
увеличивается
Таким образом, получено уравнение изоклины, которое, как можно заметить, является
уравнением прямой в плоскости (
N
1
,
N
2
). Вверх и вправо от изоклины из-за высокой численности
обеих популяций численность вида 1 снижается, в противоположных направлениях - повышается.
Аналогично можно построить изоклину для вида 2. На рис. 7.44 построены соответствующие изо-
клины и показано изменение численности популяций.
Для решения поставленной выше задачи объединим в одной фазовой плоскости изоклины
для обоих видов и будем одновременно исследовать динамику их численности. Изоклины относи-
тельно друг друга располагаются четырьмя различными способами, что дает различный исход
конкуренции. На рис. 7.45 представлены результаты конкуренции, полученные с помощью систе-
мы уравнений (7.67), заимствованные из книги М. Бигона и др. «Экология».
4.4. ДИНАМИКА ЧИСЛЕННОСТИ ПОПУЛЯЦИЙ ХИЩНИКА И ЖЕРТВЫ
Рассматривая динамику численности популяций хищника и жертвы, экологи прежде всего
стремятся понять ее закономерности и разъяснить различия между типами динамик. В простей-
ших моделях хищник и жертва рассматриваются безотносительно влияния на них других видов.
Одна из самых первых и простых моделей была предложена, как и модель межвидовой конкурен-
ции, Лоткой и Вольтеррой, и носит их имя.
Модель состоит из двух компонентов:
С
- численность популяции хищника и
N -
численность
популяции жертвы.
Предполагается,
что в отсутствие хищника популяция жертвы растет экспоненциально. Чем
больше численность той и другой популяции, тем чаще происходят встречи. Число встреченных и
съеденных жертв будет зависеть от эффективности, с которой хищник находит и ловит жертву.
Если обозначить через
а'
«эффективность поиска», то скорость поедания жертвы будет равна
a'∙C∙N,
и окончательно для численности жертвы
получаем
В отсутствие пищи отдельные особи хищника голодают и гибнут. Предположим вновь, что
численность хищника в отсутствие пищи будет уменьшаться экспоненциально:
647
(q -
смертность). Скорость рождения новых особей в данной модели полагается зависящей от двух
обстоятельств: скорости потребления пищи
a'∙C∙N,
и эффективности
f
, с которой эта пища перехо-
дит в потомство хищника. Итак, для численности хищника окончательно получаем
Так как процессы надо рассматривать вместе, объединим уравнения в систему:
(7.68)
Как и в предыдущем пункте, свойства этой модели можно исследовать, построив изоклины.
Для жертвы имеем
или, выражая
С
, получаем
Соответствующее уравнение изоклины для популяции хищника
Если поместить обе изоклины на одном рисунке, получим картину взаимодействия популя-
ций (рис. 7.46).
Как видно на рис. 7.47, численности популяций хищника и жертвы совершают периодиче-
ские колебания: при увеличении численности хищников уменьшается
Рис. 7.46.
Динамика численности популяции хищника и жертвы. Численность
обеих
популяций
совершает периодические колебания
численность популяции жертвы и наоборот. Такие колебания численности будут продолжаться в
соответствии с моделью до тех пор, пока какое-либо внешнее воздействие не изменит численность
популяций, после чего произойдет переход в новое устойчивое состояние (такая ситуация называ-
ется «нейтральные устойчивые циклы»).
648
Рис. 7.47.
Динамика численности популяции хищника и жертвы при
r
= 5,
а' =
0,1,
q =
2,
f
= 0,6,
N
0
=
150,
C
0
= 50. Сплошная линия - численность жертвы, штриховая – хищника
4.5. ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ ДИНАМИКИ ПОПУЛЯЦИЙ
Выше мы обсудили несколько классических математических моделей в экологии. Известно
и немало других, которые можно найти в книгах и в статьях научно-популярных журналов.
Использование математических моделей, основанных на дифференциальных уравнениях
или их дискретных аналогах, далеко не единственный путь в компьютерном моделировании дина-
мики популяций. Другую интересную группу составляют чисто стохастические модели или дина-
мические модели с элементами стохастичности.
Опишем две возможные модели такого класса:
одну - без подробностей, которые рекомендуем продумать самостоятельно, другую -
во всех дета-
лях, включая реализующую ее программу.
Первая модель.
Две популяции находятся в соотношении «хищник - жертва», описанном
выше, но модель совершенно иная. На некотором клетчатом поле (которое наглядно - все или по
частям - изображается на дисплее) находятся волки (несколько) и зайцы (много). Зайцы соверша-
ют беспорядочные перемещения, длины и направления которых - случайные величины, подчи-
няющиеся некоторому закону распределения вероятностей, а каждый волк в каждое мгновение
ориентируется на ближайшего зайца и может совершать ограниченные прыжки. Если волк в тече-
ние некоторого, заранее определенного, промежутка времени остается без добычи (т.е. не попада-
ет в клетку, где находится заяц), то он погибает. Зайцы и волки через определенные моменты раз-
множаются, например, каждый второй заяц приносит двух потомков, каждый второй волк прино-
сит одного потомка, причем скорость размножения волков в два раза ниже, чем зайцев. Все это
может красочно изображаться на экране, состояние которого меняется через фиксированные мо-
менты времени.
Это - чисто имитационное моделирование, конечной целью которого является, как и в опи-
санных моделях, установление судьбы популяций в зависимости от многих факторов, входящих в
модель. Здесь нет дифференциальных уравнений, но зато в полной мере проявляется стохастика,
моделирование случайных процессов. Реализация такой модели требует большого программист-
ского искусства, способствует формированию вероятностных представлений.
Возможны и пограничные - динамико-стохастические модели. Например, в уравнениях
Лотки - Вольтерры один из параметров - случайная величина с известным законом распределения.
Самостоятельные размышления над такими задачами, даже лишь над их постановкой, очень по-
лезны.
Вторая
модель
, которую опишем во всех деталях, предложена Д.Конвейем -имитационная
модель роста, распада и различных изменений в популяции живых организмов, известная под на-
званием «Жизнь».
649
Рис. 7.48.
К имитационной модели «Жизнь»
Для построения алгоритма игры рассмотрим квадратное поле из
n
+1 столбцов и строк с
обычной нумерацией от 0 до
n
, рис. 7.48. Крайние граничные столбцы и строки для удобства оп-
ределим как «мертвую зону», они играют лишь вспомогательную роль.
Для любой внутренней клетки поля с координатами (
i
,
j)
можто определить 8 соседей. Если
клетка «живая», ее закрашиваем, если клетка «мертвая», она пустая.
Зададим правила игры. Если клетка (
i
,
j)
«живая» и в окружении более трех «живых» кле-
ток, она погибает (от перенаселения). «Живая» клетка также погибает, если в окружении менее
двух «живых» клеток (от одиночества). «Мертвая» клетка оживает, если вокруг нее имеются три
«живые» клетки. Для удобства введем двумерный массив
А
[0.
.п,
0.
.п
]
,
элементы которого прини-
мают значение 0, если соответствующая клетка пустая, и 1, если клетка «живая». Тогда алгоритм
определения состояния клетки с координатой
(i,j)
можно определить следующим образом:
S := A[I-1, J-1] + A[I-1, J] + A[I-1, J+1] + A[I+1, J-1]
+ А[I+1, J] + A[I+1, J+l] + A[I, J+l] + А[1, J-1];
If (A[I, J] = 1) And ((S > 3) Or (S < 2); Then B(I, J] := 0;
If (A[I, J] = 0) And (S = 3) Then B[I, J] := 1;
Здесь массив
В
[0.
.п,
0.
.п
] определяет координаты поля на следующем этапе. Для всех внут-
ренних клеток от
i
= 1 до
n
- 1 и
j
= 1 до
n
- 1 справедливо сказанное выше. Отметим, что после-
дующие поколения определяются аналогично, лишь стоит осуществить процедуру переприсваи-
вания
For I := 1 То N-l DO For J := 1 To N-l Do A[I, J] := B[I, J] ;
На экране дисплея удобнее выводить состояние поля не в матричном, а в графическом виде.
Читатель без труда это может осуществить. Осталось лишь определить процедуру задания началь-
ной конфигурации игрового поля. При случайном определении начального состояния клеток под-
ходит алгоритм
For I := 1 То К Do
Begin Kl := Random(N-l); K2 := Random(N-l)+1; A[K1, K2] := 1 End;
Интереснее случай, когда начальную конфигурацию мы задаем сами, и удобнее для пользо-
вателя делать это непосредственно в графическом виде. Полный текст подобной программы при-
веден ниже.
Программа 150.
«Жизнь».
Program PlayLife;
Uses Crt, Graph; Const R = 41;
Var P ; 0..1; А, В : Array[0..R, 0..R] Of 0..1;
I, J, N, Kl, K2, Ss, X, Y, Gm, Gd : Integer; С : Char;
Begin DetectGraph(I, J); InitGraph(I, J, ");
{ -- заставка -- )
For I := 0 To 5 Do
Begin
SetFillStyle (1, I+2); Bar(180+1*10, 100+1*10, 430-1*10, 270-1*10);
650
End;
OutTextXY(260, 180, 'ИГРА "ЖИЗНЬ"'); Repeat Until KeyPressed;
{ - начальная конфигурация - }
RestoreCrtMode ;
For I := 0 To R Do
For J := 0 To R Do
Begin A[I, J] := 0; В[I, J] := 0 End;
CIrScr;
Write('Начальное поселение будете задавать случайно или вводить (0/1)?');
ReadLn(P);
If P = 0 Then Begin
Write('Введите начальное количество поселений 2 < n < 200: ');
ReadLn(N); Gm := VgaHi; SetGraphMode(Gm) ;
For I := 1 To N Do
Begin
Kl := Random(R - 1) + 1; K2 := Random(R - 1) + 1;
A{K1, K2] := 1; B[K1, K2] := 1;
End;
SetLineStyle(0, 0, 1); SetColor(4);
For I := 0 To R - 1 Do
Begin
Line(10 + I * 10, 10, 10 + I * 10, R * 10);
Line(10, 10 + I * 10, R * 10, 10 + I * 10);
End;
For I := 1 To R - 1 Do
For J := 1 To R - 1 Do
If A[I, J] = 1 Then
FloodFill(5 + I * 10, 5 + J * 10, 4);
Repeat Until KeyPressed;
End
Else
Begin
Gm := VgaHi; SetGraphMode(Gm); SetLineStyle(0, 0, 1); SetColor(4);
For I := 0 To R - 1 Do
Begin
Line(10 + I * 10, 10, 10 + I * 10, R * 10);
Line(10, 10 + I * 10, R * 10, 10 + I * 10);
End;
X := 15; Y := 15;
Repeat
С := ReadKey; If С = #0 Then С := ReadKey;
Case C Of
#72 : Begin
SetColor(O); Circle(X, Y, 2); Y := Y - 10; SetColor(15);
Circle(X, Y, 2)
End;
#80 : Begin
SetColor(O); Circle(X, Y, 2); Y := У + 10; SecColor(15);
Circle(X, Y, 2)
End;
#75 : Begin
SetColor(O); Circle(X, Y, 2); X := X - 10; SetColor(15);
Circle(X, Y, 2)
End;
#77 : Begin
SetColor(0); Circle(X, Y, 2); X ^ X + 10; SetColor(15) ;
Circle(X, Y, 2)
End;