Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 1 в Anylogic.docx
Скачиваний:
58
Добавлен:
17.09.2019
Размер:
1.29 Mб
Скачать

Лабораторная работа.

Моделирование работы Автозаправочной станции (АЗС) в Anylogic.

Шаг 1. Создание новой модели

Начиная с версии 6.4 AnyLogic предоставляет пользователям возможность использования шаблонов моделей при создании новых моделей. Если раньше Вам приходилось всегда начинать создание модели "с чистого листа", зачастую выполняя одни и те же типовые действия для каждой новой создаваемой модели, то теперь Вы можете перепоручить выполнение первых, базовых, шагов Мастеру создания модели. Все, что Вам нужно - это указать, какой метод моделирования Вы будете использовать и выбрать те опции, которые Вам нужны в модели - и Мастер автоматически создаст простейшую модель, а Вы сможете продолжать ее разработку, лишь изменив незначительные детали.

Создайте новую модель

  1. Щелкните мышью по кнопке панели инструментов Создать  . Появится диалоговое окно Новая модель.

  2. Задайте имя новой модели. В поле Имя модели введите Gas station (АЗС по английски)

  1. Выберите каталог, в котором будут сохранены файлы модели. Если Вы хотите сменить предложенный по умолчанию каталог на какой-то другой, Вы можете ввести путь к нему в поле Местоположение или выбрать этот каталог с помощью диалога навигации по файловой системе, открывающегося по нажатию на кнопку Выбрать.

  2. Щелкните мышью по кнопке Далее. Откроется вторая страница Мастера создания модели.

  3. Здесь Вам будет предложено выбрать шаблон модели, на базе которого Вы будете разрабатывать Вашу модель. Поскольку работа автозаправочной станции представляет собой классическую систему массового обслуживания, необходимо выбрать дискретно-событийную модель, установите флажок Использовать шаблон модели и выберите Дискретно-событийное моделирование в расположенном ниже списке.

  1. Щелкните мышью по кнопке Далее. На следующей странице Мастера Вам будет предложено выбрать, хотите ли Вы сразу же добавить в создаваемую модель ресурсы, график, отображающий длину очереди к сервису, анимацию обслуживающихся и ожидающих обслуживания или гистограмму, отображающую распределение времени пребывания людей в моделируемой системе. Поскольку мы хотим лишь создать с помощью Мастера простейшую диаграмму процесса, а остальные шаги выполнять совместно по шагам учебного пособия, чтобы Вы знали, как добавлять ресурсы, создавать анимацию модели и собирать статистику и могли в дальнейшем делать это самостоятельно, то оставьте флажок Использовать ресурсы сброшенным и закончите создание модели, щелкнув мышью по кнопке Готово.

  2. Щелкните мышью по кнопке Готово.

Вы создали новую модель. Если Вы еще не знакомы с пользовательским интерфейсом AnyLogic, то давайте уделим пару минут основным его компонентам:

Пользовательский интерфейс AnyLogic

В левой части рабочей области будет находиться панель Проект. Панель Проект обеспечивает легкую навигацию по элементам моделей, открытых в текущий момент времени. Поскольку модель организована иерархически, то она отображается в виде дерева: сама модель образует верхний уровень дерева; эксперименты, классы активных объектов и Java классы образуют следующий уровень; элементы, входящие в состав активных объектов, вложены в соответствующую подветвь дерева класса активного объекта и т.д.

В правой рабочей области будет отображаться панель Палитра, а внизу - панель Свойства. Панель Палитра содержит разделенные по категориям элементы, которые могут быть добавлены на диаграмму класса активного объекта или эксперимента. Панель Свойства используется для просмотра и изменения свойств выбранного в данный момент элемента (или элементов) модели.

В центре рабочей области AnyLogic Вы увидите графический редактор диаграммы класса активного объекта Main

 При работе с моделью, не забывайте сохранять производимые Вами изменения с помощью кнопки панели инструментов Сохранить  .

Шаг 2. Создание простейшей модели АЗС

На первом этапе мы хотим создать простейшую модель, в которой будем рассматривать только обслуживание автомобилистов на АЗС.

В основе каждой процессно-ориентированной (дискретно-событийной) модели лежит диаграмма процесса - последовательность соединенных между собой блоков (в AnyLogic это блоки библиотеки Enterprise Library), задающих последовательность операций, которые будут производиться над проходящими по диаграмме процесса заявками.

Если Вы обратите внимание на диаграмму класса Main, то Вы увидите, что диаграмма нашего простейшего процесса была автоматически создана Мастером создания модели, поскольку такая модель является ничем иным, как простейшей системой массового обслуживания, наиболее часто используемой в качестве отправной точки создания процессно-ориентированных моделей и выбранной поэтому в качестве базового шаблона при разработке процессно-ориентированных моделей. 

Диаграмма процесса в AnyLogic создается путем добавления объектов библиотеки из палитры на диаграмму класса активного объекта, соединения их портов и изменения значений свойств блоков в соответствии с требованиями Вашей модели. 

Все, что нам нужно, чтобы сделать созданный шаблон модели адекватным текущей постановке задачи - это изменить некоторые свойства объектов.

Изменение свойств блоков диаграммы процесса

Свойства объекта (как и любого другого элемента AnyLogic) можно изменить в панели Свойства.

Обратите внимание, что панель Свойства является контекстно-зависимой - она отображает свойства выделенного в текущий момент элемента. Поэтому для изменения свойств элемента нужно будет предварительно щелчком мыши выделить его в графическом редакторе или в панели Проект.

 Чтобы у Вас всегда была уверенность в том, что в текущий момент в рабочем пространстве выбран именно нужный Вам элемент, и именно его свойства Вы редактируете в панели Свойства, обращайте внимание на первую строку, показываемую в панели Свойства - в ней отображается имя выбранного в текущий момент времени элемента и его тип. 

Согласно принятым стандартам, блоки в диаграмме процесса обычно располагаются цепочкой слева направо, представляя собой последовательную очередность операций, которые будут производиться над заявкой. 

Первым объектом в диаграмме процесса является объект типа Source. Объект Source генерирует заявки определенного типа. Заявки представляют собой объекты, которые производятся, обрабатываются, обслуживаются, или еще каким-нибудь образом подвергаются действию моделируемого процесса: это могут быть клиенты в системе обслуживания, детали в модели производства, документы в модели документооборота и т.д.  В нашем примере заявками будут автомобили, а объект Source будет моделировать их приход на АЗС.

В нашем случае объект создает заявки через заданный временной интервал. Давайте немного изменим интенсивность прихода автомобилей на заправку.

 Измените свойства объекта source

Введите в поле Интенсивность прибытия 0.67.

Следующий объект - Queue. Он моделирует очередь заявок, ожидающих приема объектами, следующими за данным в диаграмме процесса. В нашем случае он будет моделировать очередь автомобилей, ждущих освобождения заправочных колонок.

 Измените свойства объекта queue 

  1. Задайте максимальную длину очереди. Введите в поле Вместимость 15.  В очереди будут находиться не более 15 автомобилей.

  2. Установите флажок Включить сбор статистики, чтобы включить сбор статистики для этого объекта. В этом случае по ходу моделирования будет собираться статистика по количеству автомобилей в очереди. Если же Вы не установите этот флажок, то данная функциональность будет недоступна, поскольку по умолчанию она отключена для повышения скорости выполнения модели.

Следующим в нашей диаграмме процесса следует объект Delay. Он задерживает заявки на заданный период времени, представляя в нашей модели заправочную колонку, у которой водитель автомобиля тратит свое время на проведение необходимой ему операции заправки.

  1. Обслуживание одного клиента занимает примерно 1 минуту. Задайте время обслуживания, распределенное по треугольному закону со средним значением, равным 1, минимальным - равным 0.8 и максимальным - 1.3 минутам - введите в поле Время задержки triangular(0.8, 1, 1.3) Функция triangular() является стандартной функцией генератора случайных чисел AnyLogic. AnyLogic предоставляет функции и других случайных распределений, таких как нормальное, равномерное, треугольное, и т.д. Детальное описание всех функций вероятностных распределений дано здесь.

  2. Установите флажок Включить сбор статистики.

