Опубликован: 07.11.2014 | Доступ: свободный | Студентов: 442 / 37 | Длительность: 15:17:00
ISBN: 978-5-9556-0161-8
Тема: САПР
Лекция 8:

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

< Лекция 7 || Лекция 8: 12345 || Лекция 9 >
Сегмент Мастера

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

Сегмент построен на четырёх объектах queue и четырёх объектах delay.

  1. Из палитры Презентация перетащите элемент Прямоугольник. Оставьте имя, предложенное системой.
  2. На странице Местоположение и размер панели Свойства введите в поля X: 740, Y: 30, Ширина: 200, Высота: 410.
  3. Перетащите элемент text на прямоугольник и на странице Текст панели Свойства в поле вместо text введите Мастера.
  4. Перетащите указанные объекты из Библиотеки моделирования процессов на агент Main. Разместите, дайте имена и соедините их так, как показано на Рис. 8.4.
  5. У объектов очМастеров1…очМастеров4 укажите максимальную вместимость и тип заявки Заявка.
  6. У объектов мастера1…мастера4 установите свойства:
    • Тип заявки: Заявка
    • Тип Определённое время
    • Время задержки entity.времяР
    • Включить сбор статистики Установите флажок
  7. Свойство Вместимость у этих же объектов укажите колМастеров1…колМастеров4 соответственно.
  8. Действия При выходе установите соответственно:
    коэфИспМаст1=мастера1.statsUtilization.mean();
    коэфИспМаст2=мастера2.statsUtilization.mean();
    коэфИспМаст3=мастера3.statsUtilization.mean();
    коэфИспМаст4=мастера4.statsUtilization.mean();

С выходов 1…3 объекта видРемЗаяв1 заявки сразу поступают в объект очМастеров1 (queue).

С выходов объектов видРемЗаяв2…видРемЗаяв4 заявки поступают на объекты свобМастер1_2, свобМастер1_3, свобМастер1_4 соответственно. В принятых именах первая цифра означает группу мастеров, а вторая - тип заявки. Этими объектами проверяются условия. Например, объектом свобМастер1_3 проверяется условие:

(очМастеров1.size()==0)&&
(мастера1.size()<колМастеров1)&&(мастера3.size()!=0)

Пуста ли очередь мастеров 1 группы? И есть ли свободные мастера 1 группы? И заняты ли мастера 3 группы? Если сложное условие, состоящее из трёх простых условий, выполняется, заявка с выхода true объекта свобМастер1_3 на объект мастера1.

Аналогичные проверки осуществляются в объектах свобМастер1_3, свобМастер1_4.

Если условие не выполняется, то заявка с выходов false поступает в очередь очМастеров2…очМастеров4 соответственно.

Объекты свобМастер2_3, свобМастер2_4 проверяют возможности в текущий момент времени выполнения заявок 3 и 4 типов мастерами 2 группы.

Объект свобМастер3_4 проверяет возможность выполнения заявок 4 типа мастерами 3 группы.

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

увеличить изображение
Рис. 8.4. Сегменты Диспетчеры и Мастера
Сегмент Учёт выполненных заявок

Сегмент предназначен для учёта количества выполненных заявок по типам и видам ремонтов, а также для определения вероятности выполнения заявок в целом.

