Концептуальное проектирование систем в AnyLogic 7 и 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: 750, Ширина: 560, Высота: 330.
  • Из палитры Презентация перетащите элемент Скруглённый прямоугольник. Оставьте имя, предложенное системой.
  • На странице Местоположение и размер панели Свойства введите в поля X: 20, Y: 760, Ширина: 530, Высота: 310. Задайте, как будет располагаться область просмотра относительно ее якоря, с помощью элемента управления Выравнивать по: Верхн. левому углу.
  • Выберите режим масштабирования из выпадающего списка Масштабирование: Подогнать под окно.
  • На странице Местоположение и размер панели Свойства введите в поля X: 0, Y: 0, Ширина: 680, Высота: 410.
  • Из палитры Презентация перетащите элемент Прямоугольник. Оставьте имя, предложенное системой.
  • На странице Местоположение и размер панели Свойства введите в поля X: 30, Y: 40, Ширина: 640, Высота: 350.
  • Из палитры Презентация перетащите второй элемент Область просмотра.
  • Перейдите на страницу Основные панели Свойства. В поле Имя: введите Данные.
  • Задайте, как будет располагаться
  • Перетащите элемент text и на странице Текст панели Свойства в поле вместо слова text введите Исходные данные.
  • Перетащите второй элемент text и на странице Текст панели Свойства в поле вместо слова text введите Результаты моделирования.
  • В Палитре выделите Основная. Перетащите элементы Параметр на элементы с именами Исходные данные и Результаты моделирования. Разместите их и дайте имена так, как показано на Рис. 7.2.
  • Значения свойств установите согласно Табл. 7.1. Имена параметров (в том числе и знак подчёркивания) приняты те же, что и в GPSS-модели.
    ИмяТипЗначение по умолчаниюИмяТипЗначение по умолчанию
    timeDdouble2
    D_int10timeEdouble10
    E_int5timeFdouble2
    F_int5timeIdouble5
    I_int7timeZdouble10
    ZP_int2timeJdouble2
    J_int7timeAdouble9
    timeFHdouble2
    timeIJdouble2
  • Для вывода результатов моделирования используем элемент Переменная. В Палитре выделите Основная. Перетащите элементы Переменная. Разместите их и дайте им имена так, как показано на Рис. 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-модели.

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

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

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

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

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

    Для построения использованы следующие двадцать объектов Библиотеки моделирования процессов (в скобках после имени каждого объекта указано их количество в событийной части модели): source (один); queue (8); delay (8); split (1); match (1); sink.

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

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

    (рис 7.3) Событийная часть модели Терминал

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

    Свойства объекта source
    ИмяСвойстваЗначения
    поток_транспортаОтображать имяУстановите флажок
    Тип заявкиCar
    Прибывают согласноВремени между прибытиями
    Время между прибытиямиexponential(1/timeA)
    Новая заявка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
    Новая заявка (копия)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();
    Имяочередь_к_воротам_F_
    Отображать имяУстановить флажок
    Тип заявкиCar
    Максимальная вместимостьУстановить флажок
    Имяполосы_у_ворот_F_
    Отображать имяУстановить флажок
    Тип заявкиCar
    ВместимостьF_
    Действия При подходе к выходуif (очередь_F < полосы_у_ворот_F_.size())
    очередь_F = полосы_у_ворот_F_.size();
    Имядосмотр_у_ворот_F_
    Отображать имяУстановить флажок
    Тип заявкиCar
    ТипОпределённое время
    Время задержкиexponential(1/timeF)
    ВместимостьF_
    Имяqueue1
    Тип заявкиСбросить флажок
    ВместимостьCar
    100
    Имядвижение_от_F_к_Н_
    Отображать имяУстановить флажок
    Тип заявкиCar
    ТипОпределённое время
    Время задержкиexponential(1/timeFH)
    Вместимость10
    Имяобслуж_в_зоне_I_
    Отображать имяУстановить флажок
    Тип заявкиCar
    ТипОпределённое время
    Время задержкиexponential(1/timeI)
    ВместимостьI_
    Имяqueue
    Отображать имяСбросить флажок
    Тип заявкиCar
    Вместимость100
    Имядвижение_от_I_к_J_
    Отображать имяУстановить флажок
    Тип заявкиCar
    ТипОпределённое время
    Время задержки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 выполнили 10000 прогонов, а в AnyLogic увеличили время моделирования в 10000 раз, то есть моделировали в течение 4800000 мин.

    ПоказателиСистемы моделирования
    GPSS WorldAnyLogic6AnyLogic7
    KolObrCar53,3153,4153,294
    TimeObr35,48536,10936,053
    KoefIsp111
    KoefIsp_E0,2220,2220,222
    KoefIsp_F0,0440,0440,044
    KoefIsp_Z0,5560,5560,554
    KoefIsp_I0,0790,080,062
    KoefIsp_J0,0320,0320,032
    очередь_E558
    очередь_F111
    очередь_Z212016
    очередь_I222217
    очередь_J111
    Машинное время25 мин 34 с25 c37 c

    Как видно, результаты моделирования идентичны. Кроме машинного времени, которое в GPSS World составляет 25 мин 34 с, то есть более чем в 40 раз больше, чем в AnyLogic7. Различие в количестве обработанных в течение 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, так как 26 = 64. Это число наблюдений, которое нужно сделать в эксперименте. Количество прогонов в каждом наблюдении определим позже при тактическом планировании эксперимента. (рис 7.4) Диалоговое окно (заполненное) Screening Experiment Generator (Генератор отсеивающего эксперимента)
  • В поле 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 модель Терминал.
  • В панели Проект щёлкните правой кнопкой мыши элемент модели Терминал и из меню выберите Coздать/ Эксперимент.
  • В появившемся диалоговом окне из списка Тип эксперимента: выберите Оптимизация.
  • В поле Имя введите имя эксперимента, например, ОптТерминал1.
  • В поле Агент верхнего уровня: выберите Main. Этим выбором вы задали корневой (главный) агент эксперимента. Тип этого агента будет играть роль корня дерева объектов модели, запускаемой экспериментом.
  • Если вы хотите применить к создаваемому эксперименту временные установки другого эксперимента, оставьте установленным флажок Копировать установки модельного времени из: и выберите эксперимент из выпадающего списка.
  • Установите опцию минимизировать.
  • В поле Целевая функция введите root.TimeObr, так как корневой агент модели доступен здесь как root.
  • На странице Случайность выберите опцию Фиксированное начальное число (воспроизводимые прогоны). В поле начальное число введите 1687. В этом случае при каждом запуске модели генератор случайных чисел будет инициализироваться этим числом. Поэтому прогоны будут воспроизводимыми при очередном запуске модели, что полезно при отладке модели.
  • Оставьте установленным флажок Количество итераций:. Под итерацией понимается один опыт (одно наблюдение). Количество итераций - это цель стратегического планирования эксперимента - определение количества наблюдений и уровней факторов в них для получения полной и достоверной информации о модели.
  • В нашей модели нужно менять факторы timeA, timeЕ, timeF, timeI, timeZ, timeFH. Примем, что каждый фактор имеет два уровня k = 2, m = 6, тогда число итераций $$I=k^m=2^6=64$$.
  • В поле Количество итераций: установите 64. Задайте параметры, значения которых бу-дут меняться. В таблице на Рис. 7.9 перечислены часть па-раметров корневого агента Main.
  • Однако они будут расположены не так, как на Рис. 7.9. Можно сказать, будут "неудобно" расположены. Они будут разбросаны и некоторые могут оказаться даже внизу таблицы. Для перемещения оптимизируемых параметров в верхнюю часть таблицы используйте методику, описанную в п. 5.1.10.4.
  • Чтобы разрешить варьирование параметров опти-мизатором, перейдите на строку с параметром timeЕ. Щёлкните мышью в ячейке Тип. Выберите тип параметра, отличный от значения фиксированный. Чтобы параметры изменялись точно так же, как и в отсеивающем эксперименте GPSS World, то есть имели два уровня (нижний и верхний или минимальное и максимальное значения), выберите тип дискретный.
  • Задайте диапазон допустимых значений параметра. Для чего введите в ячейку Мин минимальное значение 10, в ячейку Макс максимальное значение 15. Так как параметр дискретный, в ячейке Шаг укажите величину шага 5.
  • Задайте так же остальные варьируемые параметры эксперимента, как на Рис. 7.9.
  • Перейдите на страницу Репликации панели Свойства.
  • Установите флажок Использовать репликации.
  • Число репликаций (прогонов) в одной итерации (наблюдении) может быть фиксированным или переменным. Фиксированное число репликаций, например, при доверительной вероятности $$\alpha =0,95$$, точности $$\varepsilon =0,01$$ и стандартном отклонении $$\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 \approx 400,$$

    где $$t_{\alpha}=1,96$$ - табулированный аргумент функции Лапласа.

  • Выберите опцию Фиксированное количество репликаций и в соответствующем поле установите 400.
  • Щёлкните Создать интерфейс.

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

  • В меню запуск выполните Терминал/ОптТерминал1. (рис 7.9) Страница Основные панели Свойства эксперимента
  • Щёлкните Запустить оптимизацию. Начнет выполняться эксперимент. Во время эксперимента можно видеть на графике изменение значения целевой функции (вертикальная ось). После выполнения 400*64=25600 прогонов (Рис. 7.10) эксперимент остановится.
  • (рис 7.10) Результаты первого оптимизационного эксперимента

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

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

  • Откройте в AnyLogic модель Терминал.
  • В панели Проект щёлкните правой кнопкой мыши элемент модели Terminal и из контекстного меню выберите Coздать/ Эксперимент. В появившемся диалоговом окне из списка Тип эксперимента: выберите Оптимизация.
  • В поле Имя введите имя эксперимента, например, ОптТерминал2.
  • Выполните пп. 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 \approx 4.$$
  • Выберите опцию Фиксированное количество репликаций и в соответствующем поле установите 4.
  • Щёлкните Создать интерфейс.
  • В меню запуск выполните Терминал/ОптТерминал2.
  • Щёлкните Запустить оптимизацию. После выполнения 4*64=256 прогонов (Рис. 7.11) эксперимент остановится. На второй итерации (втором наблюдении) четвертой репликации (прогоне) получено оптимальное значение функционала: 48,129.
  • Перейдем к рассмотрению результатов экспериментов.

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

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

    Первый эксперимент
    Показатели, параметрыGPSS WorldAnyLogic6AnyLogic7
    TimeObr31,84431,79932,534
    timeA202020
    timeE101010
    timeF222
    timeI555
    timeZ101010
    timeFH222
    TimeObr31,60531,79934,527
    timeA202020
    timeE101010
    timeF424
    timeI555
    timeZ101010
    timeFH424
    (рис 7.11) Результаты второго оптимизационного эксперимента

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

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

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

    Второй эксперимент
    Показатели, параметрыGPSS WorldAnyLogic6AnyLogic7
    KolObrCar48,04948,0848,129
    timeA101010
    timeE101010
    timeF222
    timeI555
    timeZ101010
    timeFH222
    KolObrCar48,348,0847,957
    timeA101010
    timeE151015
    timeF424
    timeI555
    timeZ151015
    timeFH424

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

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

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

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