Последним в диаграмме нашего процесса следует объект Sink. Этот объект уничтожает поступившие заявки. Обычно он используется в качестве конечной точки потока заявок (и диаграммы процесса соответственно).

Настройка запуска модели

Вы можете сконфигурировать выполнение модели в соответствии с Вашими требованиями. Модель выполняется в соответствии с набором установок, задаваемым специальным элементом модели - экспериментом. Вы можете создать несколько экспериментов с различными установками и изменять рабочую конфигурацию модели, просто запуская тот или иной эксперимент модели. 

В панели Проект эксперименты отображаются в нижней части дерева модели. Один эксперимент, названный Simulation, создается по умолчанию. Это простой эксперимент, позволяющий запускать модель с заданными значениями параметров, поддерживающий режимы виртуального и реального времени, анимацию и отладку модели.

Если мы сейчас запустим модель, то будут моделироваться 100 единиц модельного времени, после чего выполнение модели будет остановлено. Поскольку Вы можете захотеть наблюдать поведение модели в течение длительного периода (до того момента, пока Вы сами не остановите выполнение модели), нужно изменить соответствующие настройки эксперимента.

 Уберите условие остановки модели по прошествии заданного времени

  1. В панели Проект, выделите эксперимент Simulation:Main щелчком мыши.

  2. На странице Модельное время панели Свойства, выберите Нет из выпадающего списка Остановить.

Запуск модели

Постройте Вашу модель с помощью кнопки панели инструментов Построить модель   (при этом в рабочей области AnyLogic должен быть выбран какой-то элемент именно этой модели). Если в модели есть какие-нибудь ошибки, то построение не будет завершено, и в панель Ошибки будет выведена информация об ошибках, обнаруженных в модели. Двойным щелчком мыши по ошибке в этом списке Вы можете перейти к предполагаемому месту ошибки, чтобы исправить ее.

 Запустите модель

Щелкните мышью по кнопке панели инструментов Запустить  и выберите из открывшегося списка эксперимент, который Вы хотите запустить. Эксперимент этой модели будет называться Bank/Simulation.

В дальнейшем по нажатию на кнопку Запустить (или по нажатию F5) будет запускаться тот эксперимент, который запускался Вами в последний раз. Чтобы выбрать какой-то другой эксперимент, Вам будет нужно щелкнуть мышью по стрелке, находящейся в правой части кнопки Запустить и выбрать нужный Вам эксперимент из открывшегося списка (или щелкнуть правой кнопкой мыши по этому эксперименту в панели Проект и выбрать Запустить из контекстного меню).

Запустив модель, Вы увидите окно презентации этой модели. В нем будет отображена презентация запущенного эксперимента. AnyLogic автоматически помещает на презентацию каждого простого эксперимента заголовок и кнопку, позволяющую запустить модель и перейти на презентацию, нарисованную Вами для главного класса активного объекта этого эксперимента (Main). 

Щелкните по этой кнопке. Тем самым, Вы запустите модель и перейдете к презентации корневого класса активного объекта запущенного эксперимента. Для каждой модели, созданной в Enterprise Library, автоматически создается блок-схема с наглядной визуализацией процесса, с помощью которой Вы можете изучить текущее состояние модели, например, длину очереди, количество обслуженных авто и так далее.

Вы можете изменить скорость выполнения модели с помощью кнопок панели инструментов Замедлить и Ускорить.

Вы можете следить за состоянием любого блока диаграммы процесса во время выполнения модели с помощью окна инспекта этого объекта. Чтобы открыть окно инспекта, щелкните мышью по значку блока. В окне инспекта будет отображена базовая инормация по выделенному блоку: например, для блока Queue будет отображена вместимость очереди, количество заявок, прошедшее через каждый порт объекта, и т.д.

