Имитационное моделирование динамики популяции. Модель "Жизнь"

Использование компьютерного моделирования в биологии. Листинг программы "Модель "Жизнь" по Джону Конуэю с комментариями. Проектирование графического интерфейса. Теоретический материал обучаемого модуля. Объектно-ориентированные особенности языка Delphi.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 17.03.2012
Размер файла 2,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ ФИЛИАЛ ГОУ ВПО “КОСТРОМСКОЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМ. Н.А. НЕКРАСОВА”

В Г. КИРОВСКЕ МУРМАНСКОЙ ОБЛ.

Кафедра: Информатика

Специальность: 050202

Курсовой проект

на тему: "Имитационное моделирование динамики популяции. Модель "Жизнь""

по дисциплине: Компьютерное моделирование

Оглавление

  • Введение
  • 1. Теоретическая часть
  • 1.1 Модель "Жизнь" Джона Конуэя
  • 2. Практическая часть
  • 2.1 Модель "Жизнь"
  • 2.2 Общие требования
  • 2.3 Листинг программы "Модель "Жизнь"" по Конуэю с комментариями
  • 2.4 Проектирование графического интерфейса
  • 3. Разработка обучаемого модуля
  • 3.1 Теоретический материал по созданию модели "Жизнь"
  • 3.1.1 Определение Delphi, объектно-ориентированные особенности языка
  • 3.2 Практический материал по созданию модели "Жизнь"
  • Заключение
  • Использованная литература

Введение

Насколько известно, моделирование действительно используется в биологии очень интенсивно. Многие процессы, интересующие биологов (например, динамика возрастного состава некоторой популяции или количества особей в ней), могут быть более или менее точно описаны математически и смоделированы на компьютере. Конечно, предсказывать трудно, особенно будущее (по выражению Нильса Бора), но порою это необходимо. Хорошо известна печальная история с кроликами в Австралии: завезенные в середине XIX века, эти, казалось бы, безобидные зверьки нанесли огромный урон местной фауне, истребляя растительность (и тем самым лишая корма коренных обитателей материка). Опять-таки, компьютер и компьютерные модели - не панацея, но во многих случаях они могут помочь просчитать возможные сценарии событий и тем самым избежать непродуманных решений.

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

компьютерное моделирование биология delphi

1. Теоретическая часть

1.1 Модель "Жизнь" Джона Конуэя

Авторство этой замечательной модели принадлежит математику Джону Конуэю. Bo многом благодаря статье Мартина Гарднера в журнале Scientific American, написанной теперь уже далеком 1970 году, "Жизнь" стала широко известна во всем мире. Хорошее описание модели можно найти в книге Гарднера "Математические досуги" (второе русское издание вышло в 2000 году).

"Жизнь" Джона Конуэя отличается прекрасной балансированностью "правил игры", поэтому в ней можно получить уйму красивых конфигураций, изменяющихся со временем самым причудливым образом.

Итак, правила:

Если у инфузории есть два или три соседа, она выживает.

Если у инфузории больше трех или меньше двух соседей, она погибает.

Если у пустой клетки есть ровно три соседа-инфузории, на ней рождается новая инфузория.

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

Поскольку в "Жизни" Конуэя интересны конкретные конфигурации инфузорий, без "редактора конфигураций" нет смысла писать основную программу. Во-первых, простейший редактор написать несложно; во-вторых, можно попросту загружать готовое поле из текстового файла нулей и единиц, а текстовый файл редактировать Блокнотом; в-третьих, можно вообще явно присвоить требуемые значения тем или иным клеткам поля внутри самой программы, тем самым обойдясь на первых порах без редактора.

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

Листинг 1. "Жизнь" Джона Конуэя

procedure TForml. StartStopBtnC1ick (Sender: TObject); const WIDTH = 30;

HEIGHT = 25; var x, у: Integer;

Rx. Ry: Integer;

Field: array [O. WIDTH + 1. O. HEIGHT + 1] of Boolean;

Changes; array [O. WIDTH + 1, O. HEIGHT + 1] of Boolean;

s. i, j: Integer;

begin

if IsRunning then begin

IsRunning: ='false;

StartStopBtn: Caption: ='RycK';

Exit; end;

StartStopBtn. Caption: = 'Cron': IsRunning: = true;

Rx: = (Screen. Width div WIDTH) div 2; Ry: = (Screen. Height div HEIGHT) div 2;

Screen. Refresh; { очистка экрана }

for i: = O to WIDTH + 1 do

for j: = O to HEIGHT + 1 do begin

Field [i, j]: = false: { очистка поля }

Changes [i, j]; = false; end;

{ здесь внести строки, задающие конфигурацию инфузорий }

while IsRunning do{ основной цикл }

begin

for i: = 1 to WIDTH do { отображение текущего состояния } for j: = 1 to HEIGHT do begin

if Field [i. j] then

Screen. Canvas. Pen. Color: =cTBlue else,.

Screen. Canvas. Pen. Color: = clBtnFace; Screen. Canvas. Ellipse ( (2*i - l) *Rx - Rx, (2*j - l) *Ry - Ry, (2*i - l) *Rx + Rx, (2*j - l) *Ry + Ry): end;

for x: = 1 to WIDTH do

for у: = 1 to HEIGHT do

begin{ для каждой клетки поля }

s: = O; { подсчет соседей }

for i: = - 1 to 1 do for j: = - 1 to 1 do

s: = s + Ord (Field [x + i] [y + J]); s: = s - Ord (Field [x] [y]);

{ если произошло рождение или смерть } if ( (Field [x, у] = false) and (s = 3)) or

( (Field [x. у] = true) and ( (s < 2) or (s > 3))) then

Changes [x, у]: = true; end;

for x: = 1 to WIDTH do. { внесение изменений }

for у: = 1 to HEIGHT do if Changes [x, у] then begin

Fie1d [x. у]: = not Fie1d [x, y]; { меняем состояние на } Changes [x, у]: = false: { противоположное }

end;

Sleep (100);

Appli cati on. ProcessMessages; end; end;

Массив Changes показывает, произойдет ли на данной клетке "изменение" (то есть рождение для пустой или смерть для непустой клетки). Достаточно задать в качестве его размерностей l. Width и l. Height;

B уже упомянутой статье Гарднера описывается несколько интересных ситуаций, которые возникают в "Жизни" Конуэя. Во-первых, из всех возможных конфигураций можно выделить подклассы "стабильных" и "периодических".

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

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

"Жизнь" Джона Конуэя тесно связана с так называемой теорией клеточных автоматов. B настоящее время с "Жизнью" связано много исследований, этой модели посвящено большое количество ресурсов Интернета.

2. Практическая часть

2.1 Модель "Жизнь"

Имитационное моделирование динамики популяции. Модель "Жизнь" - это модель роста и распада в жизни организмов.

Правила игры:

1. Если у инфузории есть два или три соседа, она выживает.

2. Если у инфузории больше трех или меньше двух соседей, она погибает.

3. Если у пустой клетки есть ровно три соседа-инфузории, на ней рождается новая инфузория.

Программа написана в среде Delphi.

2.2 Общие требования

1. Программа должна быть написана в среде С++ или Delphi;

2. Должны быть соблюдены все правила;

3. Возможность запускать программу и останавливать ее процесс;

4. Вводить клетки так, как хочет пользователь;

5. Очищать по необходимости поле.

2.3 Листинг программы "Модель "Жизнь"" по Конуэю с комментариями

Procedure TForm1. StartStopBtnClick (Sender: TObject); // процедура работает при нажатии на кнопку StartStopBtn

const WIDTH = 30; // количество клеток по высоте

HEIGHT = 25; // к-во по ширине

var x,y: Integer; // объявление переменных x и y: целые числа

Rx, Ry: Integer; // Объявление Rx Ry: целые

// объявление двумерного массива с именем Field размерности 0.31 на 0.26, сюда заносятся данные о том, где расположены клетки, тип данных в массиве - булевы значение. То есть, истина, ложь, если в поле Field [0,0], например значение true, это значит, что на позиции [0,0] живёт клетка, а если Field [22,15] имеет значение false, то в клетке с координатами 22,15 клетки нет, то Field: array [0. WIDTH + 1, 0. HEIGHT + 1] of Boolean;

// объявление массива Changes такой же размерности, куда заносятся данные о изменениях, где что умерло/зародилось

Changes: array [0. WIDTH + 1, 0. HEIGHT + 1] of Boolean;

// объявление s, i,j и l как целых чисел, i,j - для задания счётчиков циклов, s - счётчик соседей для клетки

s, i, j: Integer;

l: integer;

begin // начало непосредственной работы

l: =1;

// if IsRunning then

// если название кнопки "Стоп", тогда

if (StartStopBtn. Caption='Стоп') then

begin

// IsRunning: ='false';

