Мы начнем с построения очень простой модели биения сердца. Такая модель с именем Heart уже построена в AnyLogic, она находится в папке Examples\Part II. Откройте эту модель (рис. 5.1).
В окне редактора можно видеть четыре окна: окно проекта (Проект), окно свойств, окно структуры (рабочее поле редактора) и окно анимации. Закройте и откройте опять каждое из этих окон, измените их размеры, масштаб. Открыть окно структуры объекта Heart можно двойным щелчком по имени этого объекта в окне Проект. Убедитесь, что окно свойств меняется при выделении различных элементов в окне структуры и окне анимации — оно показывает свойства выделенного элемента. Щелкните объект Simulation в окне Проект. В окне свойств объекта можно видеть начальные условия проведения эксперимента с этой моделью.
Запустите модель. Двигая слайдеры, понаблюдайте за изменением ритма поденных сокращений и формы пульсаций переменных на графиках окна наблюдения (рис. 5.2). Наша задача — самим построить эту модель.
Постановка задачи
Математики давно задумывались над тем, чтобы построить математическую модель сердца для описания режимов его работы. Это нужно, в частности, для того, чтобы найти значения факторов, при которых наступает сбой сердечного ритма. Волновой процесс, протекающий в сердце, вполне возможно описать с помощью формул — такие уравнения известны. Вопрос в другом: что это за волны, насколько адекватно уравнения отражают происходящие в сердечной мышце процессы. Это требует длительной серьезной работы математиков с физиологами.
Здесь мы не будем заниматься данным вопросом. Мы рассмотрим простейшую математическую модель, описывающую процессы, которые похожи на биение сердца. Модель эта задается парой дифференциальных уравнений первого порядка:
dx / dt = (х — х3 — b)/ eps,
db / dt = х — хО,
где х представляет радиус сердца, хО — его значение в начальный момент, b — другая переменная, a eps — параметр. Эта модель — одна из простей-ши х, описывающих динамику работы сердца.
Целью построения данной модели является исследование характера зависи-мостей переменных состояния х и b от времени при разных значениях па-раметра eps, а также анализ фазовой диаграммы изменения радиуса х от значения b. Очевидно, что все эти величины вещественные (с плавающей точкой). Для построения модели необходимо задать начальные значения переменных х и b, а также значение параметра eps.
Рассматриваемые вопросы
В результате построения модели сердца будет рассмотрено несколько общих вопросов.
- Создание нового проекта.
- Рабочее поле редактирования объектов, окно Свойства объектов.
- Непрерывные переменные и параметры модели. Функциональные соотношения между переменными. Определение переменных с помощью дифференциальных уравнений.
- Запуск модели, создание графиков и фазовых диаграмм, изменение параметров в процессе работы модели.
- Окно анимации проекта, включение в анимацию графических элементов.
Видимость графических элементов. Статические и динамические пара
метры графических элементов анимации.
-Управление временем выполнения модели. Соотношение физического и модельного времени. Интерактивное изменение параметров во время выполнения модели. Слайдеры.
Файлы для контроля
Для контроля при самостоятельном освоении материала вы можете обращаться к уже построенным файлам, содержащим соответствующие модели. Данная модель уже построена: в папке Model Examples\Part II приведены несколько моделей на разных стадиях разработки, построенные в соответствии с данным описанием. Эти проекты вы можете открывать по ходу изучения материала для сравнения со своей разработкой.
Создание нового проекта
Для хранения ваших проектов необходимо создать новую папку. Создайте, например, папку C:\My Models. Запустите AnyLogic, щелкнув по файлу проекта AnyLogic (расширение alp, значок ). Для построения нового проекта в вашей папке щелкните кнопку Создать панели инструментов (рис. 5.3), либо щелкните по кнопке Новый проект слева внизу окна, либо выберите в основном меню Файл | Создать.
В появившемся диалоговом окне установите нужную рабочую папку, в ней наберите Heart как имя проекта (это имя нового файла, в котором будет храниться ваш новый проект) и щелкните ОК. Новый проект под названием Heart будет создан, и на экране вы увидите следующее — рис. 5.4.
Открытое окно редактора нового проекта содержит три части. Слева в окне классов автоматически будет строиться дерево проекта. Оно обеспечивает удобную навигацию по элементам проекта, которые будут создаваться при построении модели. Для нового проекта в нем уже создан корневой класс активного объекта с именем Main, а для проведения экспериментов с будущей моделью уже создан один эксперимент с именем simulation у узла дерева эксперименты. Центральное окно — окно графического редактора структуры для создания структуры активного объекта, представляющего модель. С помощью кнопок управления этим окном, которые находятся вверху справа, можно уменьшить, свернуть или закрыть это окно. Уменьшите размер окна редактора структуры объекта Main. Двойным щелчком мыши на имени класса активного объекта в окне классов (в данном случае Main) можно открыть окно редактора структуры этого объекта, если оно закрыто.
Окно справа — это окно свойств выделенного элемента модели. В данном случае это окно показывает свойства класса корневого объекта с именем Main, если окно его структуры активно. В окне свойств можно редактировать (изменять, устанавливать) свойства любых создаваемых объектов модели. Измените имя корневого объекта нашей модели, назвав его Heart (вместо установленного по умолчанию имени Main). Для этого в поле Имя класса вкладки Общие окна Свойства корневого объекта введите Heart вместо Main. В окне классов имя корневого объекта сразу изменится.
Построение модели
Наша задача — построение модели, в которой присутствуют две переменные состояния, х и Ъ, и два параметра — хО и eps, где хО — начальное значение х. Начальное значение переменной bзададим константой.
Для введения первой переменной х щелкните мышью на кнопке переменной панели инструментов, после чего щелкните мышью в каком-либо
месте поля окна редактора структуры объекта Heart. Пиктограмма; появится в поле редактора с именем var. Одновременно справа вместо окна свойств объекта Heart появится окно свойств переменной (именно эта переменная сейчас выделена). В это окно в поле имени (Имя) вместо предопределенного имени var введите х (рис. 5.5) и нажмите клавишу <Enter>.
При выделенной пиктограмме переменной () ее имя можно перемещать по полю окна структуры и изменять. Саму пиктограмму переменной также можно перемещать по полю при нажатой на ней левой кнопке мыши. Кроме кнопки на панели инструментов можно также воспользоваться меню Рисование | Структура.
В модели переменная х определяется дифференциальным уравнением
dx/dt= (х — x3— b)/ eps
с начальным значением х, равным хО, и с параметром eps. В AnyLogic можно подобные зависимости задавать именно в таком аналитическом виде. Для того чтобы определить переменную х, в поле Вид окна ее свойств выберите вариант Интеграл или накопитель в выпадающем меню и опр еделите значение в этом поле в строке ниже уже установленного как
(х-х^3-b)/eps (рис. 5.5). Заметьте, что переменная, определенная как Интеграл или накопитель, в поле структуры модели будет изображаться фиолетовым прямоугольником со скругленными углами —
В поле начального значения запишите хО. Вторая переменная Ъ определяется дифференциальным уравнением db/dt=x-x0. Действия по ее введению в модель аналогичны тем, которые были сделаны ранее для переменной х. Пусть начальное значение b равно 0. В поле Начальное значение окна
свойств переменной Ь величину 0 можно не записывать: если это поле пусто, по умолчанию значение переменной считается нулевым.
Переменные активного объекта Heart можно поместить внутрь прямоуголь-ника, который отмечает границы этого объекта. Для того чтобы прямоугольник появился, в окне свойств объекта Heart внизу нужно кликнуть на флажке Отображать рамку объекта. Обычно границы активного объекта в о кне редактора нужны для того, чтобы помещать на них графические изображения интерфейсных объектов — портов или переменных — для связи
с другими активными объектами. Поскольку в нашей модели объект Heart же взаимодействует с другими объектами, такие границы можно не показы-ватъ (оставить скрытыми).
В поле окон редактора можно помещать текстовые комментарии. Для того чтобы поместить такой комментарий в окне структуры активного объекта
Heart, щелкните на кнопке Текст панели инструментов и затем, щелк-
нув в какое-нибудь место окна редактора, нарисуйте светло-желтый прямо-угольник, в котором можно записать произвольный текст-комментарий, ни-к ак не влияющий на работу модели. Размеры и место расположения этого
коментария можно менять с помощью мыши. Введите, например, куда-нибудь В поле редактора комментарий Структура активного объекта. ЕГО можно редактировать в поле Текст окна свойств этого комментария.
Для проверки правильности синтаксиса (формальных правил) модели в любой момент при ее построении можно использовать кнопку Построить I панели инструментов. Если щелкнуть на этой кнопке, то выполнится компиляция разрабатываемой модели в программный код на языке Java. Щелкните по кнопке Построить. В нашем примере обнаружились ошибки (рис. 5.6): действительно, нами не определены параметры хо и eps.
На наличие ошибки указывает появившийся символ в строке статуса
окна редактора. Если при трансляции проекта в нем найдены ошибки, то построение программы на Java не завершается, и в появившемся окне Вывод внизу экрана будет представлен список обнаруженных ошибок с информацией о них. Двойной щелчок мыши по строке, в которой указана информация об ошибке, открывает окно и место в нем, где компилятор обнаружил эту ошибку.
Для завершения построения модели указанные параметры нужно задать. Пусть хо = 0.5, eps = 0.01. Параметры эти являются параметрами активного объекта Heart, потому они вводятся в окне свойств данного объекта. Для задания хо сделайте активным окно редактора структуры объекта Heart. Появится окно Свойства этого объекта.
В данном окне для задания параметров следует щелкнуть мышью на кнопке !, расположенной под полем Параметры, либо дважды щелкнуть левой кнопкой мыши в любом месте этого поля. Появится диалог Параметры для
определении нового параметра. У него уже предопределено имя param, тип real и пустое поле с именем По умолчанию (следовательно, по умолчанию это будет вещественная переменная и ее значение будет нулевым). Замените имя параметра на хо, в поле значения установите 0.5, а тип оставьте real. Остальные поля также оставьте без изменения. При нажатии кнопки ОК этого окна в поле Параметры окна свойств нашего активного объекта Heart появится строчка Имя: хо Тип: real. Переменная eps со значением 0.01 задается так же. Снова выполните проверку синтаксиса: нажмите кнопку Построить . В результате на экране вы получите следующее — рис. 5.7.
Зеленая галочка в строке статуса внизу окна редактора свидетельствует о том, что синтаксис модели правильный.
Заметьте, что внизу под полем с именем Параметры для удобства манипули-рования в этом поле со списками параметров помещены шесть кнопок со следующей функциональностью — рис. 5.8.
Построение модели закончено. Вы можете сравнить свою модель с моделью Heart 1, помещенной в папку Model Examples\Part II.
Запуск модели
Щелкнув на кнопке запуска выполнения модели по шагам, после ком-
пиляции в окне наблюдения увидим открытым только окно root переменных и параметров с их начальными значениями (рис. 5.9).
Предопределенное имя root дано единственному экземпляру единственного корневого класса Heart. Переменные в этом дереве помечены треугольниками (b и х), а константы — кружками (eps и хО).
Запуск модели () приведет к тому, что переменные bи х в этом окне
начнут изменяться в соответствии с определенными для них уравнениями. Системы дифференциальных и алгебраических уравнений, определенные в проектах AnyLogic, при выполнении модели решаются одним из встроенных численных методов. Сам метод и необходимая точность решения выбираются системой автоматически, если пользователь не изменит предварительные установки в окне свойств объекта simulation. По умолчанию выполнение модели закончится, когда счетчик модельного времени дойдет до 100 (это условие остановки эксперимента также может быть изменено в окне свойств объекта simulations).
Проведите несколько экспериментов с различными скоростями выполнения данной модели, используя кнопки останова, рестарта, запуска.
Графики (диаграммы)
Одним из преимуществ AnyLogic является возможность наглядного представления поведения модели, в частности, представления изменения зо времени всех ее переменных. Введем графики изменения переменных х и Ь.
1. Запустите модель на выполнение по шагам или нажмите кнопку рестарта модели
2. Выберите в главном меню команду Вид | Новая диаграмма или щелкните кнопку на панели инструментов.
5. В поле окна появившегося графика перетащите из окна root переменную х, нажав на этой переменной левой кнопкой мыши.
4. Второй график постройте так: в контекстном меню переменной b (в окне root) выберите вариант Chart.
5 Введите еще один график и включите в него обе переменные поочередно.
6. Запустите модель на выполнение. В окнах будут рисоваться графики значений от времени соответствующих переменных.
Настройка параметров графиков производится с помощью окна свойств, вызываемого командой Параметры диаграммы из контекстного меню данного графика. Контекстное меню графика, как и любого объекта модели AnyLogic, вызывается щелчком правой клавишей мыши, помещенной на этом объекте. Поэкспериментируйте с установкой цвета графиков, возмож-ностью установки опций отображения каждого набора данных на своем графике, размерами отображаемого окна данных, с возможностью отображения фазовой диаграммы, когда по обеим осям графика откладываются значения переменных, и т. п.
Заметьте, что переменные и параметры нашей модели в окне Содержимое диа граммы контекстного меню любого графика имеют имена вида: <имя
объекта> И через ТОЧКУ <имя переменной в этом объекте>. Например,
ссылка на переменную х здесь записана как root.x. Это стандартный прием объектно-ориентированной разработки. Переменные х, Ъ и параметры хО и eps определены как элементы корневого объекта со стандартным именем root (см. рис. 5.9), поэтому они имеют здесь соответствующие ссылки.
Построенную к данному моменту модель можно сравнить с эталонной моделью Heart2 в папке Model Examples\Part II. Проведите серию экспериментов с моделью, перезапуская ее с различными параметрами.
Изменять параметр, как уже говорилось, можно в окне этого параметра, появляющемся в результате двойного клика на нем в окне root или при выборе команды Изменить контекстного меню данного параметра (рис. 5.10).
Эксперименты
Вернитесь в редактор, разрушив скомпилированную модель (кнопкой ). Дважды щелкнув на объекте simulation окна классов проекта, в окне Свойства вы можете увидеть (и при необходимости изменить) начальные установки компьютерного имитационного эксперимента, который можно выполнить с построенной моделью. На вкладке Общие этого окна можно выбрать общие установки — вариант выполнения модели либо в виртуальном времени, либо в реальном времени (с заданным соотношением модельного и физического времени), а также изменить именно для этого эксперимента параметры модели. На вкладке Дополнительные можно установить условие прекращения выполнения модели, выбрать численный метод решения системы обыкновенных дифференциальных уравнений и его параметры. По умолчанию метод будет выбираться автоматически на основе анализа системы уравнений.
Пользователь может сгенерировать несколько экспериментов различных типов, которые можно выполнить с одной и той же моделью. Щелкните на
кнопке панели инструментов или выберите команду Новый эксперимент
а контекстном меню объекта Эксперименты. В появившемся окне можно зыбрать любой из доступных типов экспериментов: Простой эксперимент, Оптимизационный эксперимент и т. п. Более подробно вопросы проведения различных типов экспериментов мы рассмотрим позже.
Анимация модели
Для лучшего понимания динамики модели и наблюдения развивающихся во зремени процессов, в AnyLogic предусмотрена возможность построения анимированного изображения, состоящего из динамических графических элементов. Графичесие элементы здесь называются динамическими, поскольку все их параметры — координаты, размер, цвет и даже их видимость — в процессе выполнения модели можно сделать зависимыми от переменных и параметров, которые меняются со временем при выполнении модели.
Зернитесь в редактор, разрушив скомпилированную модель и, щелкнув правой кнопкой мыши в окне классов на имени Heart в дереве проекта, выбегите в появившемся контекстном меню этого объекта левой кнопкой мыши команду Новая анимация. После щелчка по кнопке ОК в появившемся диа-логе, в окне редактора появится окно анимации (рис. 5.11). Заметьте, что этот объект появился с именем animation в дереве проекта как составная часть класса Heart. Если окно анимации будет закрыто, открыть его можно двойным щелчком мыши по этому имени в окне классов или выбором команды Открыть в его контекстном меню.
Окно анимации представляет собой плоскость с системой координат (X, Y) с шагом нанесенной сетки 10 пикселов. Так же, как единицу модельного времени можно считать любым интервалом реального времени, размер одного пиксела в окне анимации можно ассоциировать с любой единицей длины. Начало координат и их направления отмечены голубыми стрелками вцентре поля; эти стрелки не будут видны при анимации. Заметьте, что ось Yнаправлена вниз, хотя ее можно направить вверх установкой флажка в по-ле Перевернуть ось Y окна свойств анимации.
Штриховой прямоугольник на поле показывает рамку — ту часть поля анимации, которая будет видима при работе модели. Размещение рамки относительно начала координат так же, как и его размеры, можно изменять. Выделите границу рамки (штриховую линию), щелкнув на ней левой кнопкой мыши, и в появившемся окне свойств рамки установите следующие значе-ния координат: X — -300 и Y = -200. Это координаты левого верхнего угла замки относительно ее начала координат. Ширину и высоту рамки устано-вите равными 600 и 400 в соответствующих полях окна ее свойств. Этого же положения и размеров можно добиться манипуляциями с рамкой как с обычным графическим объектом (изменением ее размеров и положения) с помощью мыши.
Объекты в поле анимации
Будем строить анимацию динамики работы сердечной мышцы как изображения круга (овала), радиус которого будет меняться. Этот радиус является функцией от значения переменной х модели. Во-первых, построим изображение овала. Для этого, щелкнув мышью на панели инструментов по кнопке Овал , нарисуем в любом месте поля анимации какой-нибудь овал. Справа появится окно Свойства этого овала. Свойства овала уже установлены по умолчанию, и мы можем их редактировать. По умолчанию имя этого объекта будет oval, координаты Х и Y соответствуют месту, куда мы поместили овал в поле анимации, а ширина и высота соответствуют тому, что мы нарисовали.