Опубликован: 15.02.2013 | Доступ: свободный | Студентов: 257 / 0 | Длительность: 16:52:00
ISBN: 978-5-9556-0146-5
Лекция 9:

Модель предоставления ремонтных услуг

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >

Построение событийной части модели

Строить событийную часть модели будем последовательной реализацией средствами AnyLogic выделенных ранее сегментов (см. п. 8.1.4):

  • источники заявок;
  • диспетчеры;
  • мастера;
  • учёт выполненных заявок.
  1. Создайте область просмотра для размещения элементов модели на диаграмме класса Main. Из палитры Презентация перетащите элемент Область просмотра. Перейдите на страницу Основные панели Свойства. В поле Имя введите МодРемУслуги.
  2. Задайте, как будет располагаться область просмотра относительно ее якоря, с помощью элемента управления Выравнивать по: Верхн. левому углу.
  3. Выберите режим масштабирования из выпадающего списка Масштабирование: Подогнать под окно.
  4. Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 0, Y: 0, Ширина: 1240, Высота: 460.
  5. Из палитры Презентация перетащите элемент Прямоугольник. Оставьте имя, предложенное системой. В прямоугольнике мы разместим объект source для имитации поступления заявок.
  6. Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 20, Y: 120, Ширина: 100, Высота: 140.
  7. Перетащите элемент text на прямоугольник и на странице Основные панели Свойства в поле Текст: введите Источники заявок.
  8. Перетащите ещё один элемент Прямоугольник. Оставьте имя, предложенное системой. В этом прямоугольнике мы разместим объекты сегмента Диспетчеры для имитации работы диспетчеров.
  9. Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 130, Y: 30, Ширина: 590, Высота: 410.
  10. Перетащите элемент text на прямоугольник и на странице Основные панели Свойства в поле Текст: введите Диспетчеры.

На рис. 8.3 показаны объекты двух сегментов: Источники заявок и Диспетчеры. Приступим к их построению.

Сегменты Источники заявок и Диспетчеры

увеличить изображение
Рис. 8.3. Сегменты Источники заявок и Диспетчеры
Сегмент Источники заявок
  1. Из Основной библиотеки перетащите объект source на прямоугольник с названием Источники заявок (см. рис. 8.3).
  2. В панели Проект щелкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать/Java класс.
  3. Появится диалоговое окно Новый Java класс. В поле Имя: введите имя нового класса Заявка.
  4. В поле Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щелкните Далее.
  5. Появится вторая страница Мастера создания Java класса. Добавьте следующие поля Java класса:
    double типЗ;
    double видР;
    double времяР;
  6. Оставьте выбранными флажки Создать конструктор и Создать метод toString ().
  7. Щелкните кнопку Готово. Вы увидите редактор кода и в автоматически созданный код вашего Java класса. Закройте код.
  8. Выделите объект source. На странице Основные панели Свойства уберите флажок Отображать имя. В полях Класс заявки: и Новая заявка Entity замените Заявка.

Установите:

  • Заявки прибывают согласно Времени между прибытиями
  • Время между прибытиями exponential(1/(Tp/n))
  • Количество заявок, прибывающих за один раз 1
  • Действие при выходе
    entity.типЗ=uniform();
     entity.видР=uniform();

Java-кодом в поля entity.типЗ и entity.видР заносятся равномерно распределённые случайные числа. Они нужны далее для розыгрыша кодов типов заявок и кодов видов ремонта.

Сегмент Диспетчеры

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

Данный сегмент реализуется шестью объектами selectOutput5, восемью объектами selectOutput, объектами queue, delay и sink (см. рис. 8.3).

  1. Перетащите указанные объекты (или, перетащив один, скопируйте остальные, но перед копированием измените свойства, общие для всех копируемых объектов, например, класс заявки Заявка) из Основной библиотеки на диаграмму класса Main. Соедините их так, как показано на рис. 8.3.
  2. Установите свойства объектов согласно табл. 8.2.
Таблица 8.2.
Свойства Значение
Имя типЗаявки
Использовать Условия
Условие 0 entity.типЗ<=p1
Действие при выходе 0 entity.типЗ=1;
постЗаявТип1++;
постЗаявТип++;
Условие 1 entity.типЗ<=p2
Действие при выходе 1 entity.типЗ=2;
постЗаявТип2++;
постЗаявТип++;
Условие 2 entity.типЗ<=p3
Действие при выходе 2 entity.типЗ=3;
постЗаявТип3++;
Условие 3 постЗаявТип++;
Действие при выходе 3 entity.типЗ<=p4
entity.типЗ=4;
постЗаявТип4++;
постЗаявТип++;
Имя oтказ
Выход true выбирается C заданной вероятностью
Вероятность [0..1] 0,98
Имя поТипамЗаяв
Использовать Условия
Условие 0 entity.типЗ==1
Условие 1 entity.типЗ==2
Условие 2 entity.типЗ==3
Условие 3 entity.типЗ==4
Имя видРемЗаяв1
Использовать Условия
Условие 0 entity.видР<=p11
Действие при выходе 0 entity.видР=1;
entity.времяР=exponential(1/T11);
Условие 1 entity. видР<=p12
Действие при выходе 1 entity.видР=2;
entity.времяР=exponential(1/T12);
Условие 2 entity.видР=<p13
Действие при выходе 2 entity.видР=3;
entity.времяР=exponential(1/T13);
Имя видРемЗаяв2
Использовать Условия
Условие 0 entity.видР<=p21
Действие при выходе 0 entity.видР=1;
entity.времяР=exponential(1/T21);
Условие 1 entity. видР<=p22
Действие при выходе 1 entity.видР=2;
entity.времяР=exponential(1/T22);
Условие 2 entity.видР=<p23
Действие при выходе 2 entity.видР=3;
entity.времяР=exponential(1/T23);
Имя видРемЗаяв3
Использовать Условия
Условие 0 entity.видР<=p31
Действие при выходе 0 entity.видР=1;
entity.времяР=exponential(1/T31);
Условие 1 entity. видР<=p32
Действие при выходе 1 entity.видР=2;
entity.времяР=exponential(1/T32);
Условие 2 entity.видР=<p33
Действие при выходе 2 entity.видР=3;
entity.времяР=exponential(1/T33);
Имя видРемЗаяв4
Использовать Условия
Условие 0 entity.видР<=p41
Действие при выходе 0 entity.видР=1;
entity.времяР=exponential(1/T41);
Условие 1 entity. видР<=p42
Действие при выходе 1 entity.видР=2;
entity.времяР=exponential(1/T42);
Условие 2 entity.видР=<p43
Действие при выходе 2 entity.видР=3;
entity.времяР=exponential(1/T43);
Имя свобМастер1_2
Выход true выбирается При выполнении условия
Условие (очМастеров1.size()==0)&&
(мастера1.size()<колМастеров1)&&
(мастера2.size()!=0)
Имя свобМастер1_2
Выход true выбирается При выполнении условия
Условие (очМастеров1.size()==0)&&
(мастера1.size()<колМастеров1)&&
(мастера2.size()!=0)
Имя свобМастер1_3
Выход true выбирается При выполнении условия
Условие (очМастеров1.size()==0)&&
(мастера1.size()<колМастеров1)&&
(мастера3.size()!=0)
Имя свобМастер1_4
Выход true выбирается При выполнении условия
Условие (очМастеров1.size()==0)&&
(мастера1.size()<колМастеров1)&&
(мастера4.size()!=0)
Имя свобМастер2_3
Выход true выбирается При выполнении условия
Условие (очМастеров2.size()==0)&&
(мастера2.size()<колМастеров2)&&
(мастера3.size()!=0)
Имя свобМастер2_4
Выход true выбирается При выполнении условия
Условие (очМастеров2.size()==0)&&
(мастера2.size()<колМастеров2)&&
(мастера4.size()!=0)
Имя свобМастер3_4
Выход true выбирается При выполнении условия
Условие (очМастеров3.size()==0)&&
(мастера3.size()<колМастеров3)&&
(мастера4.size()!=0)
Имя очДисп
Максимальная вместимость Установить флажок
Имя Дисп
Задержка задается Явно
Время задержки normal(To1,T1)
Вместимость колДисп

Объектом типЗаявки разыгрывается код типа заявки. Например, в поступившей заявке entity.типЗ=0.723. Проверяется условие 0: entity.типЗ=0.723<=p1=0.5. Условие 0 не выполняется. Тогда проверяется условие 1: entity.типЗ= 0.723 <=p2=0.75. Условие 1 выполняется. Заявка пропускается на выход 1. При этом выполняется код, записанный в поле Действие при выходе 1,

entity.типЗ=2;
постЗаявТип2++;
постЗаявТип++;

Кроме записи кода 2 в поле entity.типЗ=2, учитывается количество поступивших заявок 2 типа и количество всех типов поступивших заявок. Последнее в дальнейшем используется для определения вероятности выполнения заявок.

С выходов 0…3 объекта типЗаявки заявки поступают в очДисп (объект queue) с максимальной вместимостью, а затем в объект дисп (delay), имитирующий время работы одного из диспетчеров с одной заявкой.

Объект отказ (selectOutput) предназначен для розыгрыша отказа в принятии заявки с вероятностью q=2\;\%. Заявки, получившие отказ, уничтожаются объектом sink.

Принятые к выполнению заявки распределяются по типам объектом поТипамЗаяв. С выходов 0…3 этого объекта заявки поступают на объекты видРемЗаяв1…видРемЗаяв4 соответственно. Аналогичным образом как объектом типЗаявки этими объектами разыгрываются для заявок 1…4 типов коды видов 1…3 ремонтов.

Функции остальных объектов сегмента Диспетчеры рассмотрим в п. 8.1.7.3.

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >
Алексей Гроссман
Алексей Гроссман

Здравствуйте, прошел курс "Концептуальное проектирование систем в AnyLogic и GPSS World". Можно ли получить по нему сертификат? У нас в институте требуют сертификаты для создания портфолио.

Елена Блинаева
Елена Блинаева