Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
В.Д. Боев, Р.П. Сыпченко.docx
Скачиваний:
179
Добавлен:
19.09.2019
Размер:
7.07 Mб
Скачать

6.3.2.3. Ввод текста программы модели, исправление ошибок и проведение моделирования

  1. Запустите GPSS World.

  2. Закройте окно напоминания о необходимости обновления "Заметок". Откроется главное меню.

  3. Для ввода текста GPSS World имеет текстовый редактор. Откройте окно текстового редактора. Для этого выберите в меню File New и в появившемся меню выберитеModel. Нажмите Ok.

  4. Наберите текст программы модели, т. е. создайте объект "Модель". При вводе текста следует использовать клавишу [Tab]. Например, после набора Т1_ нужно нажать клавишу [Tab]. Интервалы табуляции установлены по умолчанию.

  5. После ввода текста программы модели создайте объект "Процесс моделирования", представляющий собой оттранслированный объект "Модель". Для трансляции объекта "Модель" выберите Command Creat e Simulation. По этой команде транслятор GPSS проверяет текст программы модели на наличие синтаксических ошибок.

  6. При наличии синтаксических ошибок транслятор в окне JOURNAL выдаст список сообщений об ошибках трансляции. Перейдите к п. 7. При отсутствии ошибок в окнеJOURNAL появится сообщение Model Translation Begun. Ready. Перейдите к п. 9.

  7. Исправьте ошибки. Для поиска ошибок в тексте программы модели и их исправления используйте команду Search Next Error. При первом выполнении этой команды курсор мыши помещается в строке текста модели с ошибкой. После исправления первой ошибки вновь используйте команду Search Next Error и т.д. столько раз, сколько ошибок в тексте программы.

  8. После исправления ошибок перейдите к п.5.

  9. Сохраните модель. Для этого выберите в главном меню File Save As. Дайте модели имя Модель процессов изготовления изделий и нажмите Ok.

  10. Откликом в данной модели является вероятность обработки запросов сервером. Рассчитаем количество прогонов модели при среднеквадратическом отклонении для худшего случая при точности  , и доверительной вероятности  :

  11. Запустите модель. Для этого в главном меню выберите Command Start и в диалоговом окне вместо 1 наберите 9604. Нажмите Ok.

  12. При наличии логических ошибок для их поиска в тексте программы модели и исправления используйте команду Search Goto Line столько раз, сколько ошибок указано в окне JOURNAL. Там же (в окне JOURNAL ) указаны номера строк с ошибками.

  13. При отсутствии логических ошибок в модели по окончании ее работы система GPSS World автоматически создает стандартный отчет, который появится в окне Report. В окне будут содержаться следующие данные:

    • об именах объектов модели;

    • блоках модели;

    • ОКУ и МКУ;

    • очередях;

    • сохраняемых величинах.

В результате решения прямой задачи получим, что за один час сервером будет обработано N=16 запросов, а вероятность обработки составит VerObr = 0,546. Если не использовать процедуру INT - выделения целого числа с отбрасыванием дробной части, будет обработано 16,345 запроса.

6.3.3. Решение обратной задачи

Для решения обратной задачи возьмем количество запросов, ожидаемое время обработки которых нужно определить, N =16 - результат решения прямой задачи.

Программа модели приведена ниже.

; Обработка запросов сервером. Обратная задача

; Задание исходных данных

T1_ EQU 120 ; Средний интервал поступления запросов, с

S1_ EQU 60000000 ; Среднее значение вычислительной сложности запросов, оп

S2_ EQU 200000 ; Стандартное отклонение вычислительной сложности запросов, оп

Q_ EQU 600000 ; Среднее значение производительности сервера, оп/c

Koef EQU 1 ; Коэффициент изменения характеристик нормального распределения

Koef1 EQU 1 ; Коэффициент учета дробной части

N_ EQU 16 ; Количество запросов

; Сегмент имитации обработки запросов

GENERATE (Exponential(1,0,T1_)) ; Источник запросов

KolZap GATE NU Server,PotZap ; Свободен ли сервер? Если да, то

SEIZE Server ; занять сервер

ADVANCE ((Normal(2,(S1_#Koef),(S2_#Koef)))/Q_) ; Имитация обработки запроса

RELEASE Server ; Освободить сервер

TRANSFER ,ObrZap ; Запрос отправляется в сегмент завершения моделирования

PotZap TERMINATE ; Потерянные запросы

; Сегмент организации завершения моделирования и расчета результатов

ObrZap TEST L X$Prog,TG1,Met1 ; Если X$Prog < TG1,

SAVEVALUE Prog,TG1 ; то X$Prog = TG1

SAVEVALUE NZap,0 ; Обнуление счетчика обработанных запросов

Met1 SAVEVALUE NZap+,1 ; Счет количества обработанных запросов

TEST E X$NZap,N_,Ter1 ; Если X$NZap = N_, то

TEST E TG1,1,Met2 ; если TG1 = 1, то

SAVEVALUE VerObr,(N$ObrZap/N$KolZap)

; расчет и сохранение в ячейке VerObr вероятности обработки запросов

SAVEVALUE TimeNZap,((AC1-X$AC2)/(X$Prog#Koef1))

;расчет и сохранение в ячейке TimeNZap времени обработки запросов

SAVEVALUE AC2,AC1 ; Запомнить абсолютное модельное время в ячейке АС2

Met2 SAVEVALUE NZap,0 ; Обнуление счетчика обработанных запросов

TERMINATE 1

Ter1 TERMINATE

START 1000,NP ; Прогоны до установившегося режима

RESET ; Сброс накопленной статистики

START 9604 ; Количество прогонов модели

При решении обратной задачи один прогон определяется заданным количеством запросов N_, а не временем моделирования. Для этого организован счетчик обработанных запросов в виде сохраняемой ячейки NZap. Как только содержимое X$NZap = N_, из счетчика завершений вычитается единица.

Для расчета времени обработки заданного количества запросов используется арифметическое выражение (AC1-X$AC2)/X$Prog. В состав этого выражения входят абсолютное модельное время АС1 и опять количество прогонов. Запоминается количество прогонов также как и при решении прямой задачи.

Кроме этого, в арифметическом выражении есть сохраняемая ячейка X$AC2. Дело в том, что команда RESET не влияет на абсолютное модельное время АС1. Время же выполнения 1000 прогонов до установившегося режима не должно участвовать в расчете. Поэтому оно запоминается, а затем вычитается из абсолютного модельного времени выполнения 1000 + 9604 = 10604 прогонов. Количество прогонов до установившегося режима может быть и другим.

В результате моделирования получим время обработки 16 запросов 3523,658 с.

Фрагмент из отчета моделирования приведен ниже:

SAVEVALUE RETRY VALUE

PROG 0 9604.000

NZAP 0 0

VEROBR 0 0.546

TIMENZAP 0 3523.658

А почему не 3600 с? Ведь это же время моделирования было задано при решении прямой задачи. Потому что мы отбросили дробную часть, т. е. взяли 16, а не 16,345. Как же поступить, чтобы учесть и отброшенную дробную часть? Ведь в счетчике фиксируются обработанные запросы только целыми числами, а не дробными?

Для учета десятых долей дробной части зададим N_ = 163, т. е. увеличим в 10 раз. Это нужно учесть и в арифметическом выражении: ((AC1-X$AC2)/(X$Prog#Koef1)). Переменной пользователя Koef1 задается значение 10. По завершении моделирования получим 3586,504. Этот результат уже ближе к 3600.

Для учета сотых долей дробной части зададим N_ = 1634, а Koef1 = 100. Получим 3595,399 с.

Вероятность обработки запросов во всех случаях практически одна и та же, т. е. 0,546. Однако время моделирования существенно возрастает: 4 с, 39 с и 6 мин 29 c, т. е. в 10 и 100 раз соответственно.

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

Например (см. сегмент организации завершения моделирования и расчета результатов):

ADVANCE ((Normal(2,(S1_#Koef),(S2_#Koef)))/Q_) ; Розыгрыш времени обработки запроса

SAVEVALUE VerObr,(N$ObrZap/N$KolZap)) ; Расчет вероятности обработки запросов

SAVEVALUE TimeNZap,((AC1-X$AC2)/(X$Prog#Koef1)) ;Расчет среднего времени обработки запросов