86793

Моделирование системы массового обслуживания в AnyLogic

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

Информатика, кибернетика и программирование

Цель работы Получить практические навыки построения дискретно-событийных моделей систем в среде AnyLogic. Порядок выполнения работы В ходе выполнения лабораторной работы необходимо научиться создавать дискретно-событийные модели с помощью библиотеки Enterprise Library.

Русский

2015-04-10

1.47 MB

83 чел.


моделирование системы массового обслуживания            в AnyLogic (Лабораторная работа № 4)

Цель работы

Получить практические навыки построения дискретно-событийных моделей систем в среде AnyLogic.    

Порядок выполнения работы

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

При выполнении лабораторной работы студент сначала выполняет общее задание, а затем индивидуальное задание. Краткое описание некоторых элементов библиотеки Enterprise Library приводится в приложение 1.

Общие сведения о создании моделей в AnyLogic

Модель AnyLogic представляет собой файл с именем, заданным пользователем, и расширением .alp. При создании новой модели нужно сразу указать полный путь и имя каталога, в котором будет находиться ваша модель.

  1.  Запустите АnyLogic.
  2.  Для создания новой модели щелкните мышью по кнопке Создать модель. Появится диалоговое окно (см. рис.1), в котором вы должны будете дать имя файлу вашей модели и выбрать каталог, где он будет храниться. Щелкните по кнопке Далее.

Рис. 1.

  1.  Выберите Начать создание модели «с нуля». Щелкните по кнопке Готово.
  2.  Откроется рабочее окно AnyLogic (см. рис. 2).

Рис. 2.

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

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

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

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

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

Модель выполняется в соответствии с набором конфигурационных установок, называемым экспериментом. Вы можете создать несколько экспериментов и изменять рабочую конфигурацию модели, просто меняя текущий эксперимент модели. Один эксперимент, названный Simulation, создается автоматически. Выберите его щелчком мыши по элементу дерева и изучите настройки модели в окне Свойства (рис. 3). Окно Свойства имеет вкладки: основные, дополнительные, модельное время, презентация, окно, параметры, описание.

Рис. 3.

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

Дополнительные свойства эксперимента (вкладка Дополнительные) позволяют управлять выполнением модели. Можно задать действие перед и после запуска модели, а также задать численные методы для прогона и точность получаемых значений.

На вкладке Модельное время можно:

  1.  задать единицу модельного времени;
  2.  задать интервал времени моделирования.

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

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

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

Задание к лабораторной работе

Построим с помощью элементов библиотеки Enterprise Library модель простой системы массового обслуживания – модель банковского отделения.

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

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

2. Создайте блок-схему модели, которая пока будет состоять только из банкомата. Для этого перетащите в окно структуры элементы библиотеки Enterprise Library и соедините их так, как показано на рис. 4.

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

Рис. 4.

Объект queue моделирует очередь клиентов, ожидающих обслуживания.

Объект delay моделирует задержку. В нашем примере он будет имитировать банкомат, тратящий определенное время на обслуживание клиента.

Объект sink обозначает конец блок-схемы.

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

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

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

Рис. 5.

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

Рис. 6.

Встройте в файл отчета полученные характеристики процесса обслуживания. Сколько клиентов пришло в банк и сколько обслужилось на момент окончания прогона модели?

4. Задайте данные модели, изменяя свойства созданных объектов (рис. 7).

Откройте окно свойств объекта source, перейдите на вкладку Параметры. В свойстве interarrivalTime укажите, как часто в отделение приходят клиенты – exponential(0.67).

Рис. 7.

Интервал между приходом клиентов распределен экспоненциально со средним значением, равным 1.5 единицы модельного времени. Заметьте, что аргумент функции exponential() равен 0.67, потому что в качестве аргумента задается интенсивность прихода клиентов.

Функция exponential() является стандартной функцией генератора случайных чисел AnyLogic. AnyLogic предоставляет функции и других случайных распределений, таких как нормальное, равномерное, треугольное и т.д. За детальным описанием функций и их параметров обращайтесь к руководству пользователя или справочнику классов (см. методы класса Func). Для вызова руководства пользователя, справочника классов AnyLogic выберите соответствующие пункты меню Справка.

В свойстве capacity объекта queue (рис. 8) задайте максимальную длину очереди – 15.

Рис. 8.

В свойстве delayTime объекта delay (рис. 9) задайте время задержки (время обслуживания) –  triangular( 0.8, 1, 1.3 ).

Рис. 9.

Обслуживание одного клиента занимает примерно 1 минуту. Здесь время обслуживания распределено по треугольному закону со средним значением, равным 1 минуте, минимальным – 0.8 и максимальным – 1.3 минуты.

5. Запустите модель и проанализируйте ее работу. Как изменились характеристики процесса обслуживания? Сравните результаты с предыдущим прогоном.

6. Включите сбор статистики для блоков queue и delay.

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

В системе собирается статистика по длине очереди для блока queue (length) и статистика по коэффициенту использования для блока delay (utilization). Чтобы включить сбор статистики для объекта, установите переключатель Включить сбор статистики на вкладке Основные свойств объекта. 

Запустите модель и просмотрите в окне инспекта статистику для блоков  queue и delay. Каковы средняя длина очереди посетителей к банкомату и загрузка банкомата?

