Файл: Могилев А.В. Информатика.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 31.03.2021

Просмотров: 6583

Скачиваний: 50

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

646 

клины, и показано изменение численности популяций. 

 

Рис. 7.45.

 Результаты конкуренции, полученные с помощью модели Лотки-Вольтерры при различ-

ных параметрах. На рисунке 

а в

 зоне I численность обеих популяций падает; в зоне II - числен-

ность первой популяции растет, второй - уменьшается; в зоне 111 - численность обеих популяций 

увеличивается 

 

Таким  образом,  получено  уравнение  изоклины,  которое,  как  можно  заметить,  является 

уравнением прямой в плоскости (

N

1

,

 

N

2

). Вверх и вправо от изоклины из-за высокой численности 

обеих популяций численность вида 1 снижается, в противоположных направлениях - повышается. 
Аналогично можно построить изоклину для вида 2. На рис. 7.44 построены соответствующие изо-
клины и показано изменение численности популяций. 

Для решения поставленной выше задачи объединим в одной фазовой плоскости изоклины 

для обоих видов и будем одновременно исследовать динамику их численности. Изоклины относи-
тельно  друг  друга  располагаются  четырьмя  различными  способами,  что  дает  различный  исход 
конкуренции. На рис. 7.45 представлены результаты конкуренции, полученные с помощью систе-
мы уравнений (7.67), заимствованные из книги М. Бигона и др. «Экология». 

 

4.4. ДИНАМИКА ЧИСЛЕННОСТИ ПОПУЛЯЦИЙ ХИЩНИКА И ЖЕРТВЫ 

 
Рассматривая динамику численности популяций хищника и жертвы, экологи прежде всего 

стремятся  понять  ее  закономерности  и  разъяснить  различия  между  типами  динамик.  В  простей-
ших  моделях  хищник  и  жертва  рассматриваются  безотносительно  влияния  на  них  других  видов. 
Одна из самых первых и простых моделей была предложена, как и модель межвидовой конкурен-
ции, Лоткой и Вольтеррой, и носит их имя. 

Модель состоит из двух компонентов: 

С

 - численность популяции хищника и 

N -

численность 

популяции жертвы. 

Предполагается,

 

что в отсутствие хищника популяция жертвы растет экспоненциально. Чем 

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

а'

  «эффективность  поиска»,  то  скорость  поедания  жертвы  будет  равна 

a'∙C∙N,

 и окончательно для численности жертвы

 получаем 

 

В отсутствие пищи отдельные особи хищника голодают и гибнут. Предположим вновь, что 

численность хищника в отсутствие пищи будет уменьшаться экспоненциально: 


background image

 

647 

 

(q -

 смертность). Скорость рождения новых особей в данной модели полагается зависящей от двух 

обстоятельств: скорости потребления пищи

 a'∙C∙N,

 и эффективности 

f

, с которой эта пища перехо-

дит в потомство хищника. Итак, для численности хищника окончательно получаем 

 

Так как процессы надо рассматривать вместе, объединим уравнения в систему: 

(7.68)

 

Как и в предыдущем пункте, свойства этой модели можно исследовать, построив изоклины. 
Для жертвы имеем 

 

или, выражая 

С

, получаем 

 

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

 

Если поместить обе изоклины на одном рисунке, получим картину взаимодействия популя-

ций (рис. 7.46). 

Как видно на рис. 7.47, численности популяций хищника и жертвы совершают периодиче-

ские колебания: при увеличении численности хищников уменьшается 

 

Рис. 7.46.

 Динамика численности популяции хищника и жертвы. Численность

 

обеих

 

популяций 

совершает периодические колебания 

 

численность популяции жертвы и наоборот. Такие колебания численности будут продолжаться в 
соответствии с моделью до тех пор, пока какое-либо внешнее воздействие не изменит численность 
популяций, после чего произойдет переход в новое устойчивое состояние (такая ситуация называ-
ется «нейтральные устойчивые циклы»). 


background image

 

648 

 

Рис. 7.47.

 Динамика численности популяции хищника и жертвы при 

r

 = 5, 

а' = 

0,1, 

q =

 2,  

= 0,6, 

N

0

 =

 150, 

C

0

 = 50. Сплошная линия - численность жертвы, штриховая – хищника 

 

4.5. ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ ДИНАМИКИ ПОПУЛЯЦИЙ 

 

Выше мы обсудили несколько классических математических моделей в экологии. Известно 

и немало других, которые можно найти в книгах и в статьях научно-популярных журналов. 

Использование  математических  моделей,  основанных  на  дифференциальных  уравнениях 

или их дискретных аналогах, далеко не единственный путь в компьютерном моделировании дина-
мики популяций. Другую интересную группу составляют чисто стохастические модели или дина-
мические  модели  с  элементами  стохастичности.

 

Опишем  две  возможные  модели  такого  класса: 

одну - без подробностей, которые рекомендуем продумать самостоятельно, другую -

 

во всех дета-

лях, включая реализующую ее программу. 

Первая модель.

  Две популяции находятся  в  соотношении  «хищник  -  жертва»,  описанном 

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

Это - чисто имитационное моделирование, конечной целью которого является, как и в опи-

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

Возможны  и  пограничные  -  динамико-стохастические  модели.  Например,  в  уравнениях 

Лотки - Вольтерры один из параметров - случайная величина с известным законом распределения. 
Самостоятельные  размышления  над  такими  задачами,  даже  лишь  над  их  постановкой,  очень  по-
лезны. 

Вторая

 

модель

, которую опишем во всех деталях, предложена Д.Конвейем -имитационная 

модель роста, распада и различных изменений в популяции живых организмов, известная под на-
званием «Жизнь». 


background image

 

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 до 

- 1 и 

j

 = 1 до 

- 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); 


background image

 

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;