Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Построение имитационной модели процесса
Построение имитационной модели начнем с создания заголовка модели, который может быть представлен, например, в таком виде: ; GPSSW AZS.GPS *************************************** * Моделирование автомобильной * * заправочной станции (АЗС) * *************************************** Моделирование потока машин, поступающих на заправку, будем выполнять с помощью оператора GENERATE (Генерировать). Нам необходимо сформировать поток машин, поступающих на обслуживание на АЗС, который подчиняется экспоненциальному распределению вероятностей. Это можно сделать двумя способами, используя: • эмпирические распределения, которые можно создать с помощью команды FUNCTION (Функция) языка GPSS, используя дискретные (тип D) или непрерывные (тип C) случайные функции; • встроенные распределения вероятностей. В системе GPSSW в библиотеку процедур включено более 20 встроенных распределений вероятности. Эти распределения имеют широкий диапазон использования. Каждый вызов процедуры распределения вероятности требует, чтобы вы определили параметр потока, номер генератора случайных чисел. В нашем примере оператор GENERATE запишется в таком виде: GENERATE (Exponential(1, 0, 6.5)) В поле операнда А указывается обращение к библиотечной процедуре – экспоненциальному распределению вероятности. Автомобиль, поступающий на заправку, сначала встает в очередь, если она есть. Это можно промоделировать оператором QUEUE (Очередь), который только в совокупности с оператором DEPART (Выйти) собирает статистическую информацию о работе моделируемой очереди. В нашем примере оператор QUEUE будет выглядеть так: QUEUE Zapravka В поле операнда А дается символьное или числовое имя очереди. Таких очередей в системе может быть очень много. В нашей задаче дадим очереди имя Zapravka (Заправка). Желательно, чтобы присваиваемое имя отражало суть описываемого элемента системы. Поскольку на АЗС есть две колонки для заправки, то автомобиль подъезжает к первой колонке, если она свободна, и ко второй, если первая занята. Если обе колонки заняты, то автомобиль ожидает их освобождения в общей очереди. Направление автомобилей на ту или иную колонку может быть обеспечено оператором TRANSFER (Передать). В нашем примере он запишется так: TRANSFER Both, Kol_1, Kol_2 Слово Both (Оба) означает возможность передачи требования (машины) по двум направлениям: к оператору с меткой Kol_1, если первая колонка (объект) не занята, и к оператору с меткой Kol_2, если занята. Следуя логике, автомобиль может выйти из очереди только тогда, когда освободится первая или вторая колонка (объект). Для моделирования используются два сегмента. Первый из них связан с работой первой колонки, а второй – с работой второй. Оба сегмента начинаются с оператора SEIZE (Занять), и каждый из них имеет свою метку, соответственно Kol_1 и Kol_2, которые определяют занятость первой или второй колонки (канала обслуживания). При освобождении одной из них находящееся впереди требование выходит из очереди и идет в канал на обслуживание. Начало первого сегмента записывается так: Kol_1 SEIZE Kolonka_1 В поле операнда А дается символьное или числовое имя объекта. Таких каналов обслуживания в системе может быть очень много. В нашей задаче каналу дано имя Kolonka_1 (Колонка_1). Желательно, чтобы присваиваемое имя отражало суть описываемого элемента системы. Выход автомобиля из очереди фиксируется оператором DEPART с соответствующим названием очереди. В нашем примере это будет выглядеть так: DEPART Zapravka Далее должно быть промоделировано время заправки автомобиля. Оно в нашем примере составляет 10±2, 5 мин. Для моделирования этого процесса используется оператор ADVANCE (Задержать), который в нашей задаче будет выглядеть так: ADVANCE 10, 2.5 Затем необходимо сообщить об освобождении колонки под номером 1. Это можно сделать с помощью оператора RELEASE (Освободить). Он в нашей задаче записывается так: RELEASE Kolonka_1 Далее используется оператор TRANSFER (Передать) в режиме безусловной передачи требования к оператору с указанной меткой в поле операнда В. В нашем примере это будет выглядеть так: TRANSFER, Next Начало второго сегмента запишется так: Kol_2 SEIZE Kolonka_2 В поле операнда А дается символическое имя объекта – Kolonka_2. Выход автомобиля из очереди фиксируется оператором DEPART с соответствующим названием очереди. В нашем примере это будет выглядеть так: DEPART Zapravka Далее должно быть промоделировано время заправки автомобиля. Оно в нашем примере составляет 13±4 мин. Для моделирования этого процесса используется оператор ADVANCE, который в нашей задаче будет выглядеть так: ADVANCE 13, 4 После заправки автомобиль покидает колонку. Это можно зафиксировать оператором DEPART, который в нашей задаче запишется так: DEPART Total_time Далее необходимо сообщить об освобождении колонки под номером 2. Это можно сделать с помощью оператора RELEASE. Он в нашей задаче записывается так: RELEASE Kolonka_2 Затем используем оператор SAVEVALUE (Сохраняемая величина) с меткой Next (Следующий) для сохранения среднего времени нахождения автомобиля в очереди под именем Zapravka в сохраняемой величине под именем Ave_Queue. Это будет выглядеть так: Next SAVEVALUE Ave_Queue, QT$Zapravka Далее автомобиль покидает АЗС. Для этого используется оператор TERMINATE (Завершить): TERMINATE И наконец, мы должны создать сегмент, который будет моделировать работу АЗС в течение рабочей смены, равной 8 ч. Поскольку моделирование работы АЗС проводится в минутах, то время моделирования системы будет равно 8 × 60 = 480 мин. Этот сегмент будет выглядеть так: GENERATE 480 TERMINATE 1 START 1 Следует особо подчеркнуть, что парные операторы QUEUE и DEPART для каждой очереди должны иметь одно и то же, но свое уникальное имя. Это же относится и к операторам SEIZE и RELEASE. Завершающим оператором в нашей задаче является START, дающий команду начать моделирование: START 1
|