7. Добавьте в модель банковских кассиров.

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

Добавьте на диаграмму следующие объекты:

1) selectOutput – является блоком принятия решения. В зависимости от     заданного вами условия, заявка, поступившая в этот объект, будет поступать на один из двух выходов объекта. Оставьте все свойства объекта без изменений. Пусть выход true выбирается С заданной вероятностью, а Вероятность [0..1] равна 0.5. В этом случае к кассирам и банкомату будет приходить примерно равное количество клиентов;

2) service – блок захватывает для заявки заданное количество ресурсов, задерживает заявку, а затем освобождает захваченные ею ресурсы. В нашей модели этот объект будет моделировать обслуживание клиента кассиром (или каким-то другим служащим банковского отделения). Задайте следующие свойства объекта: укажите, что в очереди к кассирам может находиться до 20 человек (свойство queueCapacity); задайте время обслуживания (свойство delayTime). Будем полагать, что время обслуживания имеет треугольное распределение с минимальным средним значением 2.5, средним – 6 и максимальным – 11 минут;

3) ResourcePool – задает ресурсы определенного типа. Он должен быть подсоединен к объектам, моделирующим занятие и освобождение ресурсов (в нашем случае это объект Service). В нашем случае моделирует банковских кассиров. Перейдите в окно свойств объекта и задайте число кассиров (свойство capacity) – 4.

Соедините объекты соответствующим образом (рис. 10).

Рис. 10.

8. Запустите модель. Сколько посетителей обслужилось у банковских работников и сколько у банкомата? Какова средняя длина очереди к банкомату? Оцените занятость кассиров и банкомата.

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

Сначала изобразим на анимации следующие элементы: банкомат (в виде кружка) и ведущую к нему очередь клиентов (в виде ломаной); клиентов анимируем человечками; две диаграммы для отображения статистики занятости банкомата и очереди к банкомату. Анимация модели рисуется в той же диаграмме (в графическом редакторе), в которой задается и диаграмма моделируемого процесса (см. рис. 11).

  1.  Перетащите элемент Овал из палитры Презентация на диаграмму класса активного объекта.
  2.  Перейдите на страницу Динамические панели свойств данной фигуры. В поле Цвет заливки введите следующую строку:                 delay.size() > 0 ? red : green. Здесь delay – это имя нашего объекта Delay. Функция size() возвращает число человек, обслуживаемых в данный момент времени. Во время моделирования будет меняться цвет фигуры. Если банкомат занят, то цвет кружка будет красным, в противном случае – зеленым.
  3.  На странице свойств объекта delay введите в поле Фигура анимации имя нашего овала: oval. Выберите из выпадающего списка Тип анимации – Одиночная.

  1.  Нарисуйте ломаную, которая будет обозначать на анимации очередь к банкомату (см. рис. 12). Чтобы нарисовать ломаную, сделайте двойной щелчок мышью по элементу Ломаная  в палитре (при этом его значок должен поменяться на этот: ). Далее рисуйте ломаную точка за точкой, последовательно щелкая мышью в тех точках диаграммы, куда Вы хотите поместить вершины ломаной. Чтобы завершить рисование, добавьте последнюю точку ломаной двойным щелчком мыши.  Очень важно, какую точку ломаной Вы создаете первой. Заявки будут располагаться вдоль нарисованной Вами ломаной в направлении от конечной к начальной. Поэтому рисуйте ломаную слева направо и поместите рядом с банкоматом конечную точку ломаной, которая будет соответствовать в этом случае началу очереди.
  2.  На странице свойств объекта queue введите polyline в поле Фигура анимации.
  3.  Создайте анимацию клиента. Откройте палитру Картинки. Эта палитра содержит набор картинок, которые наиболее часто используются пользователями AnyLogic при создании моделей. Перетащите элемент Человек из палитры на диаграмму графического редактора и поместите ее за границу видимой области презентации (т.е. выше верхней границы презентации). Для этого понадобится передвинуть весь холст диаграммы немного вниз (нажмите правую кнопку мыши и перетащите мышь, не отпуская кнопки), затем поднимите холст обратно. По умолчанию эта картинка будет называться person.
  4.  Перейдите в окно свойств объекта source. В поле Фигура анимации заявки введите имя нашей фигурки человека: person.

Рис. 11.

  1.  Перейдите в окно свойств эксперимента. На вкладке модельное время в выпадающем меню Остановить выберите – нет.
  2.  Запустите модель. Увеличьте скорость выполнения модели. Пронаблюдайте за анимацией Вашей модели.
  3.  Добавьте диаграмму для отображения средней занятости банкомата. Для этого перетащите элемент Столбиковая диаграмма  из палитры Статистика на диаграмму класса и поместите ее справа от фигуры банкомата.
  4.  Перейдите на страницу Основные панели свойств диаграммы. Щелкните мышью по кнопке Добавить элемент данных. При этом появится  секция свойств того элемента данных, который будет отображаться на этой диаграмме. Измените Заголовок на Загрузка банкомата.
  5.  Введите delay.statsUtilization.mean() в поле Значение. Здесь delay – это имя нашего объекта Delay. У каждого объекта Delay есть встроенный набор данных statsUtilization, занимающийся сбором статистики использования этого объекта. Функция mean() возвращает среднее из всех измеренных этим набором данных значений. Вы можете использовать и другие методы сбора статистики, такие, как min() или max(). Полный список методов можно найти на странице документации этого класса набора данных: StatisticsContinuous (на английском языке).
  6.  Перейдите на страницу Внешний вид панели свойств. Измените расположение легенды диаграммы (справа относительно диаграммы) с помощью кнопок Расположение. Измените размер диаграммы, как показано на рис. 11.
  7.  Аналогичным образом добавьте еще одну столбиковую диаграмму для отображения средней длины очереди. Измените ее размер, как показано на рис. 11. Перейдите на страницу Внешний вид панели свойств диаграммы и измените направление столбцов диаграммы так, чтобы столбцы столбиковой диаграммы росли влево.
  8.  Добавьте элемент данных, который будет отображаться на диаграмме. Задайте Заголовок: Длина очереди и задайте Значение: queue.statsSize.mean(). Здесь statsSize – это имя объекта типа «статистика» StatisticsContinuous, производящего сбор статистики размера очереди объекта Queue.
  9.  Запустите модель и пронаблюдайте за занятостью банкомата и средней длиной очереди с помощью только что созданных диаграмм.

Теперь добавим анимацию для банковских кассиров (см. рис. 12):

  1.  Нарисуйте ломаную, которая будет отображать очередь клиентов, ожидающих обслуживания кассирами. Рисуйте ее, как и раньше, слева направо.
  2.  Справа от этой ломаной нарисуйте еще одну, из четырех точек, чтобы указать на анимации места, в которых будут находиться банковские служащие.
  3.  Нарисуйте на презентации кассиров. Будем отображать их одной из двух картинок – одна будет показывать занятого кассира, а другая – свободного. Для этого перетащите элемент Изображение  из палитры Презентация в то место диаграммы, где у нас находится человечек. Перейдите в панель Свойства. Щелкните мышью по кнопке Добавить и выберите файл изображения, которое будет отображать данная фигура. Картинка busy.png (изображение занятого клерка) находится в каталоге <каталог AnyLogic>\resources\tutorials\Bank Office. Чтобы сохранить исходный размер изображения, установите флажок Исходный размер.

  1.  Аналогичным образом добавьте изображение занятого кассира (клерка).

Рис. 12.

  1.  Перейдите в окно свойств объекта service. Введите polyline1 (имя ломаной, задающей форму очереди, ведущей к кассирам) в поле Фигура анимации (queue).
  2.  Перейдите в окно свойств объекта resourcePool. В поле Фигура анимации введите имя ломаной, задающей местоположение кассиров на презентации: polyline2. Выберите Набор из выпадающего списка Тип анимации. В поле Фигура анимации свободного ресурса введите имя изображения свободного клерка: image1. В поле Фигура анимации занятого ресурса введите image.

  1.  Откройте палитру Элементы управления и перетащите элемент Бегунок из палитры на нашу диаграмму. Поместите бегунок под объектом ResourcePool, чтобы было понятно, что с помощью этого бегунка будет меняться количество ресурсов, задаваемых именно этим объектом (см. рис. 12).
  2.  Перейдите в окно свойств данного элемента. Введите 4 в поле Максимальное значение (будем варьировать количество клерков от 0 до 4). Введите resourcePool.capacity в поле Связать с.

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

11. Добавьте в модель сбор статистики о времени обслуживания клиента.

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

1) Создайте класс сообщения Customer (сообщения этого класса будут представлять клиентов банковского отделения). Для этого в панели Проект, щелкните правой кнопкой мыши по элементу модели и выберите Создать | Java класс из контекстного меню. В диалоговом окне Новый Java класс в поле Имя введите имя нового класса Customer (рис. 13); выберите из выпадающего списка Базовый класс полное имя данного класса: com.xj.anylogic.libraries.enterprise.Entity (этот класс будет наследоваться от базового класса заявки Entity). Щелкните по кнопке Далее.

Рис. 13

2) На второй странице мастера задайте параметры создаваемого Java-класса: enteredSystem тип double для сохранения момента времени, когда клиент пришел в банковское отделение; startWaiting тип double для сохранения момента времени, когда клиент встал в очередь к банкомату (рис. 14).

Рис. 14

3) Щелкните по кнопке Готово. Откроется редактор кода созданного класса (можно его закрыть). 

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

4) Перетащите элемент Данные гистограммы с палитры Статистика на диаграмму класса Main. Задайте свойства элемента: Кол-во интервалов – 50; Нач. размер интервала – 0.01; измените Имя на waitTimeDistr.

5) Создайте еще один элемент сбора данных гистограммы (Ctrl + перетащите только что созданный объект данных гистограммы, чтобы создать его копию). Измените Имя этого элемента на timeInSystemDistr.

6) Перейдите в свойства блока source и задайте новые свойства. Измените поле Класс заявки на Customer. В поле  Новая заявка – введите new Customer(). Это позволит напрямую обращаться к полям класса заявки Customer в коде динамических параметров этого объекта. В поле Действие при выходе Введите entity.enteredSystem = time();. Этот код будет сохранять время создания заявки-клиента в переменной enteredSystem нашего класса заявки Customer. Функция time() возвращает текущее значение модельного времени.

