ЛБ4. Модель банковского отделения. Шаг 1. Создание простой модели
.pdf1.Добавьте объект Service. Этот объект захватывает для заявки заданное количество ресурсов, задерживает заявку, а затем освобождает захваченные ею ресурсы. В нашей модели этот обхект будет моделировать обслуживание клиента кассиром (или каким-то другим служащим банковского отделения).
2.Чтобы добавить объект Основной библиотеки на диаграмму класса активного объекта, вначале откройте одноименную палитру этой библиотеки (Основная библиотека), а затем перетащите нужный Вам объект из палитры в то место диаграммы, куда Вы хотите его поместить.
3.Измените свойства объекта:
Ко всем кассирам будет вести одна общая очередь. Задайте максимальное количсевто человек в этой очереди в поле Вместимость очереди: 20.
Мы полагаем, что время обслуживания имеет треугольное распределение с минимальным значением равным 2.5, средним - 6, и максимальным - 11 минутам. Введите в поле Время задержки:triangular( 2.5, 6, 11 )
4.Добавьте объект ResourcePool. Объект ResourcePool задает ресурсы определенного типа (в нашей модели это будут банковские клерки).
5. Назовите объект tellers. Задайте число кассиров в поле Количество ресурсов: 4
6.Удалите соедиинитель между объектами Source и Queue и добавьте на его место
объект SelectOutput. ОбъектSelectOutput является блоком принятия решения. В зависимости от заданного Вами условия, заявка, поступившая в объект, будет поступать на один из двух выходных портов объекта.
Оставьте все свойства объекта без изменений. Пусть Выход true выбирается С заданной вероятностью, аВероятность [0..1] равна 0.5. В этом случае к кассирам и банкомату будет приходить примерно равное количество клиентов.
Соедините блоки диаграммы процесса
1. Соедините блоки диаграммы процесса, как показано на рисунке:
2. Чтобы соединить порты блоков друг с другом, сделайте двойной щелчок мышью по одному порту, затем последовательно щелкните в тех местах диаграммы, где Вы хотите поместить точки изгиба соединителя, и наконец завершите процесс соединения, сделав двойной щелчок мышью по второму порту.
Вы увидите, что появится соединитель. Если выделить его мышью, то в том случае, если Вы правильно соедините порты, конечные точки соединителя должны будут подсветиться зелеными точками. Если Вы не увидите этого, то значит, точки не были помещены точно внутрь портов, и их нужно будет туда передвинуть.
3.Вы можете заметить, что большинство установленных нами соединений - это соединения порта, расположенного на правой стороне объекта с портом, расположенного на левой стороне следующего за ним объекта. Это связано с тем, что в диаграмме процесса выходные порты объектов соединяются со входными, а обычно входные порты располагаются на левой границе библиотечного объекта, а выходные - на правой. Исключение в нашем случае пока будет только одно - мы соединяем нижний порт объекта service с верхним портом объекта tellers - именно так должны подсоединяться объекты, задающие ресурсы, к объектам, моделирующим занятие и освобождение этих ресурсов.
Поскольку наша модель изменилась, мы должны изменить и ее анимацию.
Измените анимацию модели
1.Нарисуйте ломаную, которая будет отображать очередь клиентов, ожидающих обслуживания кассирами. Рисуйте ее, как и раньше, слева направо. Назовите ломаную queueBeforeTellers.
2.Справа от этой ломаной нарисуйте еще одну, из четырех точек, чтобы указать на анимации места, в которых будут находиться банковские служащие. Назовите эту ломаную tellerPlaces.
Теперь мы нарисуем на презентации кассиров. Мы будем отображать их одной из двух картинок - одна будет показывать занятого кассира, а другая - свободного.
Добавьте картинки с изображением клерков
1.Перетащите элемент Изображение из палитры Презентация в место диаграммы, показанное на рисунке синим прямоугольником:
2.Перейдите в панель Свойства. Введите в поле Имя новое имя этого изображения: busyTeller.
3.Выберите файл изображения, которое будет отображать данная фигура. Щелкните мышью по кнопке Добавить и выберите файл busy.png. Вы можете найти этот файл в каталоге <каталог
AnyLogic>\resources\tutorials\Bank Office.
Когда Вы выберете файл, Вы увидите его в области предпросмотра в панели Свойства.
4.Чтобы сохранить исходный размер изображения, установите флажок Исходный размер (в этом случае Вы не сможете изменить размер изображения, и оно будет отображаться в оригинальном масштабе, без искажений.
5.Аналогично создайте еще одно изображение, показывающее отдыхающего клерка. Назовите
фигуру idleTeller и выберите в качестве отображаемого файла idle.png (из того же каталога, что и чуть ранее).
Теперь нам нужно изменить анимационные свойства блоков нашей диаграммы процесса, задав нарисованные нами фигуры в качестве соответствующих фигур анимаций объектов.
Измените анимационные свойства блоков диаграммы процесса
1.Задайте нарисованную нами ломаную queueBeforeTellers в качестве фигуры анимации очереди объекта service. Для этого измените свойства этого объекта следующим образом:
oВведите queueBeforeTellers (имя ломаной, задающей форму очереди, ведущей к кассирам) в
полеФигура анимации (queue)
2.Чтобы наши клерки отображались на анимации с помощью добавленных нами картинок, задайте следующие свойства объекта tellers:
oВ поле Фигура анимации введите имя ломаной, задающей местоположение кассиров на презентации:tellerPlaces
o Выберите Набор из выпадающего списка Тип анимации
oВ поле Фигура анимации свободного ресурса введите имя изображения свободного клерка:idleTeller
o В поле Фигура анимации занятого ресурса введите busyTeller
В текущей модели количество клерков, присутствующих в банковском отделении, не изменяется и всегда равно заданному значению. Давайте сделаем так, чтобы у нас была возможность динамически изменять их количество во время моделирования. Такую задачу можно решить с
помощью элементов управления AnyLogic.
Добавьте на презентацию специальный элемент управления - бегунок, часто используемый для изменения значения численной переменной или параметра. В нашем случае мы будем изменять с его помощью количество клерков в нашей модели, проверяя, какое количество будет оптимально удовлетворять текущей интенсивности прихода клиентов в банковское отделение.
Добавьте бегунок, с помощью которого Вы сможете изменять количество клерков
1.Элементы управления добавляются на диаграмму так же, как и фигуры презентации. Откройте палитру Элементы управления и перетащите элемент Бегунок из палитры на диаграмму класса Main.
2.Поместите бегунок под объектом ResourcePool, чтобы было понятно, что с помощью этого бегунка будет меняться количество ресурсов, задаваемых именно этим объектом.
3.Мы хотим дать возможность пользователю варьировать количество клерков от 0 до 4. Поэтому введите 4 в поле Максимальное значение.
4.Введите tellers.capacity в поле Переменная.
Запустите модель. Вы увидите, что клерки отображаются одной из двух наших картинок, в зависимости от того, заняты ли они в текущий момент времени. Таким образом, с помощью созданной анимации Вы сможете проследить, сколько кассиров в данный момент времени занято обслуживанием клиентов.
Вы можете изменять количество клерков с помощью бегунка. Теперь, изменяя количество кассиров во время работы модели, Вы можете сделать вывод о том, сколько служащих необходимо для нормальной работы банковского отделения при заданной интенсивности прихода клиентов.
Шаг 5. Сбор статистики по времени обслуживания
Мы хотим знать, сколько времени клиент проводит в банковском отделении и сколько времени он теряет, ожидая своей очереди. Мы соберем эту статистику с помощью специальных объектов сбора данных и отобразим собранную статистику распределения времен обслуживания клиентов с помощью гистограмм.
Теперь мы создадим Java класс Customer. Экземпляры этого класса будут испольоваться в нашей модели в качестве заявок и будут представлять клиентов банковского отделения. Мы создадим в этом классе специальные поля для запоминания необходимой нам информации о проведенном клиентом времени.
Создайте Java класс Customer
1.В панели Проекты, щелкните правой кнопкой мыши по элементу модели и выберите Создать|Java класс из контекстного меню.
2.Появится диалоговое окно Новый Java класс. В поле Имя введите имя нового класса: Customer.
3.Сделайте так, что этот класс будет наследоваться от базового класса заявки Entity. Для этого выберите из выпадающего списка Базовый класс имя этого класса: Entity.
3.Щелкните мышью по кнопке Далее, чтобы перейти к следующей странице Мастера создания Java класса. На второй странице Мастера Вы можете задать параметры создаваемого Java
класса. Создайте два параметра:
oenteredSystem типа double для сохранения момента времени, когда клиент пришел в банковское отделение,
o startWaiting типа double для сохранения момента времени, когда клиент встал в очередь к банкомату.
4.Щелкните мышью по кнопке Готово. Вы увидите редактор кода созданного класса. Можете закрыть его, щелкнув мышью по крестику в закладке с его названием.