close

Вход

Забыли?

вход по аккаунту

?

ЛРNo.4 (2)

код для вставкиСкачать
Лабораторная работа №4
Дискретно-событийные модели. Цель работы: Построение модели отделения больницы в среде Anylogic с использованием сетевых ресурсов и компонентов Enterprise Library.
1. Общие сведения
Эта модель будет создаваться с помощью объектов Enterprise Library для моделирования транспортных сетей (названия этих объектов начинаются с Network). Обычно они используются тогда, когда для моделируемых процессов имеет значение физическое расположение объектов в пространстве. В таких моделях заявки движутся по заданным путям и используют ресурсы, находящиеся в сети.
2. Постановка задачи
Целью модели будет анализ работы отделения и оптимальности имеющих в нем место процессов обслуживания пациентов - с учетом точных времен как проведения процедур осмотра пациентов, так и передвижений пациентов и персонала больницы по отделению. Чтобы времена передвижения людей по отделению соответствовали реальным, требуется добавить в модель план отделения (физического расположения комнат), нарисовать пути движения людей между комнатами, задать им скорости передвижения и соответственно время, затрачиваемое пациентом или врачом на достижение той или иной комнаты будет зависеть от реальной длины пути, который нужно будет пройти. Так же должны выполняться следующие условия:
1. Пациент, прибывающий в отделение, вначале направляется в приемный покой. Там он дожидается прихода врача, который должен провести его осмотр. 2. Процедура проводится в одной из трех процедурных комнат. Когда за пациентом прибывает доктор, они отправляются в свободную процедурную комнату. Если все процедурные комнаты оказываются занятыми, то пациент ждет в приемном покое, пока какая-нибудь из комнат не освободится. 3. Врач осматривает пациента с помощью офтальмоскопа, который он специально приносит из комнаты хранения инструментов перед тем, как проследовать к пациенту. 4. После проведения процедуры врач относит офтальмоскоп обратно и отправляется в ординаторскую, а пациент покидает отделение офтальмологии. 3. Ход работы
Создание новой модели.
Вначале мы создадим новую модель. Щелкните мышью по кнопке панели инструментов Создать. Появится окно Мастера создания модели. Задайте имя новой модели. В поле Имя модели введите Ophthalmology Department.
Рис. 1 Создание новой модели
Создание анимационной модели.
Первым делом требуется нарисовать анимацию модели, поскольку именно она будет определять структуру модели - ее транспортную сеть. Добавим изображение плана отделения, чтобы потом рисовать узлы транспортной сети модели (соответствующие комнатам отделения) и сегменты транспортной сети (то есть, пути движения людей по отделению) уже поверх этого плана. Откройте закладку Презентация панели Палитра. Палитра Презентация содержит элементы, используемые для рисования презентаций моделей: фигуры, с помощью которых Вы можете рисовать сложные презентации, а также элементы управления, с помощью которых Вы можете сделать Ваши презентации интерактивными. Перетащите элемент Изображение из палитры Презентация на диаграмму класса активного объекта. Поместите его так, как показано на рисунке 2.
Рис. 2 Добавление элемента Изображение
Задайте свойства изображения в панели Свойства. Щелкните мышью по кнопке Добавить и выберите файл изображения плана отделения. Файл находится в каталоге <каталог AnyLogic>\resources\tutorials\Ophthalmology Department\layout.png
Рис. 3 Добавление изображения плана отделения больницы.
Чтобы сохранить исходный размер изображения, установите флажок Исходный размер. Заблокируйте изображение, установив флажок Блокировать. Вы не сможете выбрать заблокированную фигуру в графическом редакторе до тех пор, пока Вы не снимете с нее блокировку. Мы делаем так потому, что мы будем рисовать другие фигуры поверх этого изображения, и поэтому мы хотим исключить возможность случайного редактирования изображения при рисовании этих фигур. Изображение должно будет выглядеть как показано на рисунке 4.
Рис. 4 План отделения больницы.
Теперь мы нарисуем анимацию модели. На основе анимации строится транспортная сеть модели: прямоугольники соответствуют узлам сети, а ломаные линии - связям между ними, играющим роль путей движения заявок и ресурсов в моделируемом пространстве. Поэтому, чтобы создать требуемую транспортную сеть, мы должны нарисовать на анимации помещения нашего отделения с помощью прямоугольников и соединить их ломаными линиями. Нарисуйте каждую комнату отделения с помощью прямоугольника. Отделение офтальмологии включает в себя приемный покой, три процедурные, комнату хранения офтальмоскопов и комнату для персонала. На приведенном ниже рисунке нарисованы и подписаны прямоугольники, которые требуется нарисовать. Назовите прямоугольники именно так, как показано на рисунке. Это важно, потому что в дальнейшем мы будем ссылаться на ключевые области нашего отделения именно по именам соответствующих прямоугольников. Рис. 5 Добавление узлов сети
Чтобы нарисовать прямоугольник, сделайте двойной щелчок мышью по элементу Прямоугольник в палитре. Затем щелкните мышью в том месте диаграммы, где Вы хотите нарисовать прямоугольник, и передвиньте ее, не отпуская кнопки, пока контур создаваемого прямоугольника не примет желаемый размер, после чего отпустите кнопку мыши. Чтобы облегчить рисование фигур нужного Вам размера, выключите привязку фигур к сетке диаграммы, щелкнув по кнопке панели инструментов Включить/Отключить сетку. Прямоугольники в нашей модели используются для задания следующих областей:
* приемный покой - waitingHall * комната для персонала - procRoom1, procRoom2, procRoom3 * комната хранения офтальмоскопов - storageRoom * процедурные комнаты - staffRoom Чтобы сделать пути движения людей на анимации более реалистичными, добавьте дополнительные узлы сети, нарисовав еще несколько прямоугольников и поместив их так, как показано на приведенном ниже рисунке 6: Рис. 6 Добавление дополнительных узлов сети.
Теперь мы нарисуем сегменты сети с помощью ломаных линий. Эти линии будут задавать пути движения пациентов и персонала больницы. С помощью инструмента рисования Ломаная, нарисуйте ломаные линии, как показано на рисунке ниже. Соедините соседние узлы сети - тем самым Вы зададите требуемую транспортную сеть модели: Рис. 7 Добавление путей сети.
Чтобы нарисовать ломаную, сделайте двойной щелчок мышью по элементу Ломаная в палитре. Чтобы завершить рисование, добавьте последнюю точку ломаной двойным щелчком мыши. Все начальные и конечные точки линий должны обязательно находиться внутри соединяемых прямоугольников (и в одном прямоугольнике не может находиться более одной точки одной и той же ломаной). Добавьте все нарисованные фигуры в группу фигур. Вначале выберите эти фигуры. Когда Вы выделите все фигуры, сделайте щелчок правой кнопкой мыши по выделенным фигурам и выберите Создать группу из контекстного меню. Рис. 8 Добавление элементов в группу.
Зададим местоположение процедурных комнат. Для этого нарисуйте ломаную линию, соединяющую прямоугольники, представляющие собой процедурные комнаты. Она понадобится нам чуть позже. Поместите точки ломаной точно внутрь прямоугольников procRoom1, procRoom2 и procRoom3. Рис. 9 Соединение процедурных комнат
Назовите ее roomsLocation и выберите для нее другой цвет. Сделайте ломаную невидимой во время выполнения модели. Перейдите на страницу Динамические панели свойств ломаной и введите false в поле Видимость. Анимация ресурсов
Теперь мы нарисуем анимацию для нашего пациента, врача и офтальмоскопа, чтобы мы могли отличать их на анимации нашей модели.
Создайте изображения врача и пациента. Вы можете либо сами нарисовать фигурку врача, либо использовать одну из стандартных картинок, поставляемых вместе с AnyLogic. Мы выбираем второй подход, как наиболее легкий. Откройте палитру Картинки. Эта палитра содержит набор картинок, которые наиболее часто используются пользователями AnyLogic при создании моделей. Перетащите элемент Врач из палитры на диаграмму графического редактора. По умолчанию эта картинка будет называться doctor. Оставьте ее название без изменений, поскольку в дальнейшем мы будем ссылаться на нее в блоке диаграммы нашего процесса именно по этому имени. Перетащите элемент Пациент из палитры на диаграмму графического редактора. Имя оставьте так же без изменений. Рис. 10 Добавление изображений врача и пациента.
Нарисуйте офтальмоскоп, как показано на рисунке ниже:
Рис. 11 Добавление изображения офтальмоскопа
Чтобы Вам было удобнее рисовать маленькую картинку, увеличьте масштаб диаграммы графического редактора с помощью специального элемента на панели инструментов.
Проще будет нарисовать фигурку с помощью элемента Ломаная. Необязательно соединять на диаграмме начальную точку ломаной с конечной. Перейдите на страницу Основные панели свойств ломаной и установите флажок Замкнутая. Начальная и конечная точки ломаной будут автоматически соединены замыкающим отрезком. Теперь, чтобы закрасить фигуру цветом, выберите любой понравившийся Вам цвет с помощью элемента управления Цвет заливки. Этим цветом будет закрашена область, находящаяся внутри контура ломаной. Назовите фигуру scope. Чтобы картинки ресурсов не попали в область презентации, которая будет видна после запуска Вашей модели, передвиньте их за границы области презентации, которая будет отображаться в окне презентации запущенной модели. Мы закончили создание презентации нашей модели. Теперь мы можем изменить настройки сети и задать процесс с помощью диаграммы процесса, составляемой из блоков моделирования транспортных сетей Enterprise Library.
Задание сети и ресурсов.
Теперь мы изменим свойства объекта, описывающего сеть, и добавим объекты, задающие имеющиеся в нашей модели ресурсы. Задайте свойства сети. Добавьте на диаграмму объект Network из палитры Enterprise Library. Этот объект задает транспортную сеть модели и ее свойства. В параметре Группа фигур сети введите имя группы фигур анимации: group. Этот параметр позволяет указать этому объекту Network, какие именно фигуры анимации задают логическую структуру задаваемой этим объектом сети. Проверьте, называется ли группа Ваших фигур (в которую Вы добавили нарисованные ранее прямоугольники и соединяющие их ломаные, представляющие узлы и сегменты сети) group, и если нет - то введите здесь ее действительное имя.
Теперь мы добавим объекты, задающие сетевые ресурсы. Сетевые ресурсы могут быть трех видов: движущиеся, переносные и статические. В нашем случае врачи будут заданы движущимися ресурсами, офтальмоскопы - портативными ресурсами, а процедурные комнаты - статическими. Задайте ресурсы типа "врач". Добавьте на диаграмму класса Main объект библиотеки Enterprise Library NetworkResourcePool. Объект NetworkResourcePool описывает ресурсы определенного типа. Этот объект будет задавать свойства ресурсов, представляющих в нашей модели врачей.
Задайте следующие свойства объекта:
* Назовите объект doctors. * Укажите, сколько врачей будет присутствовать в Вашей модели. Введите в поле Количество ресурсов: 5. * Задайте базовое местонахождение ресурсов. Движущиеся ресурсы возвращаются в заданное здесь место, когда они становятся свободными. В нашей модели все врачи должны возвращаться в общую ординаторскую, поэтому оставьте выбранным в поле Базовое местоположение задается как опцию Один узел и введите в поле Базовый узел имя прямоугольника, который представляет на анимации ординаторскую: staffRooom. * Укажите, какой фигуркой Вы хотите отображать врача на анимации. Введите имя добавленной нами ранее картинки врача doctor в полях Фигура анимации свободного ресурса и Фигура анимации занятого ресурса. Рис. 12 Задание свойств ресурса типа "врач".
Задайте ресурсы типа "процедурная комната". Добавьте еще один объект NetworkResourcePool. Этот объект будет задавать свойства ресурсов, представляющих в нашей модели процедурные комнаты. Задайте следующие свойства объекта:
* Назовите объект procRooms. * Измените Тип ресурса на Статический. * Задайте местоположение комнат. Статические ресурсы всегда находятся в месте, указанном как базовое. Вы можете задать несколько таких мест, для этого нужно нарисовать ломаную линию с точками, лежащими в соответствующих прямоугольниках и указать ее в свойствах объекта. Поскольку в нашей модели три таких комнаты, то мы должны воспользоваться именно этим способом. Для этого выберите Путь через узлы из выпадающего списка Базовое местоположение задается как и введите в поле Путь через узлы имя созданной ранее именно для этой цели ломаной: roomsLocation. * Укажите, что количество ресурсов, задаваемое этим объектом, равно количесвту точек указанной ломаной. Для этого выберите из группы кнопок Количество задано опцию Фигурой базового местоположения. Рис. 13 Задание свойств ресурса типа "процедурная комната".
Задайте ресурсы типа "офтальмоскоп". Аналогично добавьте еще один объект NetworkResourcePool. Этот объект будет задавать свойства ресурсов, представляющих в нашей модели офтальмоскопы. Задайте следующие свойства объекта:
* Назовите объект scopes. * Измените Тип ресурса на Переносной. * Задайте количество офтальмоскопов - введите в поле Количество ресурсов: 5. * Задайте базовое местоположение ресурсов. Статические ресурсы будут помещены в указанный узел сети при запуске модели. Оставьте без изменения параметр Базовое местоположение задается как и введите в поле Базовый узел имя прямоугольника, задающего в нашей модели комнату хранения оборудования: storageRooom. * Укажите, какой фигурой Вы хотите отображать офтальмоскоп на анимации. Введите имя нарисованной нами ранее фигуры scope в полях Фигура анимации свободного ресурса и Фигура анимации занятого ресурса. Рис. 14 Задание свойств ресурса типа "офтальмоскоп".
Соедините все объекты NetworkResourcePool с объектом Network. Чтобы добавить заданные ресурсы в нашу сеть, Вам нужно соединить порты объектов NetworkResourcePool с портом объекта Network. Соедините их, как показано на показанном ниже рисунке:
Рис. 15 Соединение ресурсов с сетью
Чтобы соединить порты объектов, сделайте двойной щелчок мышью по одному порту, затем при желании щелкните в тех местах диаграммы, где Вы хотите добавить точку изгиба соединителя, и завершите создание, сделав двойной щелчок мышью по второму порту. Диаграмма процесса Теперь мы закончим создание простейшей модели, в которой пациенты, прибывающие на отделение, вначале направляются в приемный покой, а затем следуют в процедурную комнату, где проводится процедура офтальмоскопии. После ее проведения они покидают отделение. Создайте следующую диаграмму процесса, добавив на диаграмму класса Main новые блоки Enterprise Library и соединив их так, как показано на рисунке ниже: Рис. 16 Добавление диаграммы процессов
Эта диаграмма будет описывать моделируемый нами процесс. Поменяем свойства всех объектов по порядку:
Измените свойства объекта source. В поле Интенсивность прибытия задайте интенсивность поступления пациентов на отделение: 0.05. В поле Фигура анимации заявки введите имя ранее добавленной нами фигурки пациента: patient.
Измените свойства объекта NetworkEnter. Этот объект добавляет заявки в заданное место сети, в нашем случае мы хотим, чтобы он помещал пациентов в приемный покой. Введите waitingHall в поле Узел входа. Здесь waitingHall - это имя ранее нарисованного нами прямоугольника, который располагается на плане отделения прямо поверх приемного покоя. Заявки-пациенты будут прибывать в указанный узел сети, задающий в нашей модели приемный покой. В поле Сеть Вы можете увидеть введенное Мастером создания модели имя объекта network. Именно в сеть, заданную этим объектом, и будут помещаться заявки этим блоком. Измените свойства объекта networkMoveTo. Введите в поле Узел procRoom1. Пациенты будут перемещаться в указанный Вами узел сети. На данный момент все пациенты будут осматриваться в первой процедурной комнате. Рис. 17 Изменение свойства объекта networkMoveTo.
Измените свойства объекта delay . В поле Вместимость введите 5. Этот параметр определяет, как много пациентов сможет быть осмотрено одновременно. Рис. 18 Изменение свойств объекта delay.
Измените свойства объекта networkMoveTo. Мы хотим, чтобы этот объект перемещал пациентов в указанный нами узел сети. Введите в поле Узел exit (имя прямоугольника, который задает выход из отделения). Объект NetworkExit удаляет заявку из сети. Заявка при этом перестает отображаться на анимации сети. В нашем случае он моделирует уход пациентов из отделения. Оставьте свойства объекта NetworkExit без изменений. Объект Sink уничтожает поступившие заявки. Обычно он используется в качестве конечной точки диаграммы процесса. Оставьте свойства объекта Sink без изменений.
Занятие процедурной комнаты
На данный момент все пациенты осматриваются только в первой процедурной комнате. Более того, несколько пациентов осматриваются в одной комнате одновременно. Сейчас мы улучшим нашу модель, задав процедурные комнаты статическими ресурсами. Пациенты будут теперь осматриваться в любой из трех процедурных комнат. На время проведения процедуры комната будет занята, так что никто другой не сможет быть осмотрен в ней в то же время. Измените диаграмму процесса. Добавьте в диаграмму процесса объект NetworkSeize. Объект NetworkSeize занимает (захватывает) для заявки заданное количество сетевых ресурсов. Мы добавляем этот объект для того, чтобы смоделировать то, как пациент занимает процедурную комнату (заданную в нашей модели статическим ресурсом). Рис. 19 Добавление объекта NetworkSeize.
Задайте следующие свойства объекта:
В поле Список ресурсов {pool1, ...} введите список ресурсов, которые мы хотим занять с помощью этого блока. Список составляется следующим образом: Вы перечисляете имена объектов типа NetworkResourcePool, которые задают те ресурсы, которые будут захватываться данным блоком. Имена объектов пишутся через запятую, а весь список заключается в фигурные скобки. Рис. 20 Изменение свойств объекта NetworkSeize.
Измените свойства объекта moveToProcRoom. Мы хотим, чтобы этот блок перемещал пациентов не в первую процедурную комнату, а в ту комнату, которая была ранее выделена для этого пациента. Задайте следующие свойства объекта:
* Укажите место, в которое этот блок будет перемещать пациентов. Поскольку нам нужно, чтобы пациенты переходили в занятую комнату, то выберите в параметре Отсылать ресурсы опцию К захваченному ресурсу. * Укажите имя захваченного ресурса, к которому будут перемещаться пациенты. Введите procRooms в поле Ресурс. Рис. 21 Изменение свойств объекта moveToProcRoom.
Добавьте в диаграмму процесса объект NetworkRelease. Этот объект освобождает ранее захваченные сетевые ресурсы. С помощью этого блока мы будем освобождать процедурные комнаты после проведения офтальмоскопии для того, чтобы там смогли быть осмотрены и другие пациенты. Рис. 22 Добавление объекта NetworkRelease.
Задайте следующие свойства объекта: Нам нужно указать, какие ресурсы должен освобождать этот блок. На данный момент мы можем просто выбрать опцию Все захваченные ресурсы. Запустите модель. Теперь пациенты осматриваются в любой из трех процедурных комнат. Моделирование вызова врача
Теперь мы закончим создание нашей модели, промоделировав вызов офтальмолога для проведения процедуры офтальмоскопии. По пути к пациенту, ожидающему в приемном покое, офтальмолог забирает офтальмоскоп из комнаты хранения оборудования. Затем он сопровождает пациента в свободную процедурную комнату. Там он проводит осмотр пациента, после чего относит офтальмоскоп в комнату хранения и возвращается в ординаторскую, а пациент покидает отделение.
Измените диаграмму процесса. Измените свойства объекта networkSeize. С помощью этого объекта мы хотим моделировать вызов доктора (с точки зрения сетевых ресурсов этот блок должен теперь захватывать помимо статического ресурса процедурной комнаты еще и движущийся ресурс типа "врач" и переносной типа "офтальмоскоп"). Введите {procRooms, doctors, scopes} в поле Список ресурсов {pool1, ...}. Теперь этот блок будет захватывать не один, а три ресурса трех разных типов. Рис. 23 Изменение свойств NetworkSeize.
Измените диаграмму процесса. Вставьте новые объекты, как показано на рисунке: Рис. 24 Добавление элементов на диаграмму процессов.
Измените свойства первого добавленного нами объекта типа NetworkSendTo (названного на рисунке с диаграммой процесса sendToStorage). В нашем случае мы хотим отослать захваченные ресурсы (а именно - врача) в комнату хранения оборудования для того, чтобы взять там свой офтальмоскоп Задайте следующие свойства объекта:
* Назовите объект sendToStorage. * В поле Список ресурсов {pool1, ...} укажите, какие именно ресурсы Вы хотите перемещать с помощью этого блока. Введите здесь {doctors}. * Выберите опцию К захваченному ресурсу, чтобы ресурсы перемещались к захваченному ранее ресурсу (в нашем случае - офтальмоскопу). * Укажите имя ресурса, к которому будут перемещаться ресурсы. Введите в поле Ресурс имя объекта, задающего ресурс типа "офтальмоскоп": scopes. Рис. 25 Изменение свойств объекта NetworkSendTo.
Измените свойства следующего объекта типа NetworkSendTo, названного на рисунке с диаграммой процесса sendToPatient). Этот блок моделирует перемещение врача с офтальмоскопом к пациенту, ждущему в приемном покое. Задайте следующие свойства объекта:
* Назовите объект sendToPatient. * Задайте список ресурсов, которые этот объект будет перемещать. Введите {doctors, scopes} в поле Список ресурсов {pool1, ...} * В параметре Отсылать ресурсы выберите опцию К заявке. Тем самым мы задаем в качестве адреса движения ресурсов местоположение занявшей их заявки. Измените свойства объекта NetworkAttach. Этот блок присоединяет указанные сетевые ресурса к этой заявке. В результате присоединения они будет перемещаться вместе с заявкой (сопровождать ее в виде "эскорта") до тех пор, пока они не будут отсоединены от этой заявки или освобождены. С помощью этого блока мы присоединим ресурсы врача и офтальмоскопа к заявке-пациенту, так что при перемещении пациента в процедурную комнату перемещаться будут все вместе. Задайте следующие свойства объекта:
* В параметре Присоединять выберите опцию Все захваченные ресурсы в месте нахождения заявки. Рис. 26 Изменение свойства объекта NetworkAttach
Измените свойства объекта NetworkDetach. Этот блок отсоединяет от заявки ранее захваченные и присоединенные нестатические сетевые ресурсы. Нам нужен этот блок для того, чтобы после проведения процедуры офтальмоскопии пациент мог покинуть отделение, а врач мог отнести офтальмоскоп на место и перейти к осмотру следующего пациента или вернуться в ординаторскую. Задайте следующие свойства объекта:
* Выберите опцию Все присоединенные ресурсы. Измените свойства объекта типа NetworkSendTo (последнего, который был добавлен на диаграмму). С помощью этого блока мы хотим промоделировать то, как врач возвращает офтальмоскоп в комнату хранения инструментов после проведения процедуры осмотра пациента. Задайте следующие свойства объекта:
* Назовите объект returnScope. * Задайте список ресурсов, которые этот объект будет перемещать. Введите {doctors, scopes} в поле Список ресурсов {pool1, ...}. * В параметре Отсылать ресурсы выберите опцию В заданный узел. * Укажите имя узла, куда будут перемещаться ресурсы. Введите storageRoom в поле Узел. Рис. 27 Измените свойства объекта типа NetworkSendTo
Мы закончили создание простейшей модели отделения офтальмологии. Запустите модель. Теперь Вы можете увидеть, что для проведения офтальмоскопии вызывается врач вместе с офтальмоскопом.
Рис. 28 Запуск модели
Контрольное задание
Типовые контрольные задания можно найти в практикуме по моделированию систем Б.Я. Советов, С.А. Яковлев.
Содержание отчета по контрольному заданию должно включать:
1.Описание объекта моделирования;
2.Структурная схема процесса;
3.Принципиальная схема модели;
4.Логическая схема моделирующего алгоритма процесса;
5.Отчет о прогоне модели;
6.Статистика;
7.Варьируемый эксперимент;
8.Анализ результатов;
9.MyEntity. Java - класс заявки;
10.Вывод;
11.Список литературы.
Документ
Категория
Без категории
Просмотров
14
Размер файла
590 Кб
Теги
лрno
1/--страниц
Пожаловаться на содержимое документа