Моделирование работы АЗС
Автор работы: Пользователь скрыл имя, 28 Мая 2013 в 00:50, курсовая работа
Описание работы
Целью данной курсовой работы является:
• выделение компонентов создаваемой имитационной модели;
• создание имитационной модели «станции технического обслуживания автомобилей»;
• анализ полученных результатов.
Содержание работы
Введение …………………………………………………………………………3
Глава 1. Имитационное моделирование. Язык программирования GPSS
1.1 Основные понятия имитационного моделирования ……………………...5
1.2 Методы программирования на языке GPSS ………………………………8
Глава 2. Построение имитационной модели
2.1 Постановка задачи …………………………………………………………16
2.2 Формирование отчета ……………………………………………………...21
Заключение ……………………………………………………………………..26
Библиографический список …………………………………………………...27
Файлы: 1 файл
AZS.doc
— 183.50 Кб (Скачать файл)К вычислительным объектам GPSS относятся переменные (арифметические и булевские) и функции. Они используются для вычисления некоторых величин, заданных арифметическими или логическими выражениями либо табличными зависимостями.
Запоминающие объекты GPSS обеспечивают хранение в памяти ПК отдельных величин, используемых в модели, а также массивов таких величин. К ним относятся так называемые сохраняемые величины и матрицы сохраняемых величин.
К объектам группирующего класса относятся списки пользователя и группы. Списки пользователя используются для организации очередей с дисциплинами, отличными от дисциплины «раньше пришел – раньше обслужен». Группы в данном издании рассматриваться не будут.
Каждому объекту того или иного класса соответствуют числовые атрибуты, описывающие его состояние в данный момент модельного времени. Кроме того, имеется ряд так называемых системных атрибутов, относящихся не к отдельным объектам, а к модели в целом.
Значения атрибутов всех объектов модели по окончании моделирования. Выводятся в стандартный отчет GPSS. Большая часть атрибутов доступна программисту и составляет так называемые стандартные числовые атрибуты (СЧА), которые могут использоваться в качестве операндов операторов исходной программы. Все СЧА в GPSS являются целыми числами.
Каждый объект GPSS имеет имя и номер. Имена объектам даются в различных операторах исходной программы, а соответствующие им номера транслятор присваивает автоматически. Имя объекта представляет собой начинающуюся с буквы последовательность букв латинского алфавита, цифр и символа «подчеркивание». При необходимости имени любого объекта, кроме имени блока, можно поставить в соответствие любой номер с помощью оператора описания EQU, имеющего следующий формат: имя EQU номер. Блокам присваиваются их порядковые номера в исходной программе (не путать с номерами строк!).
Для ссылки на какой-либо стандартный числовой атрибут некоторого объекта соответствующий операнд оператора исходной программы записывается одним из следующих способов: СЧА$имя; СЧАj, где СЧА - системное обозначение (название) конкретного стандартного числового атрибута данного объекта; имя - имя объекта; j - номер объекта; $ - символ-разделитель.
Прогон текущей модели,
т.е. собственно моделирование, выполняется
с помощью специальной
В начальный момент времени в GPSS-модели нет ни одного транзакта. В процессе моделирования симулятор генерирует транзакты в определенные моменты времени в соответствии с теми логическими потребностями, которые возникают в моделируемой системе. Подобным же образом транзакты покидают модель в определенные моменты времени в зависимости от специфики моделируемой системы. В общем случае в модели одновременно существует большое число транзактов, однако в каждый момент времени симулятор осуществляет продвижение только какого-либо одного транзакта. Если транзакт начал свое движение, он перемещается от блока к блоку по пути, предписанному блок-схемой. В тот момент, когда транзакт входит в некоторый блок, на исполнение вызывается подпрограмма симулятора, соответствующая типу этого блока, а после ее выполнения, при котором реализуется функция данного блока, транзакт "пытается" войти в следующий блок. Такое продвижение транзакта продолжается до тех пор, пока не произойдет одно из следующих возможных событий:
1) транзакт входит в блок, функцией которого является удаление транзакта из модели;
2) транзакт входит в блок, функцией которого является задержка транзакта на некоторое определенное в модели время;
3) транзакт «пытается» войти в следующий блок, однако блок «отказывается» принять его. В этом случае транзакт остается в том блоке, где находился, и позднее будет повторять свою попытку войти в следующий блок. Когда условия в модели изменятся, такая попытка может оказаться успешной, и транзакт сможет продолжить свое перемещение по блок-схеме.
Если возникло
одно из описанных выше условий, обработка
данного транзакта
Проходя через блоки модели, каждый транзакт вносит вклад в содержимое счетчиков блоков. Значения этих счетчиков доступны программисту через СЧА блоков: W - текущее содержимое блока и N – общее количество входов в блок.
Каждое продвижение транзакта в модели является событием, которое должно произойти в определенный момент модельного времени. Для того, чтобы поддерживать правильную временную последовательность событий, симулятор имеет таймер модельного времени, который автоматически корректируется в соответствии с логикой, предписанной моделью.
Таймер GPSS имеет следующие особенности:
1) регистрируются
только целые значения (все временные
интервалы в модели
2) единица модельного
времени определяется
3) симулятор не анализирует состояние модели в каждый следующий момент модельного времени (отстоящий от текущего на единицу модельного времени), а продвигает таймер к моменту времени, когда происходит ближайшее следующее событие.
Значения таймера доступны программисту через системные СЧА C1 (относительное время) и AC1 (абсолютное время).
Центральной задачей, выполняемой симулятором, является определение того, какой транзакт надо выбрать следующим для продвижения в модели, когда его предшественник прекратил свое продвижение. С этой целью симулятор рассматривает каждый транзакт как элемент некоторого списка. В относительно простых моделях используются лишь два основных списка: список текущих событий и список будущих событий.
Список текущих событий включает в себя те транзакты, планируемое время продвижения которых равно или меньше текущего модельного времени (к последним относятся транзакты, движение которых было заблокировано ранее). Он организуется в порядке убывания приоритетов транзактов, а в пределах каждого уровня приоритета - в порядке поступления транзактов.
Список будущих событий включает в себя транзакты, планируемое время продвижения которых больше текущего времени, т.е. события, связанные с продвижением этих транзактов, должны произойти в будущем. Этот список организуется в порядке возрастания планируемого времени продвижения транзактов.
Симулятор GPSS помещает транзакты в зависимости от условий в модели в тот или иной список и переносит транзакты из списка в список, просматривает списки, выбирая следующий транзакт для обработки, корректирует таймер модельного времени после обработки всех транзактов в списке текущих событий.
Таким образом, из вышесказанного можно сделать вывод, что система GPSS (General Purpose System Simulator) предназначена для написания имитационных моделей систем с дискретными событиями. Наиболее удобно в системе GPSS описываются модели систем массового обслуживания, для которых характерны относительно простые правила функционирования составляющих их элементов.
Актуальность
создания языка имитационного
Глава 2. Построение имитационной модели
2.1 Постановка задачи
Нам надо промоделировать работу автомобильной заправочной станции (АЗС), которая имеет две заправочные колонки. Известны следующие параметры работы АЗС:
- поток автомобилей, поступающих на заправку, подчиняется экспоненциальному распределению вероятностей с параметрами λ = 0 и β = 6,5;
- время заправки на первой колонке составляет 10±2,5 мин, а на второй – 13±4 мин;
- автомобиль подъезжает к колонке, которая не занята обслуживанием другого автомобиля.
Требуется промоделировать работу АЗС в течение рабочей смены– 8 ч– и определить параметры функционирования АЗС:
- коэффициент загрузки каждой колонки;
- среднее время обслуживания в каждой колонке;
- максимальное, среднее и текущее число автомобилей в очереди к каждой колонке;
- среднее время нахождения автомобиля в каждой очереди и др.
Для моделирования работы АЗС необходимо сформировать входной поток автомобилей, подъезжающих к заправке с интервалом времени, соответствующим экспоненциальному закону. Интервал времени рассчитывается по следующей формуле:
¦(х)=1/b*е (х)-l/b,b≥0.
В противном случае его значение равно 0.
В качестве единицы измерения времени примем минуту.
Моделирование потока машин, поступающих на заправку, будем выполнятьс помощью оператора 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 с соответствующим названием очереди. В нашем примере это будет выглядеть так: