Задание к лабораторной работе
Построим с помощью элементов библиотеки Enterprise Library модель простой системы массового обслуживания – модель банковского отделения.
В банковском отделении находятся банкомат и стойки банковских касси- ров, которые предназначены для быстрого и эффективного обслуживания посе- тителей банка. Операции с наличностью клиенты банка производят с помощью банкомата, а более сложные операции, такие как оплата счетов, – с помощью кассиров.
Необходимо произвести оценку затрат операций и определить, сколько денег тратится на обслуживание одного клиента и какую часть этой суммы составляют накладные расходы на оплату работы персонала банка, а какую – на обслуживание посетителей.
1. Создание нового проекта.
Создайте новую модель. Переименуйте класс Main в Model. В свойствах эксперимента Simulation задайте выполнение модели в режиме реального вре- мени с выполнением одной единицы модельного времени в одну секунду. В этой модели под единицей модельного времени мы будем понимать одну мину- ту работы банковского отделения.
2. Создание блок-схемы.
Создайте блок-схему модели, которая пока будет состоять только из бан- комата. Для этого перетащите в окно структуры элементы библиотеки Enterprise Library и соедините их так, как показано на рис. 6.
Объект source генерирует заявки (entities) определенного типа через за- данный временной интервал. Заявки представляют собой объекты, которые производятся, обрабатываются, обслуживаются или еще каким-нибудь образом подвергаются воздействию моделируемого процесса: это могут быть клиенты в системе обслуживания, детали в модели производства, документы в модели до- кументооборота и др. В нашем примере заявками будут посетители банка, а объект source будет моделировать их приход в банковское отделение.
Рис. 6
Объект queue моделирует очередь клиентов, ожидающих обслуживания. Объект delay моделирует задержку. В нашем примере он будет имитировать банкомат, тратящий определенное время на обслуживание клиента.
Объект sink обозначает конец блок-схемы.
3. Запуск модели.
Для каждой модели, созданной в Enterprise Library, автоматически созда- ется блок-схема с наглядной визуализацией процесса, с помощью которой вы можете изучить текущее состояние модели, например, длину очереди, количе- ство обслуженных человек и т.д.
Для запуска модели (рис. 7) щелкните мышью по кнопке Запустить. От- кроется окно с презентацией запущенного эксперимента. AnyLogic автоматиче- ски помещает на презентацию каждого простого эксперимента заголовок и кнопку, позволяющую запустить модель и перейти на презентацию, нарисован- ную вами для главного класса активного объекта этого эксперимента (Main).
Щелкните по этой кнопке. AnyLogic переключится в режим работы моде- ли. С помощью визуализированной блок-схемы вы можете проследить, сколько человек находится в очереди, сколько человек в данный момент обслуживается и т.д.
Рис. 7
На рис. 8 видно, что 4 человека стоят в очереди, а 23 человека покинули очередь (блок queue), из них 22 обслужили (блок sink), а один еще обслужива- ется у банкомата (блок delay).
Рис. 8
С помощью кнопок панели инструментов Замедлитьи Ускоритьможно изменить скорость выполнения модели. Во время выполнения модели можно следить за состоянием любого блока диаграммы процесса с помощью окна инспекта этого объекта. Чтобы открыть окно инспекта, щелкните мышью по значку блока. В окне инспекта будет отображена базовая информация по выде- ленному блоку, например, для блока Queue будет отображена вместимость оче- реди, количество заявок, прошедшее через каждый порт объекта, и т.д.
4. Изменение данных модели.
Задайте данные модели, изменяя свойства созданных объектов (рис. 9).
В свойстве interarrivalTime объекта source укажите, как часто в отделение приходят клиенты – exponential(0.67).
Рис. 9
Интервал между приходом клиентов распределен экспоненциально со средним значением, равным 1.5 единицы модельного времени. Заметьте, что аргумент функции exponential() равен 0.67, потому что в качестве аргумента за- дается интенсивность прихода клиентов.
Функция exponential() является стандартной функцией генератора слу- чайных чисел AnyLogic. AnyLogic предоставляет функции и других случайных распределений, таких как нормальное, равномерное, треугольное и т.д. За де- тальным описанием функций и их параметров обращайтесь к руководству пользователя или справочнику классов (см. методы класса Func). Для вызова руководства пользователя, справочника классов AnyLogic выберите соответст- вующие пункты меню Справка.
В свойстве capacity объекта queue (рис. 10) задайте максимальную длину очереди – 15.
Рис. 10
В свойстве delayTime объекта delay (рис. 11) задайте время задержки (время обслуживания) – triangular( 0.8, 1, 1.3 ).
Рис. 11
Обслуживание одного клиента занимает примерно 1 минуту. Здесь время обслуживания распределено по треугольному закону со средним значением, равным 1 минуте, минимальным – 0.8 и максимальным – 1.3 минуты.
Запустите модель и проанализируйте ее работу.
5. Сбор статистики.
AnyLogic позволяет производить сбор сложной статистики. Для этого нужно лишь включить у объекта режим сбора статистики, поскольку по умол- чанию он отключен для повышения скорости выполнения модели.
В системе собирается статистика по длине очереди для блока queue (length) и статистика по коэффициенту использования для блока delay (utiliza- tion). Чтобы включить сбор статистики для объекта, установите переключатель Включить сбор статистикина вкладке Основныесвойств объекта.
Запустите модель и просмотрите в окне инспекта статистику для блоков queue и delay. Можно также просмотреть собранную статистику с помощью диаграмм и графиков или путем вывода числовых значений на анимацию.
6. Моделирование банковских кассиров.
Усложним модель, добавив в нее банковских кассиров. Можно моделиро- вать число кассиров, как и банкомат, с помощью объектов delay. Но куда более удобным представляется моделирование числа кассиров с помощью ресурсов. Ресурс – это специальный объект Enterprise Library, который может потребо- ваться заявке для выполнения какой-то задачи. В нашем примере посетите- лям банковского отделения (заявкам) необходимо получить помощь у банковских служащих (ресурсов).
Добавьте на диаграмму следующие объекты:
1) selectOutput – является блоком принятия решения. В зависимости от заданного вами условия, заявка, поступившая в этот объект, будет поступать на один из двух выходов объекта. Оставьте свойство selectCondition – uniform() < 0.5, тогда к кассирам и банкомату будет приходить примерно равное количество клиентов;
2) Service – моделирует занятие заявкой ресурса на определенное время. С помощью этого объекта мы промоделируем обслуживание клиента кассиром. Задайте следующие свойства объекта: назовите объект tellerLines (свойство Имя); укажите, что в очереди к кассирам может находиться до 20 человек (свойство queueCapacity); задайте время обслуживания (свойство delayTime). Будем полагать, что время обслуживания имеет треугольное распределение с минимальным средним значением 2.5, средним – 6 и максимальным – 11 минут;
3) ResourcePool – задает ресурсы определенного типа. Он должен быть подсоединен к объектам, моделирующим занятие и освобождение ресурсов (в нашем случае это объект Service). Задайте следующие свойства объекта: назо- вите объект tellers; задайте число кассиров (свойство capacity) – 4.
Измените имя объекта delay на ATM (банкомат). Соедините объекты соответствующим образом (рис. 12).
Рис. 12
Запустите модель и изучите ее поведение.
7. Сбор статистики о времени обслуживания клиента.
Необходимо определить, сколько времени клиент проводит в банковском отделении и сколько времени он теряет, ожидая своей очереди. Соберем эту статистику с помощью специальных объектов сбора данных и отобразим соб- ранную статистику распределения времени обслуживания клиентов с помо- щью гистограмм.
Создадим класс сообщения Customer. Сообщения этого класса будут представлять клиентов банковского отделения. Выберите базовый класс Entity (сообщения), добавьте параметры для хранения информации о проведенном времени:
1) в панели Проект, щелкните правой кнопкой мыши по элементу модели и выберите Создать | Java классиз контекстного меню (рис. 13);
Рис. 13
2) появится диалоговое окно Новый Java класс. В поле Имявведите имя нового класса Customer;
3) сделайте так, чтобы этот класс наследовался от базового класса заявки Entity (рис. 14): выберите из выпадающего списка Базовый классполное имя данного класса: com.xj.anylogic.libraries.enterprise.Entity;
Рис. 14
4) щелкните мышью по кнопке Далее. На второй странице Мастера вы можете задать параметры создаваемого Java-класса. Создайте параметры:
- enteredSystem типа double для сохранения момента времени, когда клиент пришел в банковское отделение;
- startWaiting типа double для сохранения момента времени, когда клиент встал в очередь к банкомату;
5) щелкните мышью по кнопке Готово. Вы увидите редактор кода соз- данного класса. Можете закрыть его, щелкнув мышью по крестику в закладке с его названием.
Теперь вычислим время, которое тратится персоналом банка на обслужи- вание клиентов, и время, которое клиенты тратят на ожидание своей очереди.
Добавьте элементы сбора статистики по времени ожидания клиентов и времени пребывания клиентов в системе. Эти элементы будут запоминать соот- ветствующие значения времени для каждого клиента и предоста- вят пользователю стандартную статистическую информацию: среднее, минимальное, максимальное из измеренных значений, среднеквадратичное отклонение, доверительный интервал для среднего и т.п.:
1) чтобы добавить объект сбора данных гистограммы на диаграмму, пере- тащите элемент Данные гистограммыс палитры Статистикана диаграмму активного класса;
2) задайте свойства элемента (рис. 15).
- Измените Имяна waitTimeDistr.
- Измените Заголовокна Waiting time distribution.
- Сделайте Кол-во интерваловравным 50.
- Задайте Начальный размер интервала: 0.01;
Рис. 15
3) создайте еще один элемент сбора данных гистограммы (Ctrl+ перета- щите только что созданный объект данных гистограммы, чтобы создать его ко- пию). Измените Имяэтого элемента на timeInSystemDistr, а Заголовокна Time in system distribution.
Измените свойства блоков вашей диаграммы процесса. Задайте следую- щие свойства объектов диаграммы:
1) блок source, свойство Новая заявка– введите new Customer(). Введите Customer в поле Класс заявки. Это позволит напрямую обращаться к полям класса заявки Customer в коде динамических параметров этого объекта. Введите entity.enteredSystem = time(); в поле Действие при выхо- де. Этот код будет сохранять время создания заявки-клиента в переменной enteredSystem нашего класса заявки Customer.
Функция time() возвращает текущее значение модельного времени;
2) блок tellerLines (блок Service) – введите Customer в поле Класс заяв- ки. Добавьте код в поля:
Достарыңызбен бөлісу: |