7) Измените свойства блока queue. Введите Customer в поле Класс заявки. Добавьте код в поля:

Действие при входе: entity.startWaiting = time();

Действие при выходе:

waitTimeDistr.add(time()-entity.startWaiting); 

Данный код добавляет время, в течение которого клиент ожидал обслуживания, в объект сбора данных waitTimeDistr;

8) Измените свойства блока sink. Введите Customer в поле Класс заявки. Введите в поле Действие при входе следующий код:

timeInSystemDistr.add(time()-entity.enteredSystem);. Этот код добавляет полное время пребывания клиента в банковском отделении в объект сбора данных гистограммы timeInSystemDistr.

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

10) Добавьте гистограмму для отображения распределения времени ожидания клиента в очереди. Перетащите элемент Гистограмма из палитры Статистика. Поместите ее под элементом сбора данных (см. рис. 15). В свойствах гистограммы щелкните мышью по кнопке Добавить данные и введите в поле Данные имя соответствующего элемента – waitTimeDistr. На гистограмме будет отображаться распределение времени ожидания клиента. Измените Заголовок на Распределение времени ожидания.

11) Аналогичным образом добавьте еще одну гистограмму, расположите ее под ранее добавленной. В поле Данные введите timeInSystemDistr. На гистограмме будет отображаться распределение времени пребывания клиента в системе. Измените Заголовок на Распределение времени пребывания.

Рис. 15.

12. Запустите модель. Включите режим виртуального времени. Какой вид примет распределение времени ожидания и времени пребывания клиента в системе?  

13. Внесите изменения в модель банковского отделения согласно варианту (см. табл. 1). Запустите модель. Сравните результаты прогона модели с исходными и новыми значениями входных данных. Сделайте выводы. Эффективно ли работает система с новыми значениями интенсивностей входного потока и потока обслуживания? Как изменилось среднее время ожидания клиента? Влияет ли количество кассиров на время пребывания клиента в системе?

Таблица 1.

Вари-ант

Распределение вероятности прихода клиентов в банк

Вероятность обращения  к кассиру/   

к банкомату

Время обслуживания клиента кассиром

Количе-ство кассиров

1

Экспоненциальное

1/1

4 ± 2

1

2

Экспоненциальное

1/2

6 ± 2

2

3

Экспоненциальное

2/1

8 ± 2

3

4

Экспоненциальное

1/3

7 ± 2

4

5

Экспоненциальное

3/1

9 ± 2

5

6

Нормальное

1/1

8 ± 2

1

7

Нормальное

1/2

7 ± 2

2

8

Нормальное

2/1

9 ± 2

3

9

Нормальное

1/3

4 ± 2

4

10

Нормальное

3/1

6 ± 2

5

11

Треугольное

1/1

2 ± 2

1

12

Треугольное

1/2

7 ± 2

2

13

Треугольное

2/1

9 ± 2

3

14

Треугольное

1/3

4 ± 2

4

15

Треугольное

3/1

6 ± 2

5

16

Равномерное

1/1

4 ± 2

1

17

Равномерное

1/2

6 ± 2

2

18

Равномерное

2/1

7 ± 2

3

19

Равномерное

1/3

8 ± 2

4

20

Равномерное

3/1

9 ± 2

5

       

14. Самостоятельно постройте еще одну новую модель системы массового обслуживания. (Варианты заданий приведены ниже.) Назовите модель smo2.alp. Создайте анимацию для модели. Анимация модели должна включать следующие элементы: название и описание модели; слайдеры для задания параметров модели; графики и/или диаграммы; анимацию процесса обслуживания. Используйте закрашенные прямоугольники или встройте изображение для задания фона Вашей презентации. Настройте также две области просмотра презентации модели: область просмотра логики (схема процесса) и область просмотра анимации. (Область просмотра задается с помощью палитры Презентация.) Сравните результаты моделирования в GPSS и AnyLogic.

Варианты 1, 11

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

Пустые баночки для фруктового сока поступают в накопитель 1 автоматизированной линии каждые 3,5 ± 1,1 секунд. После этого в них автоматически заливается сок. Одновременно может заливаться лишь одна баночка, на что расходуется 1,5 секунды. Потом баночки поступают в накопитель 2 для выполнения операции закупоривания. Для этого расходуется 1,6 секунд времени на каждую баночку. Одновременно может обрабатываться одна баночка. Потом они попадают в накопитель 3 для следующей операции. В конце конвейера баночки устанавливаются в ящики. Время установки одной баночки представляет собой равномерно распределенную случайную величину в интервале 2,0 ± 0,8 секунд. Одновременно может устанавливаться в ящик не больше двух баночек. В начале смены в накопителе 2 находится 20 баночек, а в накопителе 3 – 36  баночек. Определите, какие размеры должны иметь накопители. Промоделируйте работу линии на протяжении одной смены (8 часов).

Варианты 2, 12

В состав двухпроцессорной системы входят: два процессора под символическими именами PR1 и PR2 и оперативная память.