Сегмент построен на пяти объектах selectOutput5 и одном объекте sink.

  1. Из палитры Презентация перетащите элемент Прямоугольник. Оставьте имя, предложенное системой.
  2. На странице Местоположение и размер панели Свойства введите в поля X: 970, Y: 30, Ширина: 250, Высота: 410.
  3. Перетащите элемент text на прямоугольник и на странице Текст панели Свойства в поле вместо text введите Учёт выполненных заявок.
  4. Перетащите указанные элементы на прямоугольник. Разместите, соедините и дайте имена согласно Рис. 8.5.
    Сегменты Мастера и Учёт выполненых заявок

    увеличить изображение
    Рис. 8.5. Сегменты Мастера и Учёт выполненых заявок
  5. Свойства элементов установите согласно Табл. 8.3.
    Таблица 8.3.
    Свойства Значение
    Имя поТипамЗаяв1
    Использовать Условия
    Условие 1 entity.типЗ==1
    Действия При выходе 1 выпЗаявТип1++;
    выпЗаявТип++;
    верВыпЗаяв1=
    выпЗаявТип1/постЗаявТип1;
    Условие 2 entity.типЗ==2
    Действия При выходе 2 выпЗаявТип2++;
    выпЗаявТип++;
    верВыпЗаяв2=
    выпЗаявТип2/постЗаявТип2;
    Условие 3 entity.типЗ==3
    Действия При выходе 3 выпЗаявТип3++;
    выпЗаявТип++;
    верВыпЗаяв3=
    выпЗаявТип3/постЗаявТип3;
    Условие 4 entity.типЗ==4
    Действия При выходе 4 выпЗаявТип4++;
    выпЗаявТип++;
    верВыпЗаяв4=
    выпЗаявТип4/постЗаявТип4;
    Имя выпРемЗаяв1
    Использовать Условия
    Условие 1 entity.видР==1
    Действия При выходе 1 выпРемВида11++;
    Условие 2 entity.видР==2
    Действия При выходе 2 выпРемВида12++;
    Условие 3 entity.видР==3
    Действия При выходе 3 выпРемВида13++;
    Имя выпРемЗаяв2
    Использовать Условия
    Условие 1 entity.видР==1
    Действия При выходе 1 выпРемВида21++;
    Условие 2 entity.видР==2
    Действия При выходе 2 выпРемВида22++;
    Условие 3 entity.видР==3
    Действия При выходе 3 выпРемВида23++;
    Имя выпРемЗаяв3
    Использовать Условия
    Условие 1 entity.видР==1
    Действия При выходе 1 выпРемВида31++;
    Условие 2 entity.видР==2
    Действия При выходе 2 выпРемВида32++;
    Условие 3 entity.видР==3
    Действия При выходе 3 выпРемВида33++;
    Имя выпРемЗаяв4
    Использовать Условия
    Условие 1 entity.видР==1
    Действия При выходе 1 выпРемВида41++;
    Условие 2 entity.видР==2
    Действия При выходе 2 выпРемВида42++;
    Условие 3 entity.видР==3
    Действия При выходе 3 выпРемВида43++;
  6. Установите значения свойств объекта sink1:
    • Тип заявки: Заявка
    • Действие при входе верВыпЗаяв=выпЗаявТип/постЗаявТип

Объект поТипамЗаяв1 осуществляет разделение и учёт выполненных заявок по типам, а также рассчитывает вероятности выполнения заявок каждого типа. В количество поступивших заявок, а, следовательно, и в расчёт вероятностей входят и те заявки, которым отказано в обслуживании.

Объекты выпРемЗаяв1…выпРемЗаяв4 учитывают количество видов ремонтов, выполненных по заявкам каждого типа.

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

Отладка модели

Построение модели закончено. Выделите в окне Проекты Simulation:Main. На странице Основные установите Фиксированное начальное число (воспроизводимые прогоны) и Начальное число: 892. Перейдите на страницу Модельное время, выберите из списка Остановить: В заданное время. Введите Конечное время: 1440000 (модельное время \uparrow в 1000).

Результаты моделирования

увеличить изображение
Рис. 8.6. Результаты моделирования

Запустите модель. Если вы всё делали согласно нашим рекомендациям, то ошибок не будет.

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

Результаты моделирования при исходных данных согласно постановке задачи должны быть такими как на Рис. 8.6. Например, заявок 1 типа выполнено 37,612. Вероятность выполнения составляет 0, 979. Всего выполнено заявок всех типов 188,476 с вероятностью 0,980.

< Лекция 7 || Лекция 8: 12345 || Лекция 9 >
Игорь Маникин
Игорь Маникин

Коллеги, спасибо за очень информативный и полезный курс. Прошёл три лекции. Столкнулся с проблемой, что обе модели не могут закончить расчёт по причине ограничения бесплатной версии "создано максимально допустимое число динамически создаваемых агентов (50000)". По скриншотам Лекции 2 видно, что да, модель создает гораздо больше 50000 агентов. В принципе, мне то и диплом не особо нужен. Но хотелось бы выполнить практические работы. Нет ли возможности откорректировать эту проблему? Или может я чего не так делаю?

Еще раз спасибо за прекрасный курс!

Артём Нагайцев
Артём Нагайцев

Выдает ошибку "entity cannot be resolved to a variable" при попытке запуска. В чем может быть причина? Ошибка в строках

entity.time_vxod=time(); 

time_obrabotki.add(time()-entity.time_vxod);