Разработка средств моделирования систем
Реализуемая система должна должна генерировать входной язык (GPSS) для системы моделирования GPSSWorld.
Входной язык GPSS будет включать операторы (блоки), которые служат для описания модели, управляют редактором и режимом моделирования.
Текст нашей программы будит состоять только из управляющих операторов, которые описывают блоки модели. Они приводят к определенному действию и влияют н
а процесс моделирования.
Рассмотрим управляющие операторы, которые будем использовать для описания системы.
2.1 Операторы управления модельным временем
В разрабатываемой модели будем использовать только оператор START.
Формат оператора:START A, где А – значение счетчика завершения (количество заявок, которое должно пройти через сеть до завершения моделирования).
2.2 Датчики или генераторы транзактов
Формат оператора:GENERATE A, B, C, D, E,где А – определяет время, через которое появляется новый транзакт,В – модификатор времени, через которое появляется новый транзакт.
Если В не вызов функции, то В задает разбежку генерируемых по равномерному закону значений.
С – время задержки первого транзакта.
D – предельное количество генерируемых заявок (по умолчанию бесконечность).
Е – приоритет всех генерируемых транзактов.
Вместо параметра А так же могут задаваться специальные встроенные функции GPSS.
2.3 Для имитации обслуживания в устройстве используем оператор ADVANCE.
Формат оператора:ADVANCE A, В, гдеА – среднее время обслуживания заявки на устройстве, В – разбежка среднего времени обслуживания при равномерном обслуживании в устройстве (если отсутствует, то используется дискретный закон) .
2.4 Операторы управления маршрутными узлами
В программе оператор TRANSFER:TRANSFER А, В, где В – метка,А – вероятность перехода по метке В.
2.5 Операторы управления объектами сбора статистики
QUEUE A – войти в очередь А.
DEPART A – выйти из очереди А.
При прохождении транзакты не задерживаются. Эти операторы не влияют на логику работы модели. Любой транзакт может войти во сколько угодно очередей без ограничений.
2.6 TERMINATE (Уничтожить, терминировать)
Служит для удаления транзактов из модели по завершении их обработки. Производит подсчет выведенных из модели транзактов, уменьшая величину специального счетчика - счетчика завершений.
Формат: <TERMINATE [A]>, где: А - величина, на которую будет уменьшен счетчик завершений.
2.7 SEIZE (завладеть), RELEASE (освободить)
Оператор SEIZE, является парным с оператором RELEASE, использование их по одиночке не допустимо. Имена, записываемые в операнде А пары должны быть идентичны. Оператор служит приглашением ко входу в одно из устройств модели. Транзакт, подойдя к блоку SEIZE, пытается занять устройство, названное в операторе. Если устройство занято, транзакт ожидает освобождения устройства перед этим оператором. Перед оператором SEIZE может находиться любое количество транзактов. При попадании первого транзакта на обслуживание в устройство, происходит переключение, осуществляемое программой, запрещающее вход в устройство до окончания обслуживания.
Формат:< SEIZE А>,где А - имя (или номер) устройства.
Функция оператора RELEASE - моделировать освобождение устройства. Пройдя обслуживание в операторе ADVANCE, и исполнив, оператор RELEASE, транзакт переключает поименованное в операторе устройство из положения «занято» в положение «свободно» и разрешает вход в ADVANCE, первому из транзактов, ожидающих перед оператором SEIZE .
Формат: <RELEASE А>,где А - имя (или номер) устройства.
2.8 ENTER ( войти), LEAVE (отпустить)
Эта пара операторов выполняет те же функции, что и SEIZE и RELEASE, но не для устройств, а для STORAGE - «хранилищ», то есть для ресурсов, к которым может обращаться более одного транзакта. Такие объекты могут быть полезны при моделировании, например, распараллеленного процесса: обработки потока деталей на нескольких одинаковых станках, выхода публики из театра через несколько дверей и т.д. Эти «хранилища», или устройства параллельной обработки, должны быть предварительно описаны в программе при помощи оператора описания STORAGE (см. ниже). По логике своей работы связки операторов SEIZE – ADVANCE – RELEASE; ENTER- ADVANCE- LEAVE; абсолютно одинаковы, но употребляются для разных объектов.
2.9 FUNCTION ( функционировать )
Используется для определения характера функции, связывающей независимую переменную с рядом зависимых величин. Эта связь может иметь непрерывный или дискретный вид. Кроме того функция может быть представлена в символьном виде, когда значение функции вычисляется из выражения, приводимого в списке. Формат FUNCTION имеет вид:
<label FUNCTION A,B,[C] основной формат
X1,Y1/X2,Y2/,…/Xn,Yn> точки функции
Label – ярлык употребляется в обязательном порядке и служит для идентификации функции .
А - не имеет значения по умолчанию, определяет независимую переменную функции (аргумент), например, если используется равномерное распределение и БСВ берётся с 3-го генератора, то запись будет иметь вид RN3 (randomnumber). Операнд может кодироваться дополнительным выражением. Единственным ограничением является то, что аргумент не может прямо или косвенно ссылаться на функцию для которой он является независимой переменной. Значения функции могут задаваться числом с плавающей точкой.
B - не имеет значения по умолчанию, состоит из двух символов ( без пробела), первый из которых представляет собой обозначение типа функции, вида: C- непрерывная числовая, D – дискретная числовая, L - список числовых значений, E - дискретная символьная, M – список дискретных символов, S- селектор объектов; второй символ представляет собой целое число связанных пар значений функции, которые представляют собой точки функции и приводятся во второй строке описания формата. Если используется символ S, то он уточняется операндом С, используемым только в этом случае .
С - по умолчанию равен 0, применяется для перечисления типов объектов, если используются объекты разных типов, то приводятся их символы, разделяемые запятой без пробелов.
Рассмотрим пример записи функции :
SERVTIME FUNCTION RN7,D5
2,4/.55,7.5/.7,10.5/.8,13.5/1,16.5
2.10 STORAGE (Запомнить )
Используется для определения ёмкости одной или нескольких памятей. Исполнение STORAGE (впрочем, как и всех рассмотренных ) происходит только после успешного завершения процесса компиляции, при этом вводится в действие оговорённое число ресурсовSTORAGE . STORAGE в силу своей специфики должен располагаться в модуле описания, до того как началось движение транзактов, так как после компиляции программа последовательно исполняет все, стоящие до первого START. Формат STORAGE может быть представлен двумя способами :
<label STORAGE A >,
Label - не имеет значения по умолчанию, отсутствие ярлыка приводит к ошибке компиляции. Ярлык является идентификатором памяти, ёмкость которой определяется. При этом формате можно определить только одну память.
Другие рефераты на тему «Программирование, компьютеры и кибернетика»:
- Интеллектуальные информационные технологии и системы - генетические алгоритмы
- Работа со структурами в языке программирования Си++
- Основы работы в Windows 95(98) - стандартные программы Блокнот и Paint
- Проблемно-ориентированные пакеты прикладных программ в радиотехнике
- Анализ проблем информационной безопасности в компьютерной сети организации, подключенной к сети Интернтет
Поиск рефератов
Последние рефераты раздела
- Основные этапы объектно-ориентированного проектирования
- Основные структуры языка Java
- Основные принципы разработки графического пользовательского интерфейса
- Основы дискретной математики
- Программное обеспечение системы принятия решений адаптивного робота
- Программное обеспечение
- Проблемы сохранности информации в процессе предпринимательской деятельности