Система обрабатывает потока заявок Z1 и Z2, поступающих в систему по равномерному закону с интервалами 4 2 и 25 2 соответственно. Поток заявок Z2 обрабатывается только на PR1 и придерживает обработку заявок потока Z1, после чего прерванная заявка дообслуживается. Обслуживание заявок потока Z1 происходит по условию: если очередь PR2 > PR1,то обслуживание происходит на PR1, иначе на PR2. После обработки на процессорах заявка помещается в оперативную память. Смоделируйте систему без потерь.

Варианты 3, 13

В небольшом кафе работают две официантки (А и B) обслуживая по 5 четырехместных столиков. Официантка А пользуется большей популярностью, чем официантка В. Приходя в кафе, клиент садится за столик официантки В только в том случае, если все места за столиками, которые обслуживает официантка А, заняты. Клиенты приходят в кафе через 2± 1 минут и, если не застают свободных мест, становятся в очередь. Когда клиент садится на освободившееся место, он ждет, пока к нему подойдет официантка и примет у него заказ. Время приема заказа у официантки А занимает 45 ± 15 секунд, у официантки В соответственно 17 ± 4 секунд. Приняв заказ у клиента, официантки сразу же его выполняют. Время выполнения заказа обеими официантками составляет 160 ± 20 секунд. После получения заказа клиент на протяжении 16 ± 4 минут обедает и уходит из кафе. Официантки обслуживают клиентов по принципу FIFO и в каждый момент времени могут обслуживать не более одного клиента. Определить время ожидания в очереди и время, которое клиент проводит за столиком кафе. Промоделируйте работу кафе на протяжении 10 ч.

 Варианты 4, 14

В студенческом машинном зале расположены две ЭВМ и одно устройство подготовки данных (УПД). Студенты приходят с интервалом в 8  2 мин, и треть из них хочет использовать УПД и ЭВМ, а остальные только ЭВМ. Допустимая очередь в машинном зале составляет четыре человека, включая работающего на УПД. Работа на УПД занимает 8  1 мин, а на ЭВМ – 17 мин. Кроме того, 20% работавших на ЭВМ возвращается для повторного использования УПД и ЭВМ. Смоделируйте работу машинного зала в течение 60 ч. Определите загрузку УПД, ЭВМ и вероятность отказа в обслуживании вследствие переполнения очереди.

Варианты 5, 15

В вычислительном классе на обработку принимаются три класса заданий А, В, С. Исходя из наличия оперативной памяти ЭВМ задания классов А и В могут решаться одновременно, а задания класса С монополизируют ЭВМ. Задания класса А поступают через 20  5 мин, класса В – через 20  10 мин и класса С – через 30  10 мин и требуют для выполнения: класс А – 20  5 мин, класс В – 21  3 мин и класс С – 28  5 мин. Задачи класса С загружаются в ЭВМ, если она полностью свободна. Задачи класса А и В могут дозагружаться к решающей задаче. Смоделируйте процесс обслуживания в течение 80 ч. Определите загрузку ЭВМ.

Варианты 6, 16

Пять операторов работают в справочной телефонной сети города, сообщая номера телефонов по запросам абонентов, которые обращаются по одному номеру - 09. Автоматический коммутатор переключает абонента на того оператора, в очереди которого ожидает наименьшее количество абонентов, причем наибольшая допустимая длина очереди перед оператором – два абонента. Если все очереди имеют максимальную длину, вновь поступивший вызов получает отказ. Обслуживание абонентов операторами длится 30 ± 20 с. Вызовы поступают в справочную через каждые 5 ± 3 с. Смоделируйте  обслуживание 200 вызовов. Подсчитайте количество отказов. Определите коэффициенты  загрузки  операторов справочной.

Вариант 7, 17

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

Телевизоры попадают на станцию технического контроля каждые 5,5 ± 2,0 минут. На станции работают 2 контролера одинаковой квалификации. Операция контроля одного телевизора состоит из двух проверок:

1) для первой проверки каждому контролеру необходимо 9± 3 минут;

2) для второй проверки на всех контролеров имеется один тестовый прибор (продолжительность тестирования – 1,2 минут).

Приблизительно 85 процентов телевизоров успешно проходят проверку и попадают в цех упаковки, а другие 15 процентов – в цех наладки, в котором находится один рабочий – наладчик. Время наладки (замены) неисправных блоков распределено в соответствии c равномерным законом в интервале 30 ±7 минут. Промоделируйте функционирование станции технического контроля в течение 8 часов.

Вариант 8, 18

Информационно-поисковая библиографическая система построена на базе двух ЭВМ и имеет один терминал для ввода и вывода информации. Первая ЭВМ обеспечивает поиск научно-технической литературы (вероятность обращения к ней – 0,7), а вторая – медицинской (вероятность обращения к ней – 0,3). Пользователи обращаются к услугам системы каждые 5 ± 2 мин. Если в очереди к терминалу ожидают 10 пользователей, то вновь прибывшие пользователи получают отказ в обслуживании. Поиск информации на первой ЭВМ продолжается 6 ± 4 мин, а на второй 3 ± 2 мин. Для установления связи с нужной ЭВМ и передачи текста запроса пользователи тратят 2 ± 1 мин. Вывод результатов поиска происходит за 1 мин. Смоделируйте процесс работы системы за 8 часов.

Вариант 9, 19

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

1) собирает следующую деталь;

2) ожидает возможности использования печи по принципу FIFO;

3) использует печь;

4) возвращается к п. 1.

Время, необходимое на выполнение различных операций: сборка – 30±5 мин.; обжиг – 8±2 мин.

Необходимо построить на GPSS модель описанного процесса. Определить оптимальное число сборщиков, использующих одну печь, т.е. такое количество, которое дает наибольшую прибыль при моделировании в течение 40 часов модельного времени. Предполагается, что в течение рабочего дня нет перерывов, а рабочими днями являются все дни (без выходных).

Варианты 10, 20

В вычислительный зал с интервалом времени 105 мин. Заходят пользователи, желающие произвести расчеты на ЭВМ. В зале имеется 8 ЭВМ, к одной ЭВМ подключен принтер. Время, необходимое для решения задачи и вывода результатов на печать, составляет 155 мин. Вывод результатов на печать не мешает проведению расчетов, время печати составляет 32 мин. В зал не допускается более 10 студентов. Смоделировать процесс обслуживания 100 пользователей. Подсчитать число пользователей, не нашедших свободного места в очереди.  Определите среднее число пользователей в очереди, а также коэффициенты загрузки всех ЭВМ и принтера.

Вариант 21

Самолеты  прибывают  для  посадки в   район крупного аэропорта каждые 10 ± 5 мин. Если взлетно-посадочная полоса свободна, прибывший  самолет получает  разрешение на посадку. Если полоса занята, самолет выполняет полет по кругу и  возвращается к аэропорту через каждые  4 мин. Если  после пятого круга самолет не  получает разрешения на  посадку, он отправляется на запасной аэродром. В аэропорту через каждые 10 ±  2 мин к взлетно-посадочной полосе выруливают готовые к взлету машины   и получают  разрешение на взлет, если полоса свободна. Для взлета и посадки самолеты занимают полосу ровно на 2 мин. Если при свободной полосе одновременно один самолет прибывает для посадки, а другой – для взлета, полоса предоставляется взлетающей машине. Смоделируйте  работу аэропорта в течение суток. Подсчитайте количество самолетов, которые взлетели, сели и были направлены на запасной аэродром. Определите коэффициент загрузки взлетно-посадочной полосы.

Вариант 22

Вычислительная система состоит из трех ЭВМ. С интервалом 3  ± 1 мин в систему поступают задания, которые с вероятностями Р1= 0,4, P2= P3= 0,3 адресуются одной из трех ЭВМ. Перед  каждой ЭВМ имеется очередь заданий, длина которой не ограничена. После обработки задания на первой ЭВМ  оно с вероятностью P12 = 0,3 поступает в очередь ко второй ЭВМ и с вероятностью P13 = 0,7 – в  очередь к третьей ЭВМ. После обработки на второй или третьей ЭВМ задание считается выполненным. Продолжительность обработки заданий на  разных ЭВМ характеризуется интервалами времени: Т1= 7 ± 4 мин, T2= 3 ± 1 мин, T3=5 ± 2 мин. Смоделируйте процесс обработки 200 заданий. Определите максимальную длину каждой очереди и коэффициенты загрузки ЭВМ.

Результаты работы

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


ПРИЛОЖЕНИЕ 1

Элементы библиотеки Enterprise Library

Source

Назначение:

Генерация заявок на вход СМО. Класс заявки: по умолчанию Entitity.

Методы:

void inject(int n). Создает n заявок.

int count(). Возвращает количество заявок, созданных объектом.

Свойства:

int arrivalType (Способ генерации заявок). Заявки могут пребывать следующими способами:

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

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

int entitiesPerArrival. Количество заявок, прибывающих за один раз. Свойство доступно, если заявки прибывают согласно интенсивности или по времени между прибытиями. Значение по умолчанию равно одной заявке.

Фигура анимации заявки. Фигура анимации, с помощью которой заявки, создаваемые этим объектом, будут отображаться на презентации.

double rate (Интенсивность прибытия заявок). Свойство доступно, если заявки прибывают согласно интенсивности. Значение по умолчанию равно 1.

Entity newEntity (Новая заявка). Значение по умолчанию равно new Entity()

void onExit (Действие при выходе). Код, выполняемый при генерации заявки в канал СМО.

Queue

Назначение:

Моделирование очереди заявок.

Методы:

int size(). Возвращает количество заявок, находящихся в данный момент в очереди.

boolean canEnter() . Возвращает true, если в очередь может быть добавлена еще одна заявка.

Свойства:

int capacity (Емкость очереди).

boolean enableTimeout (Разрешить уход по таймауту).

double timeout (Таймаут) .

void onExitTimeout (Действие при уходе по таймауту).

boolean enablePreemption (Разрешить вытеснение).

double priority (Приоритет заявки).

void onExitPreempted (Действие при вытеснении).

void onEnter (Действие при входе). Код, выполняемый, когда заявка поступает в объект.

void onExit (Действие при выходе). Код, выполняемый, когда заявка покидает объект.

Delay

Назначение:  Моделирование процессора обслуживания.

Методы:

int size(). Возвращает количество заявок, задерживаемых объектом в текущий момент времени.

boolean canEnter() . Возвращает true, если объект может принять еще одну заявку.

Свойства:

int capacity. Вместимость объекта Delay. Задает максимальное количество заявок, которое может одновременно находиться в объекте. Значение по умолчанию равно одной заявке.

void onEnter (Действие при входе). Код, выполняемый, когда заявка поступает в объект.

void onExit (Действие при выходе). Код, выполняемый, когда заявка покидает объект.

double delayTime (Время задержки заявки).

Service

Назначение:

Моделирование очереди с процессором обслуживания с учетом использованных ресурсов.

Методы:

int queueSize() . Возвращает количество заявок во вложенном объекте Queue.

int delaySize(). Возвращает количество заявок во вложенном объекте Delay.

Свойства:

int quantity (Количество ресурсов). Выражение, вычисляющее количество ресурсов, необходимое текущей заявке. Значение по умолчанию равно одному.

void onEnterDelay (Действие при начале задержки). Код, выполняемый, когда заявка поступает во вложенный объект Delay.

ResourcePool resourcePool (Объект ResourcePool). Выражение, возвращающее имя объекта ResourcePool, задающего ресурсы, которые требуются заявке. Если поле пусто, или если выражение будет возвращать null, то будут использоваться ресурсы объекта ResourcePool, соединенного с портом access этого объекта Service. Значение по умолчанию null.

int quantity (Количество ресурсов, захваченных заявкой).

double delayTime (Время задержки, вычисленное для заявки)

Объект поддерживает свойства «Действие при входе», «Действие при выходе».

ResourcePool

Назначение:

Моделирование ресурсов.

Методы:

int idle(). Возвращает количество свободных ресурсов.

int busy(). Возвращает количество занятых ресурсов.

Свойства:

boolean unitsAreObjects (Ресурсы моделируются). Определяет, как моделируются ресурсы: как индивидуальные объекты или просто как их количество. Значение по умолчанию: «Как индивидуальные объекты (true)». Если ресурсы выделяются в виде количества их нельзя отобразить на презентации.

int capacity (Количество ресурсов). Свойство доступно если количество ресурсов задано напрямую. Значение по умолчанию равно одному.

Seize

Назначение:

Моделирование очереди с захватом для заявки заданного количества ресурсов определенного типа. При захвате ресурса заявка мгновенно покидает этот объект. Освободить ресурс можно с помощью объекта Release. Все захваченные ресурсы должны быть освобождены до того, как заявка будет уничтожена с помощью объекта Sink.

Методы:

int size() – возвращает количество заявок во вложенном объекте Queue.

T get( int index ) – возвращает  заявку, находящуюся в очереди в позиции с номером index (ближайшая к выходу из очереди позиция имеет номер 0).

T remove( T entity ) – извлекает заявку entity из очереди и возвращает ее. Если такой заявки в очереди обнаружено не будет, метод вернет null.

Свойства:

int quantity (Количество ресурсов). Выражение, вычисляющее количество ресурсов, необходимое текущей заявке. Значение по умолчанию равно одному.

void onEnter (Действие при входе) Код, выполняемый, когда заявка поступает в объект.

void onExit (Действие при выходе). Код, выполняемый, когда заявка покидает объект.
ResourcePool resourcePool (Объект ResourcePool). Выражение, возвращающее имя объекта ResourcePool, задающего ресурсы, которые требуются заявке. Если поле пусто, или если выражение будет возвращать null, то будут использоваться ресурсы объекта ResourcePool, соединенного с портом access этого объекта Seize. Значение по умолчанию null.

int capacity (Вместимость очереди). Параметр виден, если не выбрана опция Максимальная вместимость. Вместимость вложенной очереди queue. Значение по умолчанию: 100

Release

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

Перед уничтожением заявки все захваченные ею ресурсы должны быть освобождены.

Свойства:

int releaseAll (Освобождать). Определяет, будет ли этот объект освобождать Указанные ресурсыВсе захваченные ресурсы данного типа или Все захваченные ресурсы (любого типа).
Значение по умолчанию: 
Указанные ресурсы (Release.SPECIFIED)
Локальная переменная: Release.SPECIFIED, Release.ALL_OF_POOL, Release.ALL.

int quantity (Количество ресурсов). Виден, если объект будет Освобождать Указанные ресурсы. Выражение, вычисляющее количество ресурсов, которое необходимо освободить текущей заявке. Если количество ресурсов равно нулю, то наличие ресурсов не проверяется (может ни быть соединен объект ресурсов, ни указано его имя в поле Объект ResourcePool, т.e. там будет значение null), при этом заявка будет просто проходить через объект.
Значение по умолчанию: -1 (при отрицательном значении будут осв
обождаться все ресурсы заданного типа).

ResourcePool resourcePool (Объект ResourcePool). Выражение, возвращающее имя объекта ResourcePool, задающего ресурсы, которые требуется освободиить. Если Вы оставите поле пустым, или если выражение будет возвращать null, то будут использоваться ресурсы объекта ResourcePool, соединенного с портом access этого объекта Release. Значение по умолчанию: null.

SelectOutput

Назначение:

Используется для выбора канала СМО при моделировании.

Свойства:

boolean conditionIsProbabilistic (Выход true выбирается ). Определяет, как будет производиться маршрутизация заявок: будут ли заявки направляться на выход true (верхний порт outT) при выполнении условия, заданного в поле «Условие» или же случайно с заданной вероятностью, определенной в поле «Вероятность [0..1]». boolean condition (Условие). Свойство доступно, если выход true выбирается при выполнении условия. Условие, вычисляемое для входящей заявки. Если оно выполняется (равно true), то заявка покидает объект через порт outT, если нет - через порт outF. Значение по умолчанию randomTrue( 0.5 ) просто разделяет поток заявок на две равные части.

code onEnter (Действие при входе ). Код, выполняемый, когда заявка поступает в объект. Синтаксис:

code onExitTrue (Действие при выходе true). Код, выполняемый, когда заявка покидает объект через порт outT.

code onExitFalse (Действие при выходе false).

Код, выполняемый, когда заявка покидает объект через порт outF.

Sink

Назначение:

Уничтожение заявок, после их выхода из канала СМО.

Метод:

int count() – возвращает количество заявок, уничтоженных объектом Sink.

Свойства:

void onEnter (Действие при входе). Код, выполняемый при поступлении заявки в объект.

PAGE   \* MERGEFORMAT22


1

2

3

K

Z1

Z2

PR1

Процессор1

PR2

Прцессор2

ОР

Оперативная память

Стеллажи

Настройщик

Контроллер 1

Контроллер 2

Стеллажи

В цех упаковки

Телевизоры


 

А также другие работы, которые могут Вас заинтересовать

28878. Внешняя политика Петра I. Провозглашение России империей 31.5 KB
  Провозглашение России империей. Разрешение этих задач было необходимо для обеспечения внешней безопасности России на юге и на западе. Ее преобладание тяжело сказывалось на государствах близких к Балтийскому морю: на Дании Польше России. У России Ингрию и Карелию.
28879. Эпоха дворцовых переворотов и укрепление позиций дворянства 31.5 KB
  В отечественной истории являлось эпохой дворцовых переворотов напрямую связанных с реформами Петра I. – Меньшиков Толстой и другие под прикрытием гвардии добилась провозглашения вдовы Петра Екатерины I 1725 1727 гг. В период царствования малолетнего Петра II 17271730 гг. На трон была провозглашена племянница Петра I вдовствующая герцогиня Курляндская Анна Ивановна 17301740 гг.
28880. Внутренняя политика эпохи «просвещенного абсолютизма» Екатерины II 29 KB
  Созыв Комиссии был обусловлен необходимостью кодификации законов т. В дебатах депутатов Уложенной комиссии находит выражение острая борьба трех основных направлений по проблемам модернизации общественного устройства России: консерваторов умеренных и реформаторов. Третья наиболее последовательная и радикальная группа не имея возможности выступать открыто сформировалась за пределами Уложенной комиссии. под предлогом начавшейся русскотурецкой войны Екатерина прервала заседания Комиссии чтобы больше их не возобновлять.
28881. Внешняя политика России во второй половине XVIII века 27.5 KB
  Внешняя политика России во второй половине XVIII века. была приведена чрезвычайно энергично со стороны России. В ответ на попытки Турции вернуть отошедшие к России территории русские войска в 178З г. к России отошло побережье Черного моря от Южного Буга до Днестра.
28882. Основные тенденции мирового развития в первой половине XIX века 23.5 KB
  Основные тенденции мирового развития в первой половине XIX века: 1 Мир развивался под влиянием промышленной революции; Промышленная революция – переход от ручного труда к машинному. Причины пром. Новшества пром. промть – автоматич.
28883. Попытки модернизации государственного строя в России в первой половине XIX в. 34.5 KB
  Попытки модернизации государственного строя в России в первой половине XIX в. который одним из первых в России осознал необходимость реформ. Сперанского автора всеобъемлющей системы обновления государственного управления в России. Сперанский завершил разработку Введения к уложению государственных законов предполагавшего превращение России из самодержавного государства в конституционное имеющее законодательные преграды на пути возрождения деспотизма.
28884. Внешняя политика России в первой половине XIX в. 30.5 KB
  Внешняя политика России в первой половине XIX в. Успешной для России была война со Швецией 1808 1809 гг. по итогам которой России отходила вся территория Финляндии и Аландские острова. В соответствии с заключительным актом конгресса к России отошла большая часть герцогства Варшавского Познань была отдана Пруссии Галиция Австрии.
28885. Реформы 60–70 годов XIX в.и их историческое значение 36.5 KB
  Явственно проявилось отставание России от передовых капиталистических государств в экономической и социально-политической сферах. было приведение экономической и социально-политической системы России в соответствие с потребностями времени. Значение реформ: способствовали более быстрому развитию капиталистических отношений в России. Были сделаны первые шаги по расширению роли общественности в жизни страны и превращении России в буржуазную монархию.
28886. Социально-экономическое и политическое развитие страны в пореформенный период (60–80 гг. XIX в.) 33 KB
  В пореформенный период в России был начат масштабный переход к индустриальному обществу в целом того же типа который сложился в странах Западной Европы. Основная черта пореформенной эволюции сельского хозяйства в России проявлялась в том что оно принимало все более торговый предпринимательский характер. Огромное значение в индустриализации России имело развитие транспорт главным образом железнодорожного. Быстрое развитие капитализма приводило к тому что для возникновения привилегированных прослоек типа рабочей аристократии Запада в...