Когда Вы захотите остановить выполнение модели, щелкните мышью по кнопке панели управления окна презентации Прекратить выполнение  .

Шаг 3. Создание анимации модели

Хотя мы и могли анализировать работу запущенной нами только что модели с помощью визуализированной диаграммы процесса, но куда удобнее было бы иметь более наглядную визуализацию моделируемого нами с помощью анимации. В этом примере мы хотим создать визуализированный план АЗС.

Поскольку в нашем случае нас не интересует конкретное расположение объектов в пространстве, то мы можем просто добавить чисто схематическую анимацию интересующих нас объектов - в нашем случае мы хотим видеть на анимации заправочную колонку и ведущую к нему очередь клиентов.

Анимация модели рисуется в той же диаграмме (в графическом редакторе), в которой задается и диаграмма моделируемого процесса.

Нарисуйте круг, который будет обозначать на анимации пост заправки

  1. Вначале откройте закладку Презентация панели Палитра. Чтобы открыть какую-либо закладку панели Палитра (именуемую в дальнейшем палитрой), нужно щелкнуть мышью по заголовку этой палитры. 

Палитра Презентация содержит элементы, используемые для рисования презентаций моделей: примитивные фигуры, с помощью которых Вы можете рисовать сложные презентации, а также элементы управления, с помощью которых Вы можете сделать Ваши презентации интерактивными.

Перетащите элемент Овал   из палитры Презентация на диаграмму класса активного объекта. Поместите его, как показано на рисунке ниже:

Давайте сделаем так, что цвет этого кружка будет меняться в зависимости от того, обслуживается ли автомобиль в данный момент времени или нет. Для этого выделите нарисованную нами фигуру на диаграмме и перейдите на страницу Динамические панели свойств. Здесь Вы увидите список полей, в которых задаются значения динамических свойств фигуры.

Если Вам нужно, чтобы по ходу моделирования то или иное свойство фигуры меняло свое значение в зависимости от каких-то условий, то Вы можете ввести в поле соответствующего динамического свойства выражение, которое будет постоянно вычисляться заново при выполнении модели, и возвращаемый результат этого вычисления будет присваиваться текущему значению этого свойства. Мы с Вами хотим, чтобы во время моделирования менялся цвет нашей фигуры - поэтому перейдите в поле Цвет заливки и введите там следующую строку:  delay.size() > 0 ? red : white

Здесь delay – это имя нашего объекта Delay. Функция size() возвращает число человек, обслуживаемых в данный момент времени. Если заправка занята, то цвет кружка будет красным, в противном случае - зеленым. 

 Нарисуйте ломаную, которая будет обозначать на анимации очередь к заправочной колонке

  1. Нарисуйте ломаную, как показано на рисунке ниже. Чтобы нарисовать ломаную, сделайте двойной щелчок мышью по элементу Ломаная  в палитре (при этом его значок должен поменяться на этот: ). Теперь Вы можете рисовать ломаную точка за точкой, последовательно щелкая мышью в тех точках диаграммы, куда Вы хотите поместить вершины ломаной. Чтобы завершить рисование, добавьте последнюю точку ломаной двойным щелчком мыши.   Очень важно, какую точку ломаной Вы создаете первой. Заявки будут располагаться вдоль нарисованной Вами ломаной в направлении от конечной к начальной. Поэтому начните рисование ломаной слева и поместите рядом с заправочной колонкой конечную точку ломаной, которая будет соответствовать в этом случае началу очереди.

Теперь мы должны задать созданные анимационные объекты в качестве анимационных фигур блоков диаграммы нашего процесса.

Задайте ломаную в качестве фигуры анимации очереди

На странице свойств объекта queue, введите polyline в поле Фигура анимации.

 Задайте круг в качестве фигуры анимации заправочной колонки

  1. Введите в поле Фигура анимации имя нашего овала: oval.

  2. Выберите из выпадающего списка Тип анимации Одиночная. Большинство объектов Enterprise Library поддерживает несколько анимационных стилей. Например, очередь может отображаться в виде линии, упорядоченного или неупорядоченного набора элементов. Подробное описание анимационных стилей дано в Справочном руководстве по Enterprise Library, в статье Анимация объектов Enterprise Library.  В нашем случае, если колонка будет занята, то мы будем показывать в фигуре заправочной колонки обслуживающегося в неё клиента, а поскольку единовременно наша АЗС не обслуживает больше одного клиента, то мы и выбираем тип анимации Одиночная.

Теперь Вы можете запустить модель и изучить ее поведение. Для ускорения работы модели, переключитесь в режим виртуального времени, щелкнув мышью по кнопке панели инструментов Реальное/виртуальное время. В режиме виртуального времени модель будет выполняться максимально быстро, без привязки модельного времени к реальному.

Запустите модель. Вы увидите, что у нашей модели теперь есть простейшая анимация – заправочная колонка и ведущую к ней очередь клиентов. Цвет фигуры колонки будет меняться в зависимости от того, обслуживается ли клиент в данный момент времени.

Шаг 4. Сбор статистики использования ресурсов

AnyLogic предоставляет пользователю удобные средства для сбора статистики по работе блоков диаграммы процесса. Объекты Enterprise Library самостоятельно производят сбор основной статистики. Все, что Вам нужно сделать - это включить сбор статистики для объекта. 

Поскольку мы уже сделали это для объектов delay и queue, то теперь мы можем, например, просмотреть интересующую нас статистику (скажем, статистику занятости заправочной колонки и длины очереди) с помощью диаграмм. 

 Добавьте диаграмму для отображения средней занятости заправочной колонки

  1. Откройте палитру Статистика. Эта палитра содержит элементы сбора данных и статистики, а также диаграммы для визуализации данных и результатов моделирования. 

  2. Перетащите элемент Столбиковая диаграмма  из палитры Статистика на диаграмму класса и измените ее размер, как показано на рисунке ниже:

  1. Перейдите на страницу Основные панели Свойства. Щелкните мышью по кнопке Добавить элемент данных. При этом появится  секция свойств того элемента данных, который будет отображаться на этой диаграмме.

  2. Измените Заголовок на ATM utilization.

  3. Введите delay.statsUtilization.mean() в поле Значение. Здесь delay - это имя нашего объекта Delay. У каждого объекта Delay есть встроенный набор данных statsUtilization, занимающийся сбором статистики использования этого объекта. Функция mean() возвращает среднее из всех измеренных этим набором данных значений. Вы можете использовать и другие методы сбора статистики, такие, как min() или max() и т.д.

  1. Перейдите на страницу Внешний вид панели Свойства. Выберите первую опцию из набора кнопок Расположение, чтобы изменить расположение легенды относительно диаграммы (мы хотим, чтобы она отображалась справа).

  1. Измените размер диаграммы в графическом редакторе так, чтобы она приняла следующий вид:

 Добавьте диаграмму для отображения средней длины очереди

Аналогичным образом добавьте еще одну столбиковую диаграмму. Измените ее размер так, как показано на рисунке:

  1. Перейдите на страницу Внешний вид панели Свойства и выберите первую опцию в секции свойств Направление, чтобы столбцы столбиковой диаграммы росли влево.

Добавьте элемент данных, который будет отображаться на диаграмме. Задайте Заголовок: Queue length и задайте Значение: queue.statsSize.mean(). Здесь statsSize - это имя объекта типа "статистика" StatisticsContinuous, производящего сбор статистики размера очереди объекта Queue.

Запустите модель и пронаблюдайте за занятостью заправки и средней длиной очереди с помощью только что созданных диаграмм.

Шаг 5. Анимация клиентов

По умолчанию заявки (то есть, наши клиенты заправочной станции) будут отображаться на анимации маленькими прямоугольниками различных цветов. Чтобы анимация выглядела более наглядно, давайте зададим в качестве фигуры анимации клиента автомобиль. 

Вы можете нарисовать фигурку сами, но для начала мы будем просто использовать типовую картинку из набора стандартных изображений, поставляемого вместе с AnyLogic, начиная с версии 6.4.  

 Создайте анимацию клиента

  1. Откройте палитру Картинки. Эта палитра содержит набор картинок, которые наиболее часто используются пользователями AnyLogic при создании моделей.

  1. Перетащите элемент Грузовик из палитры на диаграмму графического редактора: 

По умолчанию эта картинка будет называться lorry2. Оставьте ее название без изменений, поскольку в дальнейшем мы будем ссылаться на нее в блоке диаграммы нашего процесса именно по этому имени.

 Поместите картинку за границу видимой области презентации

  1. Передвиньте холст диаграммы немного вниз, нажав правую кнопку мыши в графическом редакторе и перетащив мышь, не отпуская кнопки, вниз.

  2. Перетащите фигурку автомобиля выше верхней границы экрана презентации, как показано на рисунке ниже. Мы делаем это для того, чтобы картинка оказалась за областью видимости диаграммы.

  3. Передвиньте холст диаграммы обратно. 

Теперь нам нужно сообщить объекту source, чтобы он использовал добавленную нами фигурку в качестве фигуры анимации заявки (то есть, клиента АЗС).

 Измените свойства объекта source

  1. Выделите объект source в графическом редакторе.

  2. В полк Фигура анимации заявки введите имя нашей фигурки человека: lorry2 (при этом Вы можете воспользоваться помощником написания кода).

Теперь Вы можете запустить модель и наблюдать за моделируемым процессом с помощью анимации. Обслуживающиеся и ожидающие обслуживания в очереди клиенты будут отображаться на анимации нарисованными нами картинками автомобилей.

Эта простейшая модель продемонстрировала основные принципы работы с библиотекой Enterprise Library. Теперь мы готовы к тому, чтобы усовершенствовать нашу модель.. Но уже в следующей лабораторной работе 

Продолжение лабораторной №1

Теперь мы усложним нашу модель. На большинстве автозаправочных станций имеется по несколько заправочных колонок. Чтобы смоделировать заправку с несколькими заправочными колонками и анимацией занятости по каждой из них, удобно воспользоваться ресурсами.

Ресурс – это специальный объект Enterprise Library, который может потребоваться заявке для выполнения какой-то задачи. В каждый момент времени ресурс может быть занят только одной заявкой. В нашем примере ресурс – это заправочная колонка.

Так как наша модель представляет собой простейшую замкнутую Систему Массового Обслуживания с ожиданием, она может быть построена с помощью шаблонов Anylogic.

Создайте новую модель используя шаблон «Дискретно Событийное моделирование». При выборе опций модели установите все доступные галочки, как показано на рисунке:

Нажмите Готово.

В открывшейся модели появился новый блок service. Этот объект захватывает для заявки заданное количество ресурсов (заправочных колонок), задерживает заявку, а затем освобождает захваченные ею ресурсы. В нашей модели этот объект будет моделировать обслуживание автомобилистов на одной из заправочных колонок. Данный блок эквивалентен по свой работе последовательности объектов: Seize, Delay, Release которые являются стандартными объектами библиотеки Enterprise Library.

Как вы можете видеть к объекту servise присоединен объект resourcePool. Он задает набор ресурсов (заправочных колонок), которые могут захватываться и освобождаться заявками. 

Удалите лишние в данном случае объекты, оставив только те, что на скриншоте ниже:

Запустите модель. Теперь на анимации отображается количество заправочных колонок. Когда они свободны, напротив каждой горит зеленый свет, когда заняты – красный. Подберите оптимальную интенсивность поступления автомобилей и оптимальное количество заправочных колонок или время обслуживания, при которых не будет накапливаться очередь.

В шаблон модели также автоматически была включена гистограмма распределения времени нахождения заявок в системе. Попробуйте изменить закон распределения времени обслуживания, например на экспоненциальный. Параметр закона подберите самостоятельно таким образом, чтобы в системе не накапливалась очередь. По гистограмме проверьте соответствие времени обслуживания экспоненциальному закону.