Лаб№9_банкомат. Лабораторная работа 9 Моделирование работы банка (процессное моделирование)
Скачать 1.12 Mb.
|
Лабораторная работа №9 Моделирование работы банка (процессное моделирование) Цель работы: знакомство с методами процессного моделирования Создайте новую модель. Рис. 1 Создайте диаграмму процесса По умолчанию при создании новой модели в панели Палитра открывается Библиотека моделирования процессов. Вы можете открывать палитры щелчком по соответствующей иконке на вертикальной панели слева от палитры. Добавьте блоки Библиотеки моделирования процессов на диаграмму и соедините их, как показано на рисунке 2. Чтобы добавить объект на диаграмму, перетащите требуемый элемент из палитры в графический редактор. Когда вы перетаскиваете блоки и располагаете их рядом друг с другом, вы можете видеть, как появляются соединительные линии между блоками. Эти линии должны соединять только порты, находящиеся с правой или левой стороны иконок. Данная схема моделирует простейшую систему очереди, состоящую из источника агентов, задержки (и очереди перед задержкой) и финального уничтожения агентов (рис. 2). Рис. 2. Значения объектов диаграммы. Объект Source генерирует агентов определенного типа. Обычно он используется в качестве начальной точки диаграммы процесса, формализующей поток агентов. В нашем примере агентами будут посетители банка, а объект Source будет моделировать их приход в банковское отделение. Объект Queue моделирует очередь агентов, ожидающих приема объектами, следующими за данным в диаграмме процесса. В нашем случае он будет моделировать очередь клиентов, ждущих освобождения банкомата. Объект Delay задерживает агентов на заданный период времени, представляя в нашей модели банкомат, у которого посетитель банковского отделения тратит свое время на проведение необходимой ему операции. Объект Sink уничтожает поступивших агентов. Обычно он используется в качестве конечной точки потока агентов (и диаграммы процесса соответственно). За детальным описанием объектов Библиотеки моделирования процессов, можно обратиться к Справочному руководству по Библиотеке моделирования процессов. Настройте блоки диаграммы Выделите блок Source. В панели Свойства укажите, как часто должны прибывать клиенты. Введите 0.3 и выберите в минуту в поле Интенсивность прибытия (рис. 3). Рис.3. Измените свойства блока Queue. Введите в поле Вместимость 15. В очереди будут находиться не более 15 человек (рис.4). Рис. 4. Измените свойства блока Delay. Назовите объект ATM. Задайте время обслуживания в поле Время задержки, распределенное по треугольному закону со средним значением, равным 1.5, минимальным - равным 0.8 и максимальным - 3.5 минутам (рис.5). Рис.5. Функция triangular() является стандартной функцией генератора случайных чисел. AnyLogic. AnyLogic предоставляет функции и других случайных распределений, таких как нормальное, равномерное, треугольное, и т.д. Запуск модели Постороена модель простейшей системы очереди. Запустите модель. Сначала постройте вашу модель с помощью кнопки панели инструментов Построить модель (при этом в рабочей области AnyLogic должен быть выбран какой-то элемент именно этой модели). Если в модели есть какие-нибудь ошибки, то построение не будет завершено, и в панель Ошибки будет выведена информация об ошибках, обнаруженных в модели. Двойным щелчком мыши по ошибке в этом списке вы можете перейти к месту ошибки, чтобы исправить ее (рис. 6). При запуске модель автоматически обновляется. Рис.6. Можно изменить скорость выполнения модели с помощью кнопок панели инструментов Замедлить и Ускорить. Можно следить за состоянием любого блока диаграммы процесса во время выполнения модели с помощью окна - инспектора этого объекта. Чтобы открыть окно инспектора, щелкните мышью по значку блока. В окне - инспекторе будет отображена базовая информация по выделенному блоку: например, для блока Queue будет отображена вместимость очереди, количество агентов, прошедших через каждый порт объекта, и т.д. Строка Содержит отображает количество агентов, находящихся в данный момент на объекте вместе с ID этих агентов (рис.7). Рис. 7. 5. Создание анимации модели Создадим визуализированный план банковского отделения. Поскольку в нашем случае нас не интересует конкретное расположение объектов в пространстве, то мы можем просто добавить чисто схематическую анимацию интересующих объектов - будет видно на анимации банкомат и ведущую к нему очередь клиентов. Анимация модели рисуется в той же диаграмме (в графическом редакторе), в которой задается и диаграмма моделируемого процесса. Добавление фигур разметки пространства Нарисуем точечный узел, обозначающий банкомат. Вначале откройте палитру Разметка пространства панели Палитра. Перетащите элемент Точечный узел из палитры Разметка пространства в графический редактор и поместите его под блок-схемой процесса (рис.8). Рис.8. Пусть во время моделирования меняется цвет этого узла. Изменим его свойства: для в поле Цвет нужно вписать: ATM.size() > 0 ? red : green (не копировать текст! Искать ошибку потом не стану!) ATM – это имя объекта Delay. Функция size() возвращает число человек, обслуживаемых в данный момент времени. Если банкомат занят, то цвет кружка будет красным, в противном случае - зеленым. Измените свойства блока delay (его имя – ATM (рис.9). Рис.9. Задайте путь очереди к банкомату Нарисуем путь очереди к банкомату. Вначале откройте палитру Разметка пространства панели Палитра. Двойным щелчком выделите элемент Путь палитры Разметка пространства, чтобы перейти в режим рисования (рис.10). Рис.10. Откройте свойства для блока Queue в диаграмме процесса. Выберите путь path, который мы только нарисовали в параметре Место агентов. Вы можете выбрать его из выпадающего списка подходящих объектов, щелкнув стрелку "вниз", или выбрать фигуру из графического редактора, предварительно щелкнув кнопку справа от параметра (в таком случае все неподходящие объекты в графическом редакторе будут обесцвечены) (рис.11). Рис.11. Запустите модель. Для ускорения работы модели, переключитесь в режим виртуального времени, щелкнув мышью по кнопке панели инструментов Реальное/виртуальное время. В режиме виртуального времени модель будет выполняться максимально быстро, без привязки модельного времени к реальному (рис. 12). Рис.12. Теперь есть простейшая анимация - банкомат и ведущая к нему очередь клиентов. Цвет фигуры банкомата будет меняться в зависимости от того, обслуживается ли клиент в данный момент времени (рис. 13). Рис.13. Добавление 3D анимации Добавляем на диаграмму типа агента 3D Окно. 3D Окно используется для задания на диаграмме агента области, в которой во время запуска модели будет отображаться трехмерная анимация этой модели. Для этого перетащите элемент 3D Окно из секции 3D палитры Презентация в графический редактор. В графическом редакторе появится закрашенная серым область. Поместите ее туда, где вы хотите видеть 3D анимацию во время запуска модели (рис.14). Рис.14. Запускаем модель. При создании 3D окна, AnyLogic добавляет область просмотра, которая позволяет легко переключаться к сцене 3D анимации во время выполнения модели. Чтобы переключиться к 3D анимации в запущенной модели, откройте панель разработчика, щелкнув по кнопке Показать/скрыть панель разработчика в правом углу панели управления. В открывшейся панели разработчика раскройте список Выбрать область и показать и выберите опцию [window3d] (рис.15). Рис.15. Перемещение по 3D сцене с помощью мыши и следующих клавиш:
Добавление 3D объектов Зададим фигуру клиента банка. По умолчанию клиенты в нашей модели обозначались цветными точками и отображались цветными цилиндрами в 3D анимации. Если мы хотим задать нестандартный тип клиента и выбрать для него красивую фигуру анимации, нам нужно создать новый тип агента. Откройте Библиотеку моделирования процессов в панели Палитра. Перетащите элемент Тип агента в графический редактор (рис.16). Рис.16 Откроется диалоговое окно Мастера создания агентов на шаге Создание нового типа агента. Введите Customer в поле Имя нового типа, оставьте опцию Создать новый тип агента "с нуля" выбранной. Нажмите Далее (рис. 17). Рис.17 Выберите опцию 3D для типа анимации и фигуру анимации Человек из списка 3D фигур. Щелкните Готово. Диаграмма нового агента Customerоткроется автоматически. Вы можете найти 3D фигуру Человек в начале координат (ничего здесь не трогаем, возвращаемся в Main). Настройте использование нового типа агентов в блок-схеме На диаграмме Main, выделите блок Source в графическом редакторе. Выберите тип агента Customer в выпадающем списке параметра Новый агент (рис. 18). Рис.18 Откройте панель Свойства точечного узла и переключите элемент управления Видимость в значение «нет». Таким образом разметка пространства не будет видна на анимации во время выполнения модели. Повторите эти действия для элемента path. Запустите модель, чтобы увидеть анимацию клиентов в очереди (рис.19). Рис. 19. Добавьте объект банкомата Откройте палитру 3D Объекты в панели Палитра. Перетащите 3D фигуру Банкомат из секции палитры Супермаркет в графический редактор и поместите ее на точечный узел (рис.20). Рис.20 Если вы сейчас запустите модель и проверите 3D анимацию в режиме просмотра window3D, вы заметите, что банкомат стоит не той стороной по направлению к очереди клиентов, и нам необходимо развернуть его в правильную сторону. Выделите 3D объект банкомата АТМ в графическом редакторе и откройте секцию свойств Расположение. Выберите из выпадающего списка параметра Поворот Z 0 градусов. Запустите модель, чтобы убедиться, что фигура банкомата стоит "лицом" к клиентам (рис.21). Рис.21. 12. Добавление банковских служащих Усложняем модель, добавив в нее служащих – банковских кассиров. Мы могли бы промоделировать кассиров, как и банкомат, с помощью объекта Delay. Но куда более удобным представляется моделирование кассиров с помощью ресурсов. Ресурс – это специальный объект Библиотеки моделирования процессов, который может потребоваться агенту для выполнения какой-то задачи. В каждый момент времени ресурс может быть занят только одним агентом. В нашем примере посетителям банковского отделения (агентам) необходимо получить помощь у банковских служащих (ресурсов). Изменения диаграммы процесса Добавляем обслуживание: откройте Библиотеку моделирования процессов в панели Палитра и перетащите на диаграмму Main блок Service. Объект Service захватывает для агента заданное количество ресурсов, задерживает агента, а затем освобождает захваченные им ресурсы (рис.22). Рис.22. Перейдите в панель Свойства блока Service. Измените параметры объекта следующим образом: ко всем служащим будет вести одна общая очередь. Задайте максимальное количество человек в этой очереди в поле Вместимость очереди: 20. Пусть время обслуживания имеет треугольное распределение с минимальным значением равным 2.5, средним - 6, и максимальным - 11 минут. Введите в поле Время задержки: triangular( 2.5, 6, 11 ) (рис.23) Рис.23 14. Моделируем выбор клиентов Откройте Библиотеку моделирования процессов в панели Палитра и перетащите на диаграмму процесса Main блок SelectOutputв свободное место между блоками Source и Queue. Возможно, вам понадобится переместить несколько блоков, чтобы увеличить длину соединителя между ними. Вы можете выделить несколько блоков диаграммы процесса и переместить их все вместе или перемещать блоки по одному. SelectOutput является блоком принятия решения. В зависимости от заданного вами условия, агент, поступивший в объект, будет поступать на один из двух выходных портов объекта. Выделите блок selectOutput в диаграмме процесса. В панели Свойства этого блока выберите опцию При выполнении условия в параметре Выход true выбирается. Убедитесь, что в поле Условие стоит выражение randomTrue(0.5). В этом случае к кассирам и банкомату будет приходить примерно равное количество клиентов. Соедините блоки selectOutput и service с другими блоками так, как показано на рисунке 24. Рис.24. 15. Добавление ресурсов для сервиса Откройте Библиотеку моделирования процессов в панели Палитра и перетащите блок ResourcePool на диаграмму агента Main. Объект ResourcePool задает ресурсы определенного типа (в нашей модели это будут банковские клерки). Поместите его, например, под блоком Service и перейдите в панель Свойства. Назовите объект tellers (рис.25). Задайте число кассиров в поле Кол-во ресурсов: 4. Рис.25 Блок ResourcePool указывается в объектах, использующих ресурсы, в нашем случае - это блок Service. Поэтому нам необходимо изменить свойства блока Service диаграммы процесса: ыберите опцию Ресурсы одного типа в параметре Захватить ресурсы. Затем укажите блок tellers, который мы добавили на диаграмму, в параметре Блок ResourcePool. Вы можете выбрать его из выпадающего списка подходящих объектов, щелкнув стрелку "вниз", или выбрать фигуру из графического редактора, предварительно щелкнув кнопку справа от параметра (в таком случае все неподходящие объекты в графическом редакторе будут обесцвечены) (рис.26). Рис.26 Поскольку модель изменилась, нужно изменить и ее анимацию. 16. Добавление фигур разметки пространства Нарисуем область для ожидания и место обслуживания клиентов кассирами. В этот раз мы будем рисовать место ожидания клиентами, используя прямоугольный узел. Вначале откройте палитру Разметка пространства панели Палитра. Двойным щелчком выделите элемент Прямоугольный узел палитры Разметка пространства, чтобы перейти в режим рисования. Щелкните мышью в графическом редакторе, чтобы задать вершину верхнего левого угла, затем тащите прямоугольник, не отпуская кнопки мыши. Отпустите, когда прямоугольный узел достигнет нужной формы. Вы можете редактировать фигуру и после того, как ее рисование завершено. Назовите эту область waitingArea. Переключите элемент управления Видимость в положение «нет». Таким образом разметка пространства не будет видна на анимации во время выполнения модели (рис.27). Рис.27. Измените свойства блока Serviceblock : выберите только что нарисованный нами узел waitingArea в параметре Место агентов (queue) (рис.28). Рис.28 17. Задайте фигуру разметки места обслуживания клиентов Клиентам банка требуется место, на котором они могли бы находиться во время обслуживания у кассиров. Нарисуем такую область, используя прямоугольный узел: откройте палитру Разметка пространства панели Палитра. Двойным щелчком выделите элемент Прямоугольный узел палитры Разметка пространства, чтобы перейти в режим рисования. Щелкните мышью в графическом редакторе, чтобы задать вершину верхнего левого угла, затем тащите прямоугольник, не отпуская кнопки мыши. Отпустите, когда прямоугольный узел имеет нужную форму. Вы можете редактировать фигуру и после того, как ее рисование завершено. Назовите эту область customerPlaces. Переключите элемент управления Видимость в положение «нет» (рис.29). Рис.29 Будем использовать аттракторы, чтобы задать местоположение тех клиентов, которые будут обслуживаться у кассиров. Выделите узел customerPlaces в графическом редакторе и щелкните кнопку Аттракторы... в свойствах узла. В открывшемся окне Аттракторы укажите число аттракторов 4 в режиме создания Количество аттракторов, затем щелкните OK. Вы увидите, что четыре аттрактора появились в узле customerPlaces на равном расстоянии друг от друга (рис.30). Рис.30 Теперь необходимо сослаться на эту фигуру в диаграмме процесса. Измените свойства блока Service: выберите нарисованный узел customerPlaces в параметре Место агентов (delay) (рис.31). Рис.31 18. Задайте фигуру разметки для кассиров Кассирам банка также требуется место, где они могли бы находиться во время обслуживания клиентов. Мы нарисуем такую область, используя прямоугольный узел. Назовите эту область tellerPlaces. Переключите элемент управления Видимость в положение «нет» (рис.32). Рис.32 Для местоположения служащих используем аттракторы. Выделите узел tellerPlaces в графическом редакторе и щелкните кнопку Аттракторы... в свойствах узла. В открывшемся окне Аттракторы укажите число аттракторов 4 в режиме создания Количество аттракторов, затем щелкните OK. Выделите все аттракторы, зажав клавишу Shift и щелкнув по ним мышью, и потом выберите 180.0 в параметре Ориентация секции свойств Местоположение и размер (рис.33). Рис.33 Далее щелкните объект tellers в диаграмме процесса и перейдите в его свойства. Выберите нарисованный узел tellerPlaces в параметре Базовое местоположение (узлы) (рис.34). Рис.34 Запустите модель 19. Добавление 3D объектов Добавим 3D фигуры клерков в нашу модель. Создадим новый тип ресурсов для анимации клерков: откройте Библиотеку моделирования процессов в панели Палитра. Перетащите элемент Тип ресурса в графический редактор (рис.35). Рис.35 Откроется диалоговое окно Мастера создания агентов на шаге Создание нового типа агента. Введите Teller в поле Имя нового типа, оставьте опцию Создать новый тип агента "с нуля" выбранной. Нажмите Далее. Выберите опцию 3D для типа анимации и фигуру анимации Служащий из списка 3D фигур. Щелкните Готово. Новая диаграмма Teller автоматически откроется. Вы можете найти 3D фигуру Служащий в начале координат. Переключитесь обратно на диаграмму Main (рис.36). Рис.36. 20. Настройте использование нового типа ресурсов в блок-схеме На диаграмме Main, выделите блок tellers в графическом редакторе. Выберите тип ресурсов Teller в выпадающем списке параметра Новый ресурс (рис.37). Рис.37. Запустите модель. 21. Добавьте столы для клерков Откройте палитру 3D Объекты в панели Палитра. Перетащите четыре 3D фигуры Стол из секции палитры Офис в графический редактор и поместите их в узел tellerPlaces. Расположите столы на аттракторах, так как аттракторы обозначают место, где стоят клерки (рис.38). Рис.38. Вы заметите, что они стоят не той стороной к клеркам. Выделите все столы методом Shift -щелчок и перейдите в их свойства. В секции Расположение измените параметр Поворот Z: -90.0 градусов. При необходимости, выровняйте расположение всех восьми аттракторов и столов. Теперь вы можете запустить модель и увидеть в 3D анимации, как некоторые клиенты идут к банкомату, а другие обслуживаются у столов клерков (рис.39). Рис.39. 22. Сбор статистики AnyLogic предоставляет пользователю удобные средства для сбора статистики по работе блоков диаграммы процесса. Блоки Библиотеки моделирования процессов самостоятельно производят сбор основной статистики. Можно, например, просмотреть интересующую нас статистику (скажем, статистику занятости банкомата и длины очереди) с помощью диаграмм. Добавим диаграмму для отображения средней занятости банкомата: Откройте палитру Статистика. Эта палитра содержит элементы сбора данных и статистики, а также диаграммы для визуализации данных и результатов моделирования. Перетащите элемент Столбиковая диаграмма из палитры Статистика на диаграмму (рис.40). Рис.40. Перейдите в секцию Данные свойств столбиковой диаграммы. Щелкните кнопку Добавить элемент данных, чтобы задать данные для отображения в диаграмме. Измените Заголовок на Использование банкомата. Введите ATM.statsUtilization.mean() в поле Значение. Здесь ATM - это имя нашего объекта Delay. У каждого объекта Delay есть встроенный набор данных statsUtilization, занимающийся сбором статистики использования этого объекта. Функция mean() возвращает среднее из всех измеренных этим набором данных значений. Вы можете использовать и другие методы сбора статистики, такие, как min() или max() (рис.41). Рис.41. Перейдите в секцию Легенда панели Свойства. Измените расположение легенды относительно диаграммы (мы хотим, чтобы она отображалась справа) и измените ее размер (рис.42). Рис.42. Аналогичным образом добавьте еще одну столбиковую диаграмму для отображения средней длины очереди и измените ее размер так, как показано на рисунке 43 Рис.43. Перейдите в секцию Внешний вид панели Свойства и выберите последнюю опцию параметра Направление столбцов, чтобы столбцы столбиковой диаграммы росли влево. Также измените положение легенды в секции Легенда (как показано на рисунке 44). Рис.44. В секции Данные свойств диаграммы щелкните мышью по кнопке Добавить элемент данных. Измените Заголовок на Queue length. Задайте Значение: queue.statsSize.mean(). Здесь statsSize - это имя объекта типа "статистика" StatisticsContinuous, производящего сбор статистики размера очереди объекта Queue (рис.45). Рис.45. Запустите модель и понаблюдайте за занятостью банкомата и средней длиной очереди с помощью только что созданных диаграмм (рис.46). Рис.46. 23. Сбор статистики по времени обслуживания Мы хотим знать, сколько времени клиент проводит в банковском отделении. Мы соберем эту статистику с помощью блоков TimeMeasureStart и TimeMeasureEnd из Библиотеки моделирования процессов и отобразим собранную статистику распределения времен обслуживания клиентов с помощью гистограммы. Чтобы измерить время, проведенное агентами на определенном отрезке диаграммы процесса, мы должны разместить эти блоки соответственно на входе в интересующий нас отрезок и на выходе из него. Первый блок хранит время прохождения агента через блок, а второй измеряет время, которое агент провел на отрезке диаграммы процесса после того, как покинул первый блок. Добавьте блоки измерения времени в диаграмму процесса: Измените диаграмму процесса так, чтобы между блоком Source и блоком selectOutput появилось место для нового блока. Откройте Библиотеку моделирования процессов в панели Палитра и добавьте блок TimeMeasureStart в освободившееся место. Убедитесь, что порты блока соединены к соседним блокам (рис.47). Рис.47. Перетащите блок sink вправо. Перетащите блок TimeMeasureEnd из Библиотеки моделирования процессов на графический редактор и разместите его перед блоком sink. Убедитесь, что входной порт блока соединен с блоками ATM и Service, а выходной - с блоком sink. Чтобы рассчитать распределения времен для агентов, в свойствах каждого блока TimeMeasureEnd должен быть указан как минимум один блок TimeMeasureStart. Откройте свойства вашего блока и задайте блок TimeMeasureStart в параметре Объекты TimeMeasureStart (рис.48). Рис.48. Добавьте гистограмму для отображения собранной статистики: Перетащите элемент Гистограмма из палитры Статистика в графический редактор. Измените ее размер (рис.49). Рис.49. Укажите, какой элемент сбора данных хранит данные, которые вы хотите отобразить на вашей гистограмме: в секции Данные свойств гистограммы щелкните мышью по кнопке Добавить данные. Измените Заголовок отображаемых данных на Распределение времени в системе. Введите timeTotal.distribution в поле Данные. timeTotal - имя блока TimeMeasureEnd, который собирает распределение времен пребывания агентов в системе (рис.50). Рис.50. Запустите модель. Включите режим виртуального времени и понаблюдайте за тем, какой вид примет распределение времен пребывания клиентов в системе (рис.51). Рис.51. Литература https://help.anylogic.ru/index.jsp?topic=%2Fcom.anylogic.help%2Fhtml%2Fpmtutorial%2Fbank-phase-2.html https://www.youtube.com/watch?v=c2PftQsEBCc&t=449s |