Концептуальное проектирование систем в AnyLogic и GPSS World

Модель функционирования терминала

Разбить на страницы
Показывать лекцию целиком

Модель в GPSS World

Постановка задачи

Общий вид терминала показан на рис. 7.1. Территория терминала обозначена A, примыкающая городская территория - B.

  • Автомобиль (транспортное средство), груженный или порожний, попадает в порт по дороге общего пользования C. В случае отсутствия мест на парковке D терминала, дорога становится накопительным буфером (очередь с дисциплиной FIFO).
  • Если имеется свободное место, автомобиль въезжает на парковку, водитель выходит и с документами идет в офис E. Процедура парковки занимает около 2 мин.
  • В офисе водитель дожидается своей очереди на обслуживание у одного из окошек. Дождавшись, он оформляет документы на въезд. Получив их, он возвращается к своему автомобилю. Оформление документов занимает, вместе с ходьбой, около 10 мин. Одновременно на терминал отсылается заявка на обслуживание данного автомобиля.
  • Если ворота F имеют свободную полосу, автомобиль подъезжает на полосу досмотра. Здесь у него проверяют разрешение на въезд и проводят физический досмотр контейнера (пломб, наличия повреждений, отсутствия посторонних лиц и пр.). Досмотр занимает 2 мин. (рис 7.1) Схема терминала
  • Автомобиль следует на оперативную парковку H, расположенную рядом с зоной погрузки-разгрузки I. Среднее время движения 2 мин. Этот участок дороги внутри терминала может использоваться как накопительный буфер, если нет свободных мест на парковке у зоны погрузки.
  • Автомобиль становится на парковку H и ждет своей очереди на погрузку (момента выполнения заявки на его обслуживание, отправленной на шаге 3). Среднее время выполнения заявки составляет 10 мин.

    Когда со стороны терминала готово транспортное средство для его погрузки-разгрузки (заявка на обслуживание автомобиля выполнена), и имеется свободная ячейка для обработки автомобиля в зоне H, автомобиль подъезжает к свободной ячейке для погрузки. Среднее время движения 2 мин. Если заявка была выполнена до приезда автомобиля и имеется свободная ячейка, автомобиль может прямо подъехать к ячейке, минуя парковку 6. Среднее время обслуживания автомобиля 5 мин.

  • Обслуженный автомобиль по терминальному проезду подъезжает к выездным воротам терминала J. Среднее время движения 2 мин.
  • После осмотра автомобиль покидает терминал. Среднее время осмотра 2 мин.
  • Необходимо разработать имитационную модель и промоделировать функционирование терминала в течение 8 ч.

    Определить:

  • количество обработанных автомобилей;
  • среднее время обработки одного автомобиля;
  • коэффициент обработки автомобилей терминалом;
  • показатели использования элементов терминала.
  • Программа модели в GPSS World

    В модели автомобили следует представить транзактами. Все остальные элементы терминала (парковку D, офис Е, полосы у ворот F и J, места у зон I и Z) - многоканальными устройствами (МКУ). Дадим МКУ имена согласно постановке задачи, добавив знак подчеркивания, например, D_.

    Введем масштабирование: 1 единица модельного времени соответствует 1 мин, то есть, например, время моделирования равно 8*60 = 480 единиц модельного времени.

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

    Декомпозиция терминала и состав сегментов модели определяются разработчиком. Введем следующие сегменты:

  • ввод исходных данных;
  • событийная часть модели;
  • задание времени моделирования и вычисление результатов моделирования.
  • Как видно, в данном случае можно обойтись без разделения событийной части модели на сегменты.

    Ниже приводится программа модели.

    ; Модель функционирования терминала
    ; Многоканальные устройства
    D_  Storage  10 ;Имитирующее парковку D
    E_  Storage  5  ;Имитирующее офис Е
    F_  Storage  5  ;Имитирующее полосы ворот F
    I_  Storage  7  ;Имитирующее места у зоны I
    ZP_  Storage  2  ;Имитирующее места в зоне Z
    J_  Storage  7  ;Имитирующее ворота J
    ; Исходные данные
    timeA  EQU  9  ;Среднее время приезда транспорта
    timeD  EQU  2  ;Среднее время парковки на D
    timeE  EQU  10 ;Среднее время оформления документов в офисе Е
    timeF  EQU  2  ;Среднее время досмотра на воротах F
    timeFH  EQU  2 ;Среднее время движения от F к Н
    timeZ  EQU  10 ;Среднее время выполнения заказа на обслуживание автомобиля
    timeI  EQU  5  ;Среднее время обслуживания автомобиля в зоне I
    timeIJ  EQU  2  ;Среднее время движения от I к J
    timeJ  EQU  2  ;Среднее время досмотра на воротах J
    timeMod  EQU  480 ;Время моделирования
    ; Статистические таблицы
    C_  QTABLE  C_,1,1,50
    E_  QTABLE  E_,1,1,30
    ZP_  QTABLE  ZP_,1,1,40
    TMeanP  TABLE  M1,40,1,80
    ; Событийная часть модели
      GENERATE  
      (Exponential(371,0,timeA));Имитация прибытия автотранспорта
    KolPrib  QUEUE  C_ ;Занять очередь на парковку D
      ENTER  D_ ;Занять одно место на парковкеD
      DEPART  C_ ;Покинуть очередь на парковку
      ADVANCE  (Exponential(83,0,timeD));Имитация парковки на D
      QUEUE  E_ ;Встать в очередь в офис Е
      ENTER  E_ ;Занять окошко в офисе Е
      DEPART  E_ ;Покинуть очередь в офис Е
      ADVANCE  (Exponential(113,0,timeE))
    ;Имитация оформления документов в офисе Е
      LEAVE  E_ ;Покинуть офис Е
      SPLIT  1,,1 ;Расщепление для отправки заявки
      TEST E  P1,1,Met1 ;Автотранспорт к воротам F, заявка в Z
      QUEUE  ZP_ ;Занять очередь в зону Z
      ENTER  ZP_ ;Занять место обслуживания заявки в зоне Z
      DEPART  ZP_ ;Покинуь очередь в зону Z
      ADVANCE  (Exponential(213,0,timeZ));Имитация выполнения заявки в зоне Z
      LEAVE  ZP_ ;Освободить место обслуживания заявки в зоне Z
      TRANSFER  ,Met2
    Met1  QUEUE  F_ ;Встать в очередь к воротам F
      ENTER  F_ ;Занять полосу у ворот F
      DEPART  F_ ;Покинуть очередь к воротам F
      LEAVE  D_ ;Освободить место на парковке
      ADVANCE  (Exponential(183,0,timeF));Имитация досмотра у ворот F
      LEAVE  F_ ;Освободить полосу у ворот F
      ADVANCE  (Exponential(163,0,timeFH));Имитация движения от F к H
    Met2  ASSEMBLE  *1 ;Фиксация - выполнение заявки
      ENTER  I_ ;Занять ячейку I
      ADVANCE  (Exponential(315,0,timeI))
    ;Имитация обслуживания в зоне I
      LEAVE   I_ ;Освободить ячейку I
      ADVANCE  (Exponential(511,0,timeIJ));Имитация движения от I к J
      ENTER  J_ ;Занять место на воротах J
      ADVANCE  (Exponential(703,0,timeJ))
    ;Имитация осмотра на воротах J
      LEAVE  J_ ;Освободить место на воротах J
    KolObr  SAVEVALUE  timeSum+,M1
      TABULATE  TMeanP
      TERMINATE
    
    ; Задание времени моделирования и расчет результатов
      GENERATE  TimeMod
      TEST L  X$Prog,TG1,Met3
      SAVEVALUE  Prog,TG1
    Met3  TEST E  TG1,1,Met4 
      SAVEVALUE  TimeObr,(X$TimeSum/N$KolObr) 
    ; Среднее время обработки транспорта
      SAVEVALUE  KoefIsp,(N$KolObr/N$KolPrib) 
    ; Коеффициент использования терминала
      SAVEVALUE  KolObrCar,(N$KolObr/X$Prog)
    ; Количество обработанных транспортов
    Met4  TERMINATE  1
      START  10000

    Модель функционирования терминала в AnyLogic

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

  • Для ввода исходных данных используем Параметр и Бегунок. Выполните команду Файл/Создать/Модель на панели инструментов.
  • В поле Имя модели диалогового окна Новая модель введите Терминал. Выберите каталог, в котором будут сохранены файлы модели. Щелкните кнопку Далее.
  • На открывшейся второй странице Мастера создания модели выберите Начать создание модели "с нуля". Щелкните кнопку Далее.
  • Создадим две области просмотра. Первую для ввода исходных данных и вывода результатов моделирования, вторую - для размещения элементов модели.

  • Создайте вторую область просмотра для размещения элементов модели на диаграмме класса Main. Из палитры Презентация перетащите в любое место элемент Область просмотра.
  • Перейдите на страницу Основные панели Свойства. В поле Имя: введите Модель_Терминал.
  • Задайте, как будет располагаться область просмотра относительно ее якоря, с помощью элемента управления Выравнивать по: Верхн. левому углу.
  • Выберите режим масштабирования из выпадающего списка Масштабирование: Подогнать под окно.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 0, Y: 0, Ширина: 680, Высота: 370.
  • Из палитры Презентация перетащите элемент Прямоугольник. Оставьте имя, предложенное системой.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 20, Y: 20, Ширина: 640, Высота: 340.
  • Из палитры Презентация перетащите второй элемент Область просмотра.
  • Перейдите на страницу Основные панели Свойства. В поле Имя: введите Данные.
  • Задайте, как будет располагаться область просмотра относительно ее якоря, с помощью элемента управления Выравнивать по: Верхн. левому углу.
  • Выберите режим масштабирования из выпадающего списка Масштабирование: Подогнать под окно.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 0, Y: 1000, Ширина: 560, Высота: 400.
  • Из палитры Презентация перетащите элемент Скруглённый прямоугольник. Оставьте имя, предложенное системой.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 20, Y: 1030, Ширина: 520, Высота: 350.
  • Перетащите элемент text и на странице Основные панели Свойства в поле Текст: введите Исходные данные и результаты моделирования.
  • В Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Исходные данные и результаты моделирования. Разместите их и дайте имена так, как показано на рис. 7.2.
  • Значения свойств установите согласно табл. 7.1. Имена параметров (в том числе и знак подчёркивания) приняты те же, что и в GPSS-модели.
  • В Палитре выделите Элементы управления. Перетащите элементы Бегунок. Разместите их так, как показано на рис. 7.2. Значения свойств установите согласно табл. 7.1.
    ПараметрБегунок
    ИмяТипЗначение по умолчаниюСвязать сМинимальное значениеМаксимальное значение
    D_int10D_150
    E_int5E_150
    F_int5F_150
    I_int7I_150
    ZP_int2ZP_150
    J_int7J_150
    timeDdouble2timeD150
    timeEdouble10timeE150
    timeFdouble2timeF150
    timeIdouble5timeI150
    timeZdouble10timeZ150
    timeJdouble2timeJ150
    timeAdouble9timeA150
    timeFHdouble2timeFH150
    timeIJdouble2timeIJ150
  • Для вывода результатов моделирования используем элемент Простая переменная. В Палитре выделите Основная. Перетащите элементы Простая переменная. Разместите их и дайте им имена так, как показано на рис. 7.2. Тип переменных double.
  • В GPSS World коэффициенты использования элементов терминала, длины к ним очередей определяются системой автоматически и выводятся в стандартном отчёте.

    Коэффициенты использования элементов терминала (в нашей модели их будут имитировать объекты delay) автоматически определяются и в AnyLogic. Тем не менее, для удобства их чтения в ходе и по окончании моделирования мы ввели переменные KoefIsp_E, KoefIsp_F, KoefIsp_Z, KoefIsp_I, KoefIsp_J.

    Для определения максимальных длин очередей к этим элементам терминала нами также введены переменные очередь_Е, очередь_F, очередь_Z, очередь_I, очередь_J.

    Переменные KolObrCar, TimeObr, KoefIsp имеют тот же смысл, что и в GPSS-модели.

    (рис 7.2) Размещение элементов для ввода исходных данных и вывода результатов моделирования

    Переменная kolJ введена для счета количества обработанных транспортов. Переменная TimeSum введена для счета суммарного времени обработки всех транспортов. По значениям этих переменных рассчитывается среднее время обработки TimeObr одного транспорта.

    В последующем для определения количественных значений каждой из этих переменных мы напишем соответствующие Java-коды.

    Событийная часть модели

    Объекты событийной части модели показаны на рис. 7.3.

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

  • source (один);
  • queue (восемь);
  • delay (восемь);
  • split (один);
  • match (один);
  • sink (один).
  • Создадим событийную часть модели. Для неё мы уже создали область присмотра с именем Модель_Терминал и перетащили элемент Прямоугольник, в котором и разместим все элементы.

  • Перетащите объект source. Установите его свойства согласно табл. 7.2.
  • Создайте нестандартный класс заявки Car с полями:
    int id;
    double vxod;
  • Дополнительное поле id нестандартного класса заявки Car введено для проверки объектом match условия объединения двух заявок в одну.

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

    Перетащите остальные объекты, соедините так, как показано на рис. 7.3. Последовательно выделяя эти объекты, установите их свойства согласно табл. 7.3.

    (рис 7.3) Элементы модели Terminal
    Свойства объекта source
    ИмяСвойстваЗначения
    поток_транспортаОтображать имяУстановите флажок
    Класс заявкиCar
    Заявки прибывают согласноВремени между прибытиями
    Время между прибытиямиexponential(1/timeA)
    Количество заявок, прибывающих за один раз1
    Новая заявкаnew Car()
    Действие при выходе entity.id =
    поток_транспорта.count();
    entity.vxod = time();
    Свойства объектов событийной части модели
    СвойстваЗначение
    Имяочередь_на_D_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Максимальная вместимостьУстановить флажок
    Включить сбор статистикиУстановить флажок
    Имяпарковка_D_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Задержка задаетсяЯвно
    Время задержкиexponential(1/timeD)
    ВместимостьD_
    Включить сбор статистикиУстановить флажок
    Имяочередь_в_офис_E_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Вместимость10
    Действие при подходе к выходуif (очередь_E <
    очередь_в_офис_E_.size())
    очередь_E =
    очередь_в_офис_E_.size();
    Включить сбор статистикиУстановить флажок
    Имяоформл_докум_в_офисе_Е_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Задержка задаетсяЯвно
    Время задержкиexponential(1/timeE)
    ВместимостьE_
    Имяотправка_заявки_в_Z
    Отображать имяУстановить флажок
    Класс заявкиCar
    Количество копий1
    Новая заявка (копия)new Car
    Действие при выходе копииentity.id = original.id;
    entity.vxod = original.vxod;
    Имяочередь_в_зону_Z_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Вместимость100
    Действие при подходе к выходуif (очередь_Z < очередь_в_зону_Z_.size())
    очередь_Z =
    очередь_в_зону_Z_.size();
    Включить сбор статистикиУстановить флажок
    Имявыполн_заявки_в_зоне_Z_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Задержка задаетсяЯвно
    Время задержкиexponential(1/timeZ)
    ВместимостьZP_
    Включить сбор статистикиУстановить флажок
    Имяфиксация_выполн_заявки_в_Z_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Условие соответствияentity1.id == entity2.id
    Вместимость 1100
    Вместимость 2100
    Действие при выходе 1entity.id = 0;
    Действие при выходе 2if (очередь_I < фиксация_выполн_заявки_в_Z_.size2())
    очередь_I = фиксация_выполн_заявки_в_Z_.size2();
    Время задержкиexponential(1/timeIJ)
    Вместимость10
    Включить сбор статистикиУстановить флажок
    Имяочередь_на_ворот_J_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Вместимость10
    Действие при подходе к выходуif (очередь_J < очередь_на_ворот_J_.size())
    очередь_J = очередь_на_ворот_J_.size();
    Включить сбор статистикиУстановить флажок
    Имяосмотр_на_ворот_J_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Задержка задаетсяЯвно
    Время задержкиexponential(1/timeJ)
    ВместимостьJ_

    Поясним необходимость и целесообразность применения некоторых объектов. В модели заявка имитирует транспорт. Объект split предназначен для расщепления одной заявки в нашей модели на две заявки. Одна поступает, как документ, в зону Z, а вторая, как транспорт, продолжает движение. Когда в зоне Z необходимые для обработки транспорта действия выполнены (подготовлены документы), объект match фиксирует этот момент, то есть синхронизирует дальнейшее движение транспорта. Вторая заявка направляется в объект sink и уничтожается. Как известно, объединить две заявки в одну (а значит не использовать объект sink) можно с помощью объекта combine. Однако в нашем случае combine использовать нельзя, так как он не проверяет выполнение у заявок условий, необходимых для их уничтожения. Поэтому могут быть объединены различные заявки. Объект match проверяет условия объединения, установленные в нашем случае разработчиком модели в дополнительном поле id нестандартного класса заявки Car (entity1.id == entity2.id), именно двух заявок в одну. То есть синхронизации движения заявки как документа и заявки как автомобиля при применения объекта combine не обеспечивается.

    В табл. 7.4 указаны свойства объекта sink.

    СвойстваЗначение
    Имявыход_J
    Отображать имяУстановить флажок
    Класс заявки
    Действие при входеCar
    if (entity.id != 0){
    kolJ ++ ;
    KolObrCar = kolJ/10000;
    KoefIsp = kolJ/поток_транспорта.count();
    TimeSum += (time() - entity.vxod);
    TimeObr = TimeSum / kolJ;
    KoefIsp_E = оформл_докум_в_офисе_E_.statsUtilization.mean();
    KoefIsp_F = досмотр_у_ворот_F_.statsUtilization.mean();
    KoefIsp_Z = выполн_заявки_в_зоне_Z_.statsUtilization.mean();
    KoefIsp_I = обслуж_в_зоне_I_.statsUtilization.mean();
    KoefIsp_J = осмотр_на_ворот_J_.statsUtilization.mean();}

    Остановимся на коде свойства Действие при входе. Заявки с выхода 1 объекта match можно было бы не направлять на этот объект sink, а добавить еще объект sink и уничтожать их там. Но у нас ознакомительная версия, которая не позволяет иметь в модели на диаграмме одного класса больше двадцати объектов (в образовательной версии это возможно). Нам не хватило ровно одного объекта, поэтому пришлось поступить так (размещать объекты на разных диаграммах ради этого мы посчитали нецелесообразным). Для реализации такого приема на выходе 1 объекта match entity.id = 0, то есть поле id обнуляется и все заявки с таким полем игнорируются. Но в количестве заявок, вошедших в объект sink, они учитываются. Поэтому пришлось для счета количества обработанных транспортов ввести переменную kolJ, хотя имеется стандартная функция count(), которая возвращает количество заявок, вошедших в данный объект. Любых заявок, без какого-либо их разделения.

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

    Результаты проведенных нами на построенных моделях экспериментов сведены в табл. 7.5. В этот раз мы выполнили по одному эксперименту на каждой модели. В GPSS-модели начальные числа генераторов случайных чисел устанавливали произвольно, а в AnyLoic-модели установили число 1876. В GPSS World выполнили 10 000 прогонов, а в AnyLogic увеличили время моделирования в 10 000 раз, то есть моделировали в течение 4 800 000 мин.

    ПоказателиСистемы моделирования
    GPSS WorldAnyLogic
    KolObrCar53,3153,41
    TimeObr35,48536,109
    KoefIsp11
    KoefIsp_E0,2220,222
    KoefIsp_F0,0440,044
    KoefIsp_Z0,5560,556
    KoefIsp_I0,0790,08
    KoefIsp_J0,0320,032
    очередь_E55
    очередь_F11
    очередь_Z2120
    очередь_I2222
    очередь_J11
    Машинное время25 мин 34 с25 c

    Как видно, результаты моделирования идентичны. Кроме машинного времени, которое в GPSS World составляет 25 мин 34 с, то есть примерно в 65 раз больше, чем в AnyLogic. Различие в количестве обработанных в течение 8 часов автомобилей (KolObrCar) и среднего времени обработки одного автомобиля (TimeObr) незначительно. Коэффициенты использования элементов терминала и максимальные длины очередей к ним одинаковые.

    Эксперименты

    Далее поступим так. Проведем эксперименты с моделями в GPSS World и AnyLogic. В GPSS World это будет дисперсионный анализ, а в AnyLogic - оптимизация стохастических моделей. В результате мы получим оптимальные значения факторов и показатели функционирования терминала, которые и оценим.

    Первый отсеивающий эксперимент в GPSS World

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

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

    Уровни факторовФакторы
    timeAtimeЕtimeFtimeItimeZtimeFH
    Нижний101025102
    Верхний2015410154
  • Запустите GPSS World. Откройте модель Terminal. Выберите Edit / Insert Experiment / Screening … (Правка / Вставить эксперимент / Отсеивающий …). Откроется диалоговое окно Screening Experiment Generator (Генератор отсеивающего эксперимента). Приступите к заполнению полей диалогового окна.
  • В поля Experiment Name (Имя эксперимента) и Run Procedure Name (Имя процедуры запуска) введите, например, Terminal и RunTerminal соответственно (рис. 7.4). Имена эксперименту и процедуре запуска эксперимента дает пользователь.
  • Введите ранее выбранные согласно стратегическому планированию эксперимента факторы (табл. 7.6), начиная с фактора А. В поле Name (User Variable) (Имя (Переменная пользователя)) введите имя фактора, в поля Value1 и Value2 - его нижний и верхний уровни соответственно. Запомните соответствие между факторами и именами переменных.
  • Ниже идет группа Fraction (Часть полного эксперимента). Установите Full, что соответствует полному факторному эксперименту. Справа под Run Count появится число 64, так как $$2^6=64$$. Это число наблюдений, которое нужно сделать в эксперименте. Количество прогонов в каждом наблюдении определим позже при тактическом планировании эксперимента. (рис 7.4) Диалоговое окно (заполненное) Screening ExperimentGenerator (Генератор отсеивающего эксперимента)
  • В поле Expression (Выражение) группы Result (Результат) введите выражение, по которому вычисляется время обработки одного автомобиля: X$TimeSum/N$KolObr.
  • После группы Result (Результат) расположены два флажка, позволяющие выбирать опции. При выборе опции Generate Run Procedure вместе с экспериментом создается стандартная процедура запуска, которую пользователь может корректировать согласно своим требованиям. Выбор второй опции Load F11 with CONDUCT Command закрепляет команду CONDUCT за функциональной клавишей F11. Тогда после создания объекта "Процесс моделирования" для запуска эксперимента нужно только нажать функциональную клавишу F11. Выберите обе опции.
  • Создайте Plus - операторы и вставьте их в нижнюю часть модели Terminal. Для этого нажмите кнопку Insert Experiment (Вставить эксперимент), расположенную в левой нижней части диалогового окна Screening Experiment Generator (Генератор отсеивающего эксперимента) (см. рис. 7.4). Так как была выбрана опция Generate Run Procedure, то создана стандартная процедура запуска.

    Появится её диалоговое окно, дающее возможность пользователю изменить процедуру запуска согласно своим требованиям.

  • Перейдите, пользуясь клавишами вверх-вниз, в конец процедуры запуска. Там в разделе Set up your own run conditions (Задайте свои условия наблюдения) имеются две команды START, между которыми находится команда RESET (рис. 7.5). Поясним назначение этих команд.
  • Первой командой START
    DoCommand("START 100,NP");  /*Get past the Startup Period. */

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

  • Второй командой START
    DoCommand("START 1000,NP");  /*Run the Simulation. */

    определяется количество прогонов в одном наблюдении. В обеих командах используется операторNP - стандартный отчёт не выводится. На рис. 7.5 показаны условия стандартной процедуры запуска после корректировки. Обе команды START мы оставили без изменения, а вот после команды RESET вставили строку

    DoCommand("SAVEVALUE TimeSum,0");/*Run the Simulation. */

    которая обнуляет ячейку TimeSum.

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

  • После корректировки процедуры запуска нажмите Ok. Сгенерированный код Plus - эксперимента появится ниже программы GPSS-модели. (рис 7.5) Условия стандартной процедуры запуска после корректировки
  • Проведите трансляцию, т. е. создайте объект "Процесс моделирования", для чего выполните команду Command / Create Simulation (Команда / Создать процесс моделирования). (рис 7.6) Окно Journal (Журнал) с сообщением об успешном создании объекта "Процесс моделирования"
  • При отсутствии ошибок в сгенерированном эксперименте в окне Journal (Журнал) появится сообщение (см. рис. 7.6).
  • Запустите эксперимент. Для вызова эксперимента предназначена команда CONDUCT. Ранее за функциональной клавишей [F11] была закреплена команда CONDUCT (Edit/Settings/Function Keys (Правка/Настройки /Функциональные клавиши)) выбором соответствующей опции (см. рис. 7.4). Нажмите функциональную клавишу [F11]. Эксперимент начинает работать.
  • В ходе выполнения эксперимента автоматически создается отчет, который по готовности записывается в окно Journal (Журнал) объекта "Процесс моделирования". В отчете содержатся Yield - целевая функция, значения её и значения факторов, при которых получены эти значения целевой функции.
  • Фрагмент отчёта для четырех наблюдений (Run33 … Run36) показан на рис. 7.7. К этим данным и условиям выбора именно этого фрагмента отчёта мы обратимся позднее.
  • В результате дисперсионного анализа определяется также среднее время обработки одного автомобиля при 64 комбинациях выбранных значений факторов (см. табл. 7.8). В данном случае это время составляет 44,962 мин, то есть около 45 мин. (рис 7.7) Окно Journal (Журнал) с отчётом первого эксперимента
  • Сохраните эксперимент, указав имя DispTerminalTimeObr.
  • Второй отсеивающий эксперимент в GPSS World

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

    Согласно постановке на второй эксперимент поступите так.

  • Откройте эксперимент DispTerminalTimeObr.
  • Сохраните эксперимент с именем DispTerminalKolObrCar.
  • Удалите сгенерированный ранее код эксперимента Terminal, который расположен ниже программы модели.
  • Выполните Edit/Insert Experiment/Screening … (Правка/Вставить эксперимент/Отсеивающий …). Откроется диалоговое окно Screening Experiment Generator (Генератор отсеивающего эксперимента) с заполненными полями.
  • Оставьте все поля такими же, лишь замените в поле Expression (Выражение) группы Result (Результат) выражение, по которому вычисляется время обработки одного автомобиля X$TimeSum/N$KolObr, выражением N$KolObr/X$Prog для расчета количества обработанных автомобилей.
  • Выполните пп. 6…16 предыдущего эксперимента.
  • Фрагмент отчёта для четырех наблюдений (Run1…Run4) показан на рис. 7.8. К этим данным мы также обратимся позже.
  • (рис 7.8) Окно Journal (Журнал) с отчетом второго эксперимента

    Первый оптимизационный эксперимент в AnyLogic

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

  • Откройте в AnyLogic модель Terminal.
  • В панели Проект щелкните правой кнопкой мыши элемент модели Terminal и из меню выберите Coздать/ Эксперимент.
  • В появившемся диалоговом окне из списка Тип эксперимента: выберите Оптимизация.
  • В поле Имя введите имя эксперимента, например, OptTerminal. Имя эксперимента должно начинаться с заглавной буквы - таково правило названия классов в Java.
  • В поле Корневой класс модели: выберите Main. Этим выбором вы задали корневой (главный) класс эксперимента. Объект этого класса будет играть роль корня дерева объектов модели, запускаемой экспериментом.
  • Если вы хотите применить к создаваемому эксперименту временные установки другого эксперимента, оставьте установленным флажок Копировать установки модельного времени из: и выберите эксперимент из справа выпадающего списка.
  • Выберите опцию Фиксированное начальное число (воспроизводимые прогоны). В поле начальное число введите 1687. В этом случае при каждом запуске модели генератор случайных чисел будет инициализироваться этим числом. Поэтому прогоны будут воспроизводимыми при очередном запуске модели, что полезно при отладке модели.
  • Щелкните Готово. Появится страница Основные панели Свойства. Установите опцию минимизировать.
  • В поле Целевая функция введите root.TimeObr, так как корневой активный объект модели доступен здесь как root.
  • Оставьте установленным флажок Количество итераций:. Под итерацией понимается один опыт (одно наблюдение). Количество итераций - это цель стратегического планирования эксперимента - определение количества наблюдений и уровней факторов в них для получения полной и достоверной информации о модели.
  • В нашей модели нужно менять факторы timeA, timeЕ, timeF, timeI, timeZ, timeFH. Примем, что каждый фактор имеет два уровня k=2, m=6, тогда число итераций $$I=k^m=2^6=64$$.
  • В поле Количество итераций: установите 64. Задайте параметры, зна-чения которых будут меняться. В таблице на рис. 7.9 пере-числены все параметры корневого объекта Main.
  • Чтобы разрешить варьирование параметров оптимизатором, перейдите на строку с параметром timeA. Щелкните мышью в ячейке Тип. Выберите тип параметра, отличный от значения фиксированный. Чтобы параметры изменялись точно так же, как и в отсеивающем эксперименте GPSS World, то есть имели два уровня (нижний и верхний или минимальное и максимальное значения), выберите тип дискретный. (рис 7.9) Страница Основные панели Свойства эксперимента
  • Задайте диапазон допустимых значений параметра. Для чего введите в ячейку Мин минимальное значение 10, в ячейку Макс максимальное значение 20. Так как параметр дискретный, в ячейке Шаг укажите величину шага 10.
  • Задайте так же остальные параметры, как на рис. 7.9.
  • Перейдите на страницу Репликации панели Свойства.
  • Установите флажок Использовать репликации.
  • Число репликаций (прогонов) в одной итерации (наблюдении) может быть фиксированным или переменным. Фиксированное число репликаций, например, при доверительной вероятности $$\alpha = 0,95$$, точности $$\varepsilon =0,1$$ и стандартном отклонении $$\sigma=0,1$$ может быть определено по формуле: $$N=t^{2}_{\alpha}\frac{\sigma^2}{\varepsilon^2}=1,96^2\frac{0,1^2}{0,01^2}=3,8416 \cdot 100\approx400$$ где $$t_{\alpha}=1,96$$ - табулированный аргумент функции Лапласа.
  • Выберите опцию Фиксированное количество репликаций и в соответствующем поле установите 400.
  • Вернитесь на страницу Основные и щелкните Создать интерфейс.

    Кнопка находится в правом верхнем углу страницы Основные. После щелчка удаляется презентация эксперимента и создаётся интерфейс эксперимента заново согласно его текущим установкам (набору оптимизационных параметров и их свойствам и т. д.). Поэтому создавать интерфейс нужно только после окончания задания параметров эксперимента. На интерфейсе будут видны знаки вопросов напротив оптимизационных параметров.

  • В меню запуск выполните Terminal1/OptTerminal.
  • Щелкните Запустить оптимизацию. Начнет выполняться эксперимент. Во время эксперимента можно видеть на графике изменение значения целевой функции (вертикальная ось). После выполнения 400*64=25 600 прогонов (рис. 7.10) эксперимент остановится.
  • Второй оптимизационный эксперимент в AnyLogic

    Создайте второй эксперимент Оптимизация стохастических моделей в AnyLogic. Цель эксперимента: определение максимального количества обработанных автомобилей в зависимости от тех же факторов и их значений, что и в первом эксперименте.

    (рис 7.10) Результаты первого оптимизационного эксперимента
  • Откройте в AnyLogic модель Terminal.
  • В панели Проект щелкните правой кнопкой мыши элемент модели Terminal и из контекстного меню выберите Coздать/ Эксперимент. В появившемся диалоговом окне из спискаТип эксперимента: выберите Оптимизация.
  • В поле Имя введите имя эксперимента, например, OptTerminal2.
  • Выполните пп. 5…8 первого эксперимента.
  • Установите опцию максимизировать.
  • В поле Целевая функция введите root.KolObrCar.
  • Выполните пп. 11…19 первого эксперимента.
  • Так как в данном эксперименте определяется максимальное количество обработанных автомобилей, то доверительную вероятность оставьте прежней $$\alpha = 0,95$$, а точность и стандартное отклонение достаточно задать равными 1, то есть $$\varepsilon =1$$ и $$\sigma=1$$. Тогда фиксированное число репликаций будет равно: $$N=t^{2}_{\alpha}\frac{\sigma^2}{\varepsilon^2}=1,96^2\frac{1^2}{1^2}=3,8416 \cdot 1\approx4$$
  • Выберите опцию Фиксированное количество репликаций и в соответствующем поле установите 4.
  • Вернитесь на страницу Основные и щелкните Создать интерфейс.
  • В меню запуск выполните Terminal1/OptTerminal2.
  • Щелкните Запустить оптимизацию. После выполнения 4*64=256 прогонов (рис. 7.11) эксперимент остановится. На второй итерации (втором наблюдении) четвертой репликации (прогоне) получено оптимальное значение функционала: 48,08.
  • Перейдем к рассмотрению результатов экспериментов.

    Результаты экспериментов в GPSS World и AnyLogic

    Результаты экспериментов с имитационными моделями функционирования терминала сведены в табл. 7.7 и 7.8.

    Показатели, параметрыСистемы моделирования
    GPSS WorldAnyLogic
    Первый эксперимент
    TimeObr31,84431,799
    timeA2020
    timeE1010
    timeF22
    timeI55
    timeZ1010
    timeFH22
    TimeObr31,60531,799
    timeA2020
    timeE1010
    timeF42
    timeI55
    timeZ1010
    timeFH42
    (рис 7.11) Результаты второго оптимизационного эксперимента

    Как уже отмечалось, значения факторов (параметров) в отсеивающих экспериментах GPSS World и оптимизационных экспериментах AnyLogic изменялись одинаково. Следовательно, в отчете GPSS World об отсеивающем эксперименте можно найти значение целевой функции, рассчитанное по параметрам, которые определены AnyLogic в эксперименте как оптимальные. Показатели и параметры при таком подходе к сравнительной оценке результатов моделирования в табл. 7.7 и 7.8 выделены жирным шрифтом.

    Второй эксперимент
    KolObrCar48,04948,08
    timeA1010
    timeE1010
    timeF22
    timeI55
    timeZ1010
    timeFH22
    KolObrCar48,348,08
    timeA1010
    timeE1510
    timeF42
    timeI55
    timeZ1510
    timeFH42

    В первом эксперименте минимальное время обработки одного автомобиля, определенное оптимизатором AnyLogic, составляет TimeObr = 31,799 мин (см. рис. 7.10) при следующих значениях параметров: timeA = 20, timeЕ = 10, timeF = 2, timeI = 5, timeZ = 10, timeFH = 2.

    По значениям оптимальных параметров находим в отчете GPSS World (см. рис. 7.7) TimeObr = 31,844 мин. Как видим, отличие составляет 0,045 мин.

    Во втором оптимизационном эксперименте максимальное количество обработанных автомобилей, определенное AnyLogic, составляет KolObrCar = 48,08 (см. рис. 7.11) при следующих значениях параметров: timeA = 10, timeЕ = 10, timeF = 2, timeI = 5, timeZ = 10, timeFH = 2.

    По значениям оптимальных параметров находим в отчете GPSS World (см. рис. 7.8) KolObrCar = 48,049. Как видим, результаты практически одинаковы, если учесть измерение показателя целыми значениями (разница 0,03).

    Теперь попробуем в отчётах GPSS World найти значения целевой функции, которые превышают значения, полученные при оптимальных параметрах AnyLogic. Такие значения нашлись, и также включены в табл. 7.7 и 7.8 (не выделены жирным шрифтом). Но и они свидетельствуют о близости полученных результатов моделирования в GPSS World и AnyLogic.

    Страницы:

    Модель в GPSS World

    Постановка задачи

    Общий вид терминала показан на рис. 7.1. Территория терминала обозначена A, примыкающая городская территория - B.

  • Автомобиль (транспортное средство), груженный или порожний, попадает в порт по дороге общего пользования C. В случае отсутствия мест на парковке D терминала, дорога становится накопительным буфером (очередь с дисциплиной FIFO).
  • Если имеется свободное место, автомобиль въезжает на парковку, водитель выходит и с документами идет в офис E. Процедура парковки занимает около 2 мин.
  • В офисе водитель дожидается своей очереди на обслуживание у одного из окошек. Дождавшись, он оформляет документы на въезд. Получив их, он возвращается к своему автомобилю. Оформление документов занимает, вместе с ходьбой, около 10 мин. Одновременно на терминал отсылается заявка на обслуживание данного автомобиля.
  • Если ворота F имеют свободную полосу, автомобиль подъезжает на полосу досмотра. Здесь у него проверяют разрешение на въезд и проводят физический досмотр контейнера (пломб, наличия повреждений, отсутствия посторонних лиц и пр.). Досмотр занимает 2 мин. (рис 7.1) Схема терминала
  • Автомобиль следует на оперативную парковку H, расположенную рядом с зоной погрузки-разгрузки I. Среднее время движения 2 мин. Этот участок дороги внутри терминала может использоваться как накопительный буфер, если нет свободных мест на парковке у зоны погрузки.
  • Автомобиль становится на парковку H и ждет своей очереди на погрузку (момента выполнения заявки на его обслуживание, отправленной на шаге 3). Среднее время выполнения заявки составляет 10 мин.

    Когда со стороны терминала готово транспортное средство для его погрузки-разгрузки (заявка на обслуживание автомобиля выполнена), и имеется свободная ячейка для обработки автомобиля в зоне H, автомобиль подъезжает к свободной ячейке для погрузки. Среднее время движения 2 мин. Если заявка была выполнена до приезда автомобиля и имеется свободная ячейка, автомобиль может прямо подъехать к ячейке, минуя парковку 6. Среднее время обслуживания автомобиля 5 мин.

  • Обслуженный автомобиль по терминальному проезду подъезжает к выездным воротам терминала J. Среднее время движения 2 мин.
  • После осмотра автомобиль покидает терминал. Среднее время осмотра 2 мин.
  • Необходимо разработать имитационную модель и промоделировать функционирование терминала в течение 8 ч.

    Определить:

  • количество обработанных автомобилей;
  • среднее время обработки одного автомобиля;
  • коэффициент обработки автомобилей терминалом;
  • показатели использования элементов терминала.
  • Программа модели в GPSS World

    В модели автомобили следует представить транзактами. Все остальные элементы терминала (парковку D, офис Е, полосы у ворот F и J, места у зон I и Z) - многоканальными устройствами (МКУ). Дадим МКУ имена согласно постановке задачи, добавив знак подчеркивания, например, D_.

    Введем масштабирование: 1 единица модельного времени соответствует 1 мин, то есть, например, время моделирования равно 8*60 = 480 единиц модельного времени.

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

    Декомпозиция терминала и состав сегментов модели определяются разработчиком. Введем следующие сегменты:

  • ввод исходных данных;
  • событийная часть модели;
  • задание времени моделирования и вычисление результатов моделирования.
  • Как видно, в данном случае можно обойтись без разделения событийной части модели на сегменты.

    Ниже приводится программа модели.

    ; Модель функционирования терминала
    ; Многоканальные устройства
    D_  Storage  10 ;Имитирующее парковку D
    E_  Storage  5  ;Имитирующее офис Е
    F_  Storage  5  ;Имитирующее полосы ворот F
    I_  Storage  7  ;Имитирующее места у зоны I
    ZP_  Storage  2  ;Имитирующее места в зоне Z
    J_  Storage  7  ;Имитирующее ворота J
    ; Исходные данные
    timeA  EQU  9  ;Среднее время приезда транспорта
    timeD  EQU  2  ;Среднее время парковки на D
    timeE  EQU  10 ;Среднее время оформления документов в офисе Е
    timeF  EQU  2  ;Среднее время досмотра на воротах F
    timeFH  EQU  2 ;Среднее время движения от F к Н
    timeZ  EQU  10 ;Среднее время выполнения заказа на обслуживание автомобиля
    timeI  EQU  5  ;Среднее время обслуживания автомобиля в зоне I
    timeIJ  EQU  2  ;Среднее время движения от I к J
    timeJ  EQU  2  ;Среднее время досмотра на воротах J
    timeMod  EQU  480 ;Время моделирования
    ; Статистические таблицы
    C_  QTABLE  C_,1,1,50
    E_  QTABLE  E_,1,1,30
    ZP_  QTABLE  ZP_,1,1,40
    TMeanP  TABLE  M1,40,1,80
    ; Событийная часть модели
      GENERATE  
      (Exponential(371,0,timeA));Имитация прибытия автотранспорта
    KolPrib  QUEUE  C_ ;Занять очередь на парковку D
      ENTER  D_ ;Занять одно место на парковкеD
      DEPART  C_ ;Покинуть очередь на парковку
      ADVANCE  (Exponential(83,0,timeD));Имитация парковки на D
      QUEUE  E_ ;Встать в очередь в офис Е
      ENTER  E_ ;Занять окошко в офисе Е
      DEPART  E_ ;Покинуть очередь в офис Е
      ADVANCE  (Exponential(113,0,timeE))
    ;Имитация оформления документов в офисе Е
      LEAVE  E_ ;Покинуть офис Е
      SPLIT  1,,1 ;Расщепление для отправки заявки
      TEST E  P1,1,Met1 ;Автотранспорт к воротам F, заявка в Z
      QUEUE  ZP_ ;Занять очередь в зону Z
      ENTER  ZP_ ;Занять место обслуживания заявки в зоне Z
      DEPART  ZP_ ;Покинуь очередь в зону Z
      ADVANCE  (Exponential(213,0,timeZ));Имитация выполнения заявки в зоне Z
      LEAVE  ZP_ ;Освободить место обслуживания заявки в зоне Z
      TRANSFER  ,Met2
    Met1  QUEUE  F_ ;Встать в очередь к воротам F
      ENTER  F_ ;Занять полосу у ворот F
      DEPART  F_ ;Покинуть очередь к воротам F
      LEAVE  D_ ;Освободить место на парковке
      ADVANCE  (Exponential(183,0,timeF));Имитация досмотра у ворот F
      LEAVE  F_ ;Освободить полосу у ворот F
      ADVANCE  (Exponential(163,0,timeFH));Имитация движения от F к H
    Met2  ASSEMBLE  *1 ;Фиксация - выполнение заявки
      ENTER  I_ ;Занять ячейку I
      ADVANCE  (Exponential(315,0,timeI))
    ;Имитация обслуживания в зоне I
      LEAVE   I_ ;Освободить ячейку I
      ADVANCE  (Exponential(511,0,timeIJ));Имитация движения от I к J
      ENTER  J_ ;Занять место на воротах J
      ADVANCE  (Exponential(703,0,timeJ))
    ;Имитация осмотра на воротах J
      LEAVE  J_ ;Освободить место на воротах J
    KolObr  SAVEVALUE  timeSum+,M1
      TABULATE  TMeanP
      TERMINATE
    
    ; Задание времени моделирования и расчет результатов
      GENERATE  TimeMod
      TEST L  X$Prog,TG1,Met3
      SAVEVALUE  Prog,TG1
    Met3  TEST E  TG1,1,Met4 
      SAVEVALUE  TimeObr,(X$TimeSum/N$KolObr) 
    ; Среднее время обработки транспорта
      SAVEVALUE  KoefIsp,(N$KolObr/N$KolPrib) 
    ; Коеффициент использования терминала
      SAVEVALUE  KolObrCar,(N$KolObr/X$Prog)
    ; Количество обработанных транспортов
    Met4  TERMINATE  1
      START  10000

    Модель функционирования терминала в AnyLogic

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

  • Для ввода исходных данных используем Параметр и Бегунок. Выполните команду Файл/Создать/Модель на панели инструментов.
  • В поле Имя модели диалогового окна Новая модель введите Терминал. Выберите каталог, в котором будут сохранены файлы модели. Щелкните кнопку Далее.
  • На открывшейся второй странице Мастера создания модели выберите Начать создание модели "с нуля". Щелкните кнопку Далее.
  • Создадим две области просмотра. Первую для ввода исходных данных и вывода результатов моделирования, вторую - для размещения элементов модели.

  • Создайте вторую область просмотра для размещения элементов модели на диаграмме класса Main. Из палитры Презентация перетащите в любое место элемент Область просмотра.
  • Перейдите на страницу Основные панели Свойства. В поле Имя: введите Модель_Терминал.
  • Задайте, как будет располагаться область просмотра относительно ее якоря, с помощью элемента управления Выравнивать по: Верхн. левому углу.
  • Выберите режим масштабирования из выпадающего списка Масштабирование: Подогнать под окно.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 0, Y: 0, Ширина: 680, Высота: 370.
  • Из палитры Презентация перетащите элемент Прямоугольник. Оставьте имя, предложенное системой.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 20, Y: 20, Ширина: 640, Высота: 340.
  • Из палитры Презентация перетащите второй элемент Область просмотра.
  • Перейдите на страницу Основные панели Свойства. В поле Имя: введите Данные.
  • Задайте, как будет располагаться область просмотра относительно ее якоря, с помощью элемента управления Выравнивать по: Верхн. левому углу.
  • Выберите режим масштабирования из выпадающего списка Масштабирование: Подогнать под окно.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 0, Y: 1000, Ширина: 560, Высота: 400.
  • Из палитры Презентация перетащите элемент Скруглённый прямоугольник. Оставьте имя, предложенное системой.
  • Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 20, Y: 1030, Ширина: 520, Высота: 350.
  • Перетащите элемент text и на странице Основные панели Свойства в поле Текст: введите Исходные данные и результаты моделирования.
  • В Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Исходные данные и результаты моделирования. Разместите их и дайте имена так, как показано на рис. 7.2.
  • Значения свойств установите согласно табл. 7.1. Имена параметров (в том числе и знак подчёркивания) приняты те же, что и в GPSS-модели.
  • В Палитре выделите Элементы управления. Перетащите элементы Бегунок. Разместите их так, как показано на рис. 7.2. Значения свойств установите согласно табл. 7.1.
    ПараметрБегунок
    ИмяТипЗначение по умолчаниюСвязать сМинимальное значениеМаксимальное значение
    D_int10D_150
    E_int5E_150
    F_int5F_150
    I_int7I_150
    ZP_int2ZP_150
    J_int7J_150
    timeDdouble2timeD150
    timeEdouble10timeE150
    timeFdouble2timeF150
    timeIdouble5timeI150
    timeZdouble10timeZ150
    timeJdouble2timeJ150
    timeAdouble9timeA150
    timeFHdouble2timeFH150
    timeIJdouble2timeIJ150
  • Для вывода результатов моделирования используем элемент Простая переменная. В Палитре выделите Основная. Перетащите элементы Простая переменная. Разместите их и дайте им имена так, как показано на рис. 7.2. Тип переменных double.
  • В GPSS World коэффициенты использования элементов терминала, длины к ним очередей определяются системой автоматически и выводятся в стандартном отчёте.

    Коэффициенты использования элементов терминала (в нашей модели их будут имитировать объекты delay) автоматически определяются и в AnyLogic. Тем не менее, для удобства их чтения в ходе и по окончании моделирования мы ввели переменные KoefIsp_E, KoefIsp_F, KoefIsp_Z, KoefIsp_I, KoefIsp_J.

    Для определения максимальных длин очередей к этим элементам терминала нами также введены переменные очередь_Е, очередь_F, очередь_Z, очередь_I, очередь_J.

    Переменные KolObrCar, TimeObr, KoefIsp имеют тот же смысл, что и в GPSS-модели.

    (рис 7.2) Размещение элементов для ввода исходных данных и вывода результатов моделирования

    Переменная kolJ введена для счета количества обработанных транспортов. Переменная TimeSum введена для счета суммарного времени обработки всех транспортов. По значениям этих переменных рассчитывается среднее время обработки TimeObr одного транспорта.

    В последующем для определения количественных значений каждой из этих переменных мы напишем соответствующие Java-коды.

    Событийная часть модели

    Объекты событийной части модели показаны на рис. 7.3.

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

  • source (один);
  • queue (восемь);
  • delay (восемь);
  • split (один);
  • match (один);
  • sink (один).
  • Создадим событийную часть модели. Для неё мы уже создали область присмотра с именем Модель_Терминал и перетащили элемент Прямоугольник, в котором и разместим все элементы.

  • Перетащите объект source. Установите его свойства согласно табл. 7.2.
  • Создайте нестандартный класс заявки Car с полями:
    int id;
    double vxod;
  • Дополнительное поле id нестандартного класса заявки Car введено для проверки объектом match условия объединения двух заявок в одну.

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

    Перетащите остальные объекты, соедините так, как показано на рис. 7.3. Последовательно выделяя эти объекты, установите их свойства согласно табл. 7.3.

    (рис 7.3) Элементы модели Terminal
    Свойства объекта source
    ИмяСвойстваЗначения
    поток_транспортаОтображать имяУстановите флажок
    Класс заявкиCar
    Заявки прибывают согласноВремени между прибытиями
    Время между прибытиямиexponential(1/timeA)
    Количество заявок, прибывающих за один раз1
    Новая заявкаnew Car()
    Действие при выходе entity.id =
    поток_транспорта.count();
    entity.vxod = time();
    Свойства объектов событийной части модели
    СвойстваЗначение
    Имяочередь_на_D_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Максимальная вместимостьУстановить флажок
    Включить сбор статистикиУстановить флажок
    Имяпарковка_D_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Задержка задаетсяЯвно
    Время задержкиexponential(1/timeD)
    ВместимостьD_
    Включить сбор статистикиУстановить флажок
    Имяочередь_в_офис_E_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Вместимость10
    Действие при подходе к выходуif (очередь_E <
    очередь_в_офис_E_.size())
    очередь_E =
    очередь_в_офис_E_.size();
    Включить сбор статистикиУстановить флажок
    Имяоформл_докум_в_офисе_Е_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Задержка задаетсяЯвно
    Время задержкиexponential(1/timeE)
    ВместимостьE_
    Имяотправка_заявки_в_Z
    Отображать имяУстановить флажок
    Класс заявкиCar
    Количество копий1
    Новая заявка (копия)new Car
    Действие при выходе копииentity.id = original.id;
    entity.vxod = original.vxod;
    Имяочередь_в_зону_Z_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Вместимость100
    Действие при подходе к выходуif (очередь_Z < очередь_в_зону_Z_.size())
    очередь_Z =
    очередь_в_зону_Z_.size();
    Включить сбор статистикиУстановить флажок
    Имявыполн_заявки_в_зоне_Z_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Задержка задаетсяЯвно
    Время задержкиexponential(1/timeZ)
    ВместимостьZP_
    Включить сбор статистикиУстановить флажок
    Имяфиксация_выполн_заявки_в_Z_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Условие соответствияentity1.id == entity2.id
    Вместимость 1100
    Вместимость 2100
    Действие при выходе 1entity.id = 0;
    Действие при выходе 2if (очередь_I < фиксация_выполн_заявки_в_Z_.size2())
    очередь_I = фиксация_выполн_заявки_в_Z_.size2();
    Время задержкиexponential(1/timeIJ)
    Вместимость10
    Включить сбор статистикиУстановить флажок
    Имяочередь_на_ворот_J_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Вместимость10
    Действие при подходе к выходуif (очередь_J < очередь_на_ворот_J_.size())
    очередь_J = очередь_на_ворот_J_.size();
    Включить сбор статистикиУстановить флажок
    Имяосмотр_на_ворот_J_
    Отображать имяУстановить флажок
    Класс заявкиCar
    Задержка задаетсяЯвно
    Время задержкиexponential(1/timeJ)
    ВместимостьJ_

    Поясним необходимость и целесообразность применения некоторых объектов. В модели заявка имитирует транспорт. Объект split предназначен для расщепления одной заявки в нашей модели на две заявки. Одна поступает, как документ, в зону Z, а вторая, как транспорт, продолжает движение. Когда в зоне Z необходимые для обработки транспорта действия выполнены (подготовлены документы), объект match фиксирует этот момент, то есть синхронизирует дальнейшее движение транспорта. Вторая заявка направляется в объект sink и уничтожается. Как известно, объединить две заявки в одну (а значит не использовать объект sink) можно с помощью объекта combine. Однако в нашем случае combine использовать нельзя, так как он не проверяет выполнение у заявок условий, необходимых для их уничтожения. Поэтому могут быть объединены различные заявки. Объект match проверяет условия объединения, установленные в нашем случае разработчиком модели в дополнительном поле id нестандартного класса заявки Car (entity1.id == entity2.id), именно двух заявок в одну. То есть синхронизации движения заявки как документа и заявки как автомобиля при применения объекта combine не обеспечивается.

    В табл. 7.4 указаны свойства объекта sink.

    СвойстваЗначение
    Имявыход_J
    Отображать имяУстановить флажок
    Класс заявки
    Действие при входеCar
    if (entity.id != 0){
    kolJ ++ ;
    KolObrCar = kolJ/10000;
    KoefIsp = kolJ/поток_транспорта.count();
    TimeSum += (time() - entity.vxod);
    TimeObr = TimeSum / kolJ;
    KoefIsp_E = оформл_докум_в_офисе_E_.statsUtilization.mean();
    KoefIsp_F = досмотр_у_ворот_F_.statsUtilization.mean();
    KoefIsp_Z = выполн_заявки_в_зоне_Z_.statsUtilization.mean();
    KoefIsp_I = обслуж_в_зоне_I_.statsUtilization.mean();
    KoefIsp_J = осмотр_на_ворот_J_.statsUtilization.mean();}

    Остановимся на коде свойства Действие при входе. Заявки с выхода 1 объекта match можно было бы не направлять на этот объект sink, а добавить еще объект sink и уничтожать их там. Но у нас ознакомительная версия, которая не позволяет иметь в модели на диаграмме одного класса больше двадцати объектов (в образовательной версии это возможно). Нам не хватило ровно одного объекта, поэтому пришлось поступить так (размещать объекты на разных диаграммах ради этого мы посчитали нецелесообразным). Для реализации такого приема на выходе 1 объекта match entity.id = 0, то есть поле id обнуляется и все заявки с таким полем игнорируются. Но в количестве заявок, вошедших в объект sink, они учитываются. Поэтому пришлось для счета количества обработанных транспортов ввести переменную kolJ, хотя имеется стандартная функция count(), которая возвращает количество заявок, вошедших в данный объект. Любых заявок, без какого-либо их разделения.

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

    Результаты проведенных нами на построенных моделях экспериментов сведены в табл. 7.5. В этот раз мы выполнили по одному эксперименту на каждой модели. В GPSS-модели начальные числа генераторов случайных чисел устанавливали произвольно, а в AnyLoic-модели установили число 1876. В GPSS World выполнили 10 000 прогонов, а в AnyLogic увеличили время моделирования в 10 000 раз, то есть моделировали в течение 4 800 000 мин.

    ПоказателиСистемы моделирования
    GPSS WorldAnyLogic
    KolObrCar53,3153,41
    TimeObr35,48536,109
    KoefIsp11
    KoefIsp_E0,2220,222
    KoefIsp_F0,0440,044
    KoefIsp_Z0,5560,556
    KoefIsp_I0,0790,08
    KoefIsp_J0,0320,032
    очередь_E55
    очередь_F11
    очередь_Z2120
    очередь_I2222
    очередь_J11
    Машинное время25 мин 34 с25 c

    Как видно, результаты моделирования идентичны. Кроме машинного времени, которое в GPSS World составляет 25 мин 34 с, то есть примерно в 65 раз больше, чем в AnyLogic. Различие в количестве обработанных в течение 8 часов автомобилей (KolObrCar) и среднего времени обработки одного автомобиля (TimeObr) незначительно. Коэффициенты использования элементов терминала и максимальные длины очередей к ним одинаковые.

    Эксперименты

    Далее поступим так. Проведем эксперименты с моделями в GPSS World и AnyLogic. В GPSS World это будет дисперсионный анализ, а в AnyLogic - оптимизация стохастических моделей. В результате мы получим оптимальные значения факторов и показатели функционирования терминала, которые и оценим.

    Первый отсеивающий эксперимент в GPSS World

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

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

    Уровни факторовФакторы
    timeAtimeЕtimeFtimeItimeZtimeFH
    Нижний101025102
    Верхний2015410154
  • Запустите GPSS World. Откройте модель Terminal. Выберите Edit / Insert Experiment / Screening … (Правка / Вставить эксперимент / Отсеивающий …). Откроется диалоговое окно Screening Experiment Generator (Генератор отсеивающего эксперимента). Приступите к заполнению полей диалогового окна.
  • В поля Experiment Name (Имя эксперимента) и Run Procedure Name (Имя процедуры запуска) введите, например, Terminal и RunTerminal соответственно (рис. 7.4). Имена эксперименту и процедуре запуска эксперимента дает пользователь.
  • Введите ранее выбранные согласно стратегическому планированию эксперимента факторы (табл. 7.6), начиная с фактора А. В поле Name (User Variable) (Имя (Переменная пользователя)) введите имя фактора, в поля Value1 и Value2 - его нижний и верхний уровни соответственно. Запомните соответствие между факторами и именами переменных.
  • Ниже идет группа Fraction (Часть полного эксперимента). Установите Full, что соответствует полному факторному эксперименту. Справа под Run Count появится число 64, так как $$2^6=64$$. Это число наблюдений, которое нужно сделать в эксперименте. Количество прогонов в каждом наблюдении определим позже при тактическом планировании эксперимента. (рис 7.4) Диалоговое окно (заполненное) Screening ExperimentGenerator (Генератор отсеивающего эксперимента)
  • В поле Expression (Выражение) группы Result (Результат) введите выражение, по которому вычисляется время обработки одного автомобиля: X$TimeSum/N$KolObr.
  • После группы Result (Результат) расположены два флажка, позволяющие выбирать опции. При выборе опции Generate Run Procedure вместе с экспериментом создается стандартная процедура запуска, которую пользователь может корректировать согласно своим требованиям. Выбор второй опции Load F11 with CONDUCT Command закрепляет команду CONDUCT за функциональной клавишей F11. Тогда после создания объекта "Процесс моделирования" для запуска эксперимента нужно только нажать функциональную клавишу F11. Выберите обе опции.
  • Создайте Plus - операторы и вставьте их в нижнюю часть модели Terminal. Для этого нажмите кнопку Insert Experiment (Вставить эксперимент), расположенную в левой нижней части диалогового окна Screening Experiment Generator (Генератор отсеивающего эксперимента) (см. рис. 7.4). Так как была выбрана опция Generate Run Procedure, то создана стандартная процедура запуска.

    Появится её диалоговое окно, дающее возможность пользователю изменить процедуру запуска согласно своим требованиям.

  • Перейдите, пользуясь клавишами вверх-вниз, в конец процедуры запуска. Там в разделе Set up your own run conditions (Задайте свои условия наблюдения) имеются две команды START, между которыми находится команда RESET (рис. 7.5). Поясним назначение этих команд.
  • Первой командой START
    DoCommand("START 100,NP");  /*Get past the Startup Period. */

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

  • Второй командой START
    DoCommand("START 1000,NP");  /*Run the Simulation. */

    определяется количество прогонов в одном наблюдении. В обеих командах используется операторNP - стандартный отчёт не выводится. На рис. 7.5 показаны условия стандартной процедуры запуска после корректировки. Обе команды START мы оставили без изменения, а вот после команды RESET вставили строку

    DoCommand("SAVEVALUE TimeSum,0");/*Run the Simulation. */

    которая обнуляет ячейку TimeSum.

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

  • После корректировки процедуры запуска нажмите Ok. Сгенерированный код Plus - эксперимента появится ниже программы GPSS-модели. (рис 7.5) Условия стандартной процедуры запуска после корректировки
  • Проведите трансляцию, т. е. создайте объект "Процесс моделирования", для чего выполните команду Command / Create Simulation (Команда / Создать процесс моделирования). (рис 7.6) Окно Journal (Журнал) с сообщением об успешном создании объекта "Процесс моделирования"
  • При отсутствии ошибок в сгенерированном эксперименте в окне Journal (Журнал) появится сообщение (см. рис. 7.6).
  • Запустите эксперимент. Для вызова эксперимента предназначена команда CONDUCT. Ранее за функциональной клавишей [F11] была закреплена команда CONDUCT (Edit/Settings/Function Keys (Правка/Настройки /Функциональные клавиши)) выбором соответствующей опции (см. рис. 7.4). Нажмите функциональную клавишу [F11]. Эксперимент начинает работать.
  • В ходе выполнения эксперимента автоматически создается отчет, который по готовности записывается в окно Journal (Журнал) объекта "Процесс моделирования". В отчете содержатся Yield - целевая функция, значения её и значения факторов, при которых получены эти значения целевой функции.
  • Фрагмент отчёта для четырех наблюдений (Run33 … Run36) показан на рис. 7.7. К этим данным и условиям выбора именно этого фрагмента отчёта мы обратимся позднее.
  • В результате дисперсионного анализа определяется также среднее время обработки одного автомобиля при 64 комбинациях выбранных значений факторов (см. табл. 7.8). В данном случае это время составляет 44,962 мин, то есть около 45 мин. (рис 7.7) Окно Journal (Журнал) с отчётом первого эксперимента
  • Сохраните эксперимент, указав имя DispTerminalTimeObr.
  • Второй отсеивающий эксперимент в GPSS World

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

    Согласно постановке на второй эксперимент поступите так.

  • Откройте эксперимент DispTerminalTimeObr.
  • Сохраните эксперимент с именем DispTerminalKolObrCar.
  • Удалите сгенерированный ранее код эксперимента Terminal, который расположен ниже программы модели.
  • Выполните Edit/Insert Experiment/Screening … (Правка/Вставить эксперимент/Отсеивающий …). Откроется диалоговое окно Screening Experiment Generator (Генератор отсеивающего эксперимента) с заполненными полями.
  • Оставьте все поля такими же, лишь замените в поле Expression (Выражение) группы Result (Результат) выражение, по которому вычисляется время обработки одного автомобиля X$TimeSum/N$KolObr, выражением N$KolObr/X$Prog для расчета количества обработанных автомобилей.
  • Выполните пп. 6…16 предыдущего эксперимента.
  • Фрагмент отчёта для четырех наблюдений (Run1…Run4) показан на рис. 7.8. К этим данным мы также обратимся позже.
  • (рис 7.8) Окно Journal (Журнал) с отчетом второго эксперимента

    Первый оптимизационный эксперимент в AnyLogic

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

  • Откройте в AnyLogic модель Terminal.
  • В панели Проект щелкните правой кнопкой мыши элемент модели Terminal и из меню выберите Coздать/ Эксперимент.
  • В появившемся диалоговом окне из списка Тип эксперимента: выберите Оптимизация.
  • В поле Имя введите имя эксперимента, например, OptTerminal. Имя эксперимента должно начинаться с заглавной буквы - таково правило названия классов в Java.
  • В поле Корневой класс модели: выберите Main. Этим выбором вы задали корневой (главный) класс эксперимента. Объект этого класса будет играть роль корня дерева объектов модели, запускаемой экспериментом.
  • Если вы хотите применить к создаваемому эксперименту временные установки другого эксперимента, оставьте установленным флажок Копировать установки модельного времени из: и выберите эксперимент из справа выпадающего списка.
  • Выберите опцию Фиксированное начальное число (воспроизводимые прогоны). В поле начальное число введите 1687. В этом случае при каждом запуске модели генератор случайных чисел будет инициализироваться этим числом. Поэтому прогоны будут воспроизводимыми при очередном запуске модели, что полезно при отладке модели.
  • Щелкните Готово. Появится страница Основные панели Свойства. Установите опцию минимизировать.
  • В поле Целевая функция введите root.TimeObr, так как корневой активный объект модели доступен здесь как root.
  • Оставьте установленным флажок Количество итераций:. Под итерацией понимается один опыт (одно наблюдение). Количество итераций - это цель стратегического планирования эксперимента - определение количества наблюдений и уровней факторов в них для получения полной и достоверной информации о модели.
  • В нашей модели нужно менять факторы timeA, timeЕ, timeF, timeI, timeZ, timeFH. Примем, что каждый фактор имеет два уровня k=2, m=6, тогда число итераций $$I=k^m=2^6=64$$.
  • В поле Количество итераций: установите 64. Задайте параметры, зна-чения которых будут меняться. В таблице на рис. 7.9 пере-числены все параметры корневого объекта Main.
  • Чтобы разрешить варьирование параметров оптимизатором, перейдите на строку с параметром timeA. Щелкните мышью в ячейке Тип. Выберите тип параметра, отличный от значения фиксированный. Чтобы параметры изменялись точно так же, как и в отсеивающем эксперименте GPSS World, то есть имели два уровня (нижний и верхний или минимальное и максимальное значения), выберите тип дискретный. (рис 7.9) Страница Основные панели Свойства эксперимента
  • Задайте диапазон допустимых значений параметра. Для чего введите в ячейку Мин минимальное значение 10, в ячейку Макс максимальное значение 20. Так как параметр дискретный, в ячейке Шаг укажите величину шага 10.
  • Задайте так же остальные параметры, как на рис. 7.9.
  • Перейдите на страницу Репликации панели Свойства.
  • Установите флажок Использовать репликации.
  • Число репликаций (прогонов) в одной итерации (наблюдении) может быть фиксированным или переменным. Фиксированное число репликаций, например, при доверительной вероятности $$\alpha = 0,95$$, точности $$\varepsilon =0,1$$ и стандартном отклонении $$\sigma=0,1$$ может быть определено по формуле: $$N=t^{2}_{\alpha}\frac{\sigma^2}{\varepsilon^2}=1,96^2\frac{0,1^2}{0,01^2}=3,8416 \cdot 100\approx400$$ где $$t_{\alpha}=1,96$$ - табулированный аргумент функции Лапласа.
  • Выберите опцию Фиксированное количество репликаций и в соответствующем поле установите 400.
  • Вернитесь на страницу Основные и щелкните Создать интерфейс.

    Кнопка находится в правом верхнем углу страницы Основные. После щелчка удаляется презентация эксперимента и создаётся интерфейс эксперимента заново согласно его текущим установкам (набору оптимизационных параметров и их свойствам и т. д.). Поэтому создавать интерфейс нужно только после окончания задания параметров эксперимента. На интерфейсе будут видны знаки вопросов напротив оптимизационных параметров.

  • В меню запуск выполните Terminal1/OptTerminal.
  • Щелкните Запустить оптимизацию. Начнет выполняться эксперимент. Во время эксперимента можно видеть на графике изменение значения целевой функции (вертикальная ось). После выполнения 400*64=25 600 прогонов (рис. 7.10) эксперимент остановится.
  • Второй оптимизационный эксперимент в AnyLogic

    Создайте второй эксперимент Оптимизация стохастических моделей в AnyLogic. Цель эксперимента: определение максимального количества обработанных автомобилей в зависимости от тех же факторов и их значений, что и в первом эксперименте.

    (рис 7.10) Результаты первого оптимизационного эксперимента
  • Откройте в AnyLogic модель Terminal.
  • В панели Проект щелкните правой кнопкой мыши элемент модели Terminal и из контекстного меню выберите Coздать/ Эксперимент. В появившемся диалоговом окне из спискаТип эксперимента: выберите Оптимизация.
  • В поле Имя введите имя эксперимента, например, OptTerminal2.
  • Выполните пп. 5…8 первого эксперимента.
  • Установите опцию максимизировать.
  • В поле Целевая функция введите root.KolObrCar.
  • Выполните пп. 11…19 первого эксперимента.
  • Так как в данном эксперименте определяется максимальное количество обработанных автомобилей, то доверительную вероятность оставьте прежней $$\alpha = 0,95$$, а точность и стандартное отклонение достаточно задать равными 1, то есть $$\varepsilon =1$$ и $$\sigma=1$$. Тогда фиксированное число репликаций будет равно: $$N=t^{2}_{\alpha}\frac{\sigma^2}{\varepsilon^2}=1,96^2\frac{1^2}{1^2}=3,8416 \cdot 1\approx4$$
  • Выберите опцию Фиксированное количество репликаций и в соответствующем поле установите 4.
  • Вернитесь на страницу Основные и щелкните Создать интерфейс.
  • В меню запуск выполните Terminal1/OptTerminal2.
  • Щелкните Запустить оптимизацию. После выполнения 4*64=256 прогонов (рис. 7.11) эксперимент остановится. На второй итерации (втором наблюдении) четвертой репликации (прогоне) получено оптимальное значение функционала: 48,08.
  • Перейдем к рассмотрению результатов экспериментов.

    Результаты экспериментов в GPSS World и AnyLogic

    Результаты экспериментов с имитационными моделями функционирования терминала сведены в табл. 7.7 и 7.8.

    Показатели, параметрыСистемы моделирования
    GPSS WorldAnyLogic
    Первый эксперимент
    TimeObr31,84431,799
    timeA2020
    timeE1010
    timeF22
    timeI55
    timeZ1010
    timeFH22
    TimeObr31,60531,799
    timeA2020
    timeE1010
    timeF42
    timeI55
    timeZ1010
    timeFH42
    (рис 7.11) Результаты второго оптимизационного эксперимента

    Как уже отмечалось, значения факторов (параметров) в отсеивающих экспериментах GPSS World и оптимизационных экспериментах AnyLogic изменялись одинаково. Следовательно, в отчете GPSS World об отсеивающем эксперименте можно найти значение целевой функции, рассчитанное по параметрам, которые определены AnyLogic в эксперименте как оптимальные. Показатели и параметры при таком подходе к сравнительной оценке результатов моделирования в табл. 7.7 и 7.8 выделены жирным шрифтом.

    Второй эксперимент
    KolObrCar48,04948,08
    timeA1010
    timeE1010
    timeF22
    timeI55
    timeZ1010
    timeFH22
    KolObrCar48,348,08
    timeA1010
    timeE1510
    timeF42
    timeI55
    timeZ1510
    timeFH42

    В первом эксперименте минимальное время обработки одного автомобиля, определенное оптимизатором AnyLogic, составляет TimeObr = 31,799 мин (см. рис. 7.10) при следующих значениях параметров: timeA = 20, timeЕ = 10, timeF = 2, timeI = 5, timeZ = 10, timeFH = 2.

    По значениям оптимальных параметров находим в отчете GPSS World (см. рис. 7.7) TimeObr = 31,844 мин. Как видим, отличие составляет 0,045 мин.

    Во втором оптимизационном эксперименте максимальное количество обработанных автомобилей, определенное AnyLogic, составляет KolObrCar = 48,08 (см. рис. 7.11) при следующих значениях параметров: timeA = 10, timeЕ = 10, timeF = 2, timeI = 5, timeZ = 10, timeFH = 2.

    По значениям оптимальных параметров находим в отчете GPSS World (см. рис. 7.8) KolObrCar = 48,049. Как видим, результаты практически одинаковы, если учесть измерение показателя целыми значениями (разница 0,03).

    Теперь попробуем в отчётах GPSS World найти значения целевой функции, которые превышают значения, полученные при оптимальных параметрах AnyLogic. Такие значения нашлись, и также включены в табл. 7.7 и 7.8 (не выделены жирным шрифтом). Но и они свидетельствуют о близости полученных результатов моделирования в GPSS World и AnyLogic.

    Вернуться к учебному плану