// переименовываем её в "Пуск"

StartStopBtn. Caption: ='Пуск';

// выходим из процедуры

Exit;

end;

// если там не вышли и дошли до сюда, переименовываем кнопку в "Стоп"

StartStopBtn. Caption: = 'Стоп';

// Is Running: = true;

// вычисляем радиусы для рисования эллипсов-клеток

// радиус по иксу - ширина Img (поля, где всё рисуется), делённая на количество клеток с остатком

// (div - остаток от деления) и делённая на 2

Rx: = (Form1. Img. Width div WIDTH) div 2;

// аналогично для y, но высота Img и кол-во клеток по вертикали

Ry: = (Form1. Img. Height div HEIGHT) div 2;

Form1. Img. Canvas. Refresh; { очистка Img }

// запускаем два цикла, по горизонтали и вертикали, чтобы пройтись по всем значениям матриц Field и Changes

for i: = 0 to WIDTH + 1 do

for j: = 0 to HEIGHT + 1 do

begin

Field [i, j]: = false; // чистим поле, обнуляем локации клеток, живых клеток нет

Changes [i, j]: = false; // массив с изменениями тоже чистим

end;

{ здесь внести строки, задающие конфигурацию инфузорий }

// тут запускаем так же два цикла, чтобы пройтись по всему Dataset'у StgStart, считать нарисованное там расположение клеток и заполнить в программе поля с соответствующими координатами, т.е., указать, где клетки расположены

For i: to 30 do

For j: to 25 do

begin

If StgStart. Cells [i,j] <>'' then // если текущая клетка, до координат которой сейчас дошли в циклах не пуста, то заполняем поле значением "true", то есть, в поле [.,.] есть клетка

Field [i+1,j+1]: =true;

end;

// while IsRunning do { основной цикл }

// пока на кнопке надпись "Стоп", выполняем

while StartStopBtn. Caption='Стоп' do

begin

{ отображение текущего состояния }

// два цикла, считать значения из массива Field, узнать, где живые клетки и отрисовать их

// запускаем циклы

for i: = 1 to WIDTH do

for j: = 1 to HEIGHT do

begin

// если значение поля с координатами, до которых дошли в цикле равно правде

// (здесь можно было написать if (Field [i,j] =true), но это можно опускать, так как по умолчанию в условии if проверяется, получим ли мы правду или ложь, а так как если Field [i,j] =true, то мы получим и что условие if равно true, поэтому можно просто сразу проверять, true или false в if получилось, проверив только,

// чему равно значение Field [i,j])

if Field [i, j] then

// тогда цвет кисти - голубой

Form1. Img. Canvas. Pen. Color: = clBlue

// иначе

else

// цвет кисти выбираем нейтральный, цвет "лица кнопки"

Form1. Img. Canvas. Pen. Color: = clBtnFace;

// рисуем тем цветом, который выбрали эллипс

Form1. Img. Canvas. Ellipse ( (2*i - l) *Rx - Rx, (2*j - l) *Ry - Ry, (2*i - l) *Rx + Rx, (2*j - l) *Ry + Ry);

end;

// опять циклы, чтобы по всем клеткам пройтись

for x: = 1 to WIDTH do

for y: = 1 to HEIGHT do

begin { для каждой клетки поля }

s: = 0; { подсчет соседей }

for i: = - 1 to 1 do

for j: = - 1 to 1 do

// Функция Ord возвращает целочисленное значение для любого перечислимого типа Arg

// чтобы найти, сколько соседей вокруг

s: = s + Ord (Field [x + i] [y + j]);

s: = s - Ord (Field [x] [y]);

{ если произошло рождение или смерть }

// если в поле с текущими координатами клетки нет и соседей 3 или если клетка есть и соседей <2 или >3, тогда

if ( (Field [x, y] = false) and (s = 3)) or ( (Field [x, y] = true) and ( (s < 2) or (s > 3))) then

// в ячейку массива с изменениями с текущими координатами заносим "правда", тут будет клетка

Changes [x, y]: = true;

end;

{ внесение изменений }

// циклы

for x: = 1 to WIDTH do

for y: = 1 to HEIGHT do

// если в массиве Changes ячейка с координатами x,y = правде, то есть, если в массиве с изменениями на этом месте числится клетка,

if Changes [x, y] then

// то

begin

// пауза 50

Sleep (50);

Field [x, y]: = not Field [x, y]; { меняем состояния на }

Changes [x, y]: = false; // противоположные, где не было клетки - будет в массиве Field, в массиве Changes отмечаем таким образом

// что изменения внесены

end;

// пауза 100

Sleep (100);

//

Application. ProcessMessages;

end;

end;

procedure TForm1. StgCleanClick (Sender: TObject);

var i: integer;

begin

For i: to 30 do

// цикл по количеству столбцов

StgStart. Cols [i]. Clear; // Очищается столбец с номером i

end;

procedure TForm1. StgStartSelectCell (Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean); // тут отрисовка расположения клеток в StgStartStop

begin

If (StgStart. Cells [ACol, ARow] <>'*') then // Если в выделенной клетке нет звёздочки,

StgStart. Cells [ACol, ARow]: ='*' // рисуем её там

else // иначе

StgStart. Cells [ACol, ARow]: =''; // удаляем (чтобы отдельно чистить не пришлось)

end;

end.

2.4 Проектирование графического интерфейса

Вид экрана после запуска Delphi несколько необычен (рис.1). Вместо одного окна на экране появляются пять:

· главное окно - Delphi 7;

· окно стартовой формы - Form 1;

· окно редактора свойств объектов - Object Inspector;

· окно просмотра списка объектов - Object TreeView;

· окно редактора кода - Unitl. pas.

Рис.1. Вид экрана после запуска Delphi

В главном окне (рис.2) находится меню команд, панели инструментов и палитра компонентов.

Окно стартовой формы (Forml) представляет собой заготовку главного окна разрабатываемого приложения.

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

Рис.2. Главное окно

Окно Object Inspector (рис.3) - окно редактора свойств объектов предназначено для редактирования значений свойств объектов. В терминологии визуального проектирования объекты - это диалоговые окна и элементы управления (поля ввода и вывода, командные кнопки, переключатели и др.). Свойства объекта - это характеристики, определяющие вид, положение и поведение объекта. Например, свойства width и Height задают размер (ширину и высоту) формы, свойства тор и Left - положение формы на экране, свойство caption - текст заголовка.

Рис.3. На вкладке Properties перечислены свойства объекта и указаны их значения

Рис.4. Окно редактора кода

В окне редактора кода (рис.4), которое можно увидеть, отодвинув в сторону окно формы, следует набирать текст программы. В начале работы над новым проектом это окно редактора кода содержит сформированный Delphi шаблон программы.

Окно формы модели "Жизнь" (Рис.5)

Рис.5. Окно формы модели "Жизнь"

Модель "Жизнь" в работе (Рис.6 и Рис.7)

Рис.6. Задаем расположение клеток на поле String grid

Рис.7. В поле Img клетки располагаются так же, как и в окне String grid

3. Разработка обучаемого модуля

3.1 Теоретический материал по созданию модели "Жизнь"

3.1.1 Определение Delphi, объектно-ориентированные особенности языка

Delphi - среда программирования, в которой используется язык программирования Object Pascal. С ее помощью можно создавать как маленькие программки, там и целые базы данных.

Объектно-ориентированные особенности языка:

· Инкапсуляция

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

· Наследование

При создании новых объектов получить все свойства и методы от своих предков называют наследованием. Такие объекты унаследывают после своего создания все поля, свойства, события, методы и прочее от своих предков. Наследование часто избавляет разработчиков от рутинной работы и позволяет не мешкая приступить к разработке чего-то нового.

· Полиморфизм

Это методы различных объектов, которые могут иметь одинаковые имена, но по внутреннему содержимому отличаются друг от друга.

· Операторы

Cписок операторов через пробел: + - * / div mod not and or xor shl shr ^ = <> >= <= < > @ in is as

· Типы данных

Обрабатываемые в программе данные подразделяются на переменные, константы и литералы. Константы представляют собой данные, значения которых установлены в разделе объявления констант и не изменяются в процессе выполнения программы.

· Объекты

Объекты как экземпляры класса объявляются в программе в разделе var как обычные переменные. Например:

var

CCircle1: TColorCircle;

CircleA: TCircle;

Как и в случае записей, для обращения к конкретному элементу объекта (полю; свойству или методу) указывается имя объекта и имя элемента, разделенные точкой, то есть имя элемента является составным.

· Классы

В языке Object Pascal классы - это специальные типы данных, используемые для описания объектов. Соответственно объект, имеющий тип какого-либо класса, является экземпляром (instance) этого класса или переменной этого типа.

Класс представляет собой особый тип записи, имеющий в своем составе такие элементы (члены, member), как поля, свойства и методы. Поля класса аналогичны полям записи и служат для хранения информации об объекте. Методами называются процедуры и функции, предназначенные для обработки полей. Свойства занимают промежуточное положение между полями и методами.

3.2 Практический материал по созданию модели "Жизнь"

Для начала работы нужно запустить Delphi 7. На появившейся форме создадим 2 кнопки: Button (Рис.8). Кнопка находится во вкладке Standard. Задаем имена кнопкам, это можно сделать в окне Object Inspector, в строке Caption. Назовем их "Старт" и "Очистить поле".

Рис.8. Форма, на которую добавляем 2 кнопки (Button)

Далее создадим поле String grid (Рис.9), в которой в будущем задавать положение клеток. String grid находится во вкладке Additional.

Рис.9. Добавление String grid на форму

Зададим размерность поля. Чтобы это сделать нужно ввести нужные данные в Object Inspector. Находим 2 строчки: ColCount и RowCount. Вводим значения.

Также добавим окно Img (Рис.10), в котором в дальнейшем будут изображаться нарисованные нами клетки в String grid. Img находится во вкладке Additional.

Рис.10. Добавление Img на форму

Форма модели готова, осталось ее запрограммировать.

Заключение

В курсовом проекте была создана модель "Жизнь" по Конуэю.

Программа была выполнена в среде Delphi 7. Правила игры были соблюдены.

Использованная литература

1. Уэзерелл Ч. Этюды для программистов. - М.: Мир, 1982. - С. 19-22.

2. Гарднер М. Крестики-нолики. - М.: Мир, 1988. - С.287-343. - ISBN 5-03-001234-6 (русск.), ISBN 0-7167-1589-9 (англ.)

3. Тоффоли Т., Марголус Н. Машины клеточных автоматов. - М.: Мир, 1991. - ISBN 5-03-001619-8

4. Трофимов М. Жизнь на Макинтоше // Монитор, 1995. - № 2, с.72; № 4, с.72; № 5, с.66.

5. Култин - programming-for-delphi-7. djvu

Размещено на Allbest.ru


Подобные документы

  • Понятие материального и идеального моделирования. Разработка модели экономического предприятия компьютерного клуба "GaMeR" для подсчета рентабельности. Выбор языка программирования Delphi, его преимущества и особенности. Описание листинга программы.

    курсовая работа [166,7 K], добавлен 11.03.2014

  • Основные подходы к математическому моделированию макромолекул. Методы молекулярной динамики и Монте-Карло. Механическая модель молекулы. Применения компьютерного эксперимента. Механическая модель молекулы. Преимущества компьютерного моделирования.

    реферат [44,9 K], добавлен 19.03.2009

  • Основные идеи объектно-ориентированного подхода, преимущества и недостатки. Выбор языка программирования, проектирование системы классов, их взаимосвязь и формат. Программный код модуля unit1.h, тестирование, листинг. Результаты работы программы.

    дипломная работа [347,7 K], добавлен 26.11.2011

  • Основные операции с матрицами. Проектирование объектно-ориентированного модуля для работы с матрицами в среде Delphi 7. Разработка программы, которая позволяет выполнять различные действия над матрицами. Описание интерфейса программы, исходный код модуля.

    курсовая работа [1014,2 K], добавлен 15.01.2013

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

    курсовая работа [1,2 M], добавлен 04.08.2014

  • Язык Delphi как строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal, его главные особенности. Стадии создания автоматизированной системы. Листинг программы, разработка интерфейса.

    курсовая работа [933,9 K], добавлен 08.12.2011

  • Теоретические основы моделирования систем в среде имитационного моделирования AnyLogic. Средства описания поведения объектов. Анимация поведения модели, пользовательский интерфейс. Модель системы обработки информации в среде компьютерного моделирования.

    курсовая работа [1,5 M], добавлен 15.05.2014

  • Использование объектно-ориентированной методологии при программировании математических процессов. Среда языка программирования Delphi для решения математических задач. Объектно-ориентированные, декларативные и императивные языки программирования.

    дипломная работа [1,8 M], добавлен 14.09.2011

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

    лабораторная работа [159,4 K], добавлен 26.05.2014

  • Разработка программы по оформлению заказов на билеты Оренбургского государственного областного драматического театра им. Горького. Использование объектно-ориентированного программирования и реализация проекта в среде визуального программирования Delphi 7.

    курсовая работа [6,3 M], добавлен 12.11.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.