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