Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Программа модели





; Модель многоканальной СМО конечной надежности

; Определение МКУ и булевых переменных

Emk EQU 7

Zap EQU 2

Sist STORAGE 7

Kont1 BVARIABLE SV$Sist'AND'((7-S$Sist)>=Zap)

Kont2 BVARIABLE SE$Sist

; Сегмент имитации поступления и обслуживания заявок

GENERATE 2,,,7; Источник заявок

Met12 TEST E BV$Kont1,1,Met1; Есть ли место в МКУ?

SAVEVALUE KolPovt,(INT(Emk/Zap)) ENTER Sist,Zap; Занять МКУ

; Учет номеров транзактов, занявших МКУ

ASSIGN KolPovt,X$KolPovt; Запись в параметр цикла

Met5 TEST E X*KolPovt,0,Met4; Есть ли в списке место?

SAVEVALUE P$KolPovt,XN1; Да, записать номер транзакта

TRANSFER,Met6; Выйти из цикла

Met4 LOOP KolPovt,Met5; Повторить или конец цикла

; Met6 ADVANCE 5; Имитация обслуживания

LEAVE Sist,Zap; Освободить МКУ

; Учет номеров транзактов, освободивших МКУ

ASSIGN KolPovt,X$KolPovt; Запись в параметр цикла

Met8 TEST E X*KolPovt,XN1,Met7; Есть ли этот номер транзакта?

SAVEVALUE P$KolPovt,0; Да, тогда удалить

TRANSFER,Met9; Выйти из цикла

Met7 LOOP KolPovt,Met8; Повторить или конец цикла

Met9 TERMINATE 1; Обслуженные заявки

Met1 TERMINATE 1; Потерянные заявки

; Сегмент имитации неисправностей

GENERATE,,,1

Met2 ADVANCE 7.5; Интервал отказов

SUNAVAIL Sist; Перевод в недоступность

; Удаление транзактов из МКУ

ASSIGN KolPovt,X$KolPovt; Запись в параметр цикла

Met10 TEST NE X*KolPovt,0,Met11; Есть ли транзакт в МКУ

DISPLACE X*KolPovt,Met3; Да, тогда удалить

SAVEVALUE P$KolPovt,0; Снять с учета

Met11 LOOP KolPovt,Met10; Повторить или конец цикла

TEST E BV$Kont2,1; МКУ пуст?

ADVANCE 1; Да, тогда ремонтируем

SAVAIL Sist; Перевод в доступность

TRANSFER,Met2

Met3 LEAVE Sist,2; Освободить МКУ

TERMINATE 1; Удаленные из МКУ транзакты

В данной модели кроме блока DISPLACE показывается также применение булевых переменных.

Булевы переменные с использованием всего лишь одного блока дают возможность принимать решения в зависимости от состояния и значения атрибутов многих объектов GPSS. Булева переменная представляет собой логическое выражение, составленное из различных СЧА, в том числе и других булевых переменных.

Булева переменная определяется командой BVARIABLE.

Формат команды:

Name BVARIABLE A

Name - имя булевой переменной, которое также, как и имя арифметической переменной, по желанию пользователя командой EQU может быть заменено номером.

Операнд А - логическое выражение.

В выражении можно использовать арифметические и логические операторы. Результат преобразуется в целое значение 0, если равен нулю, или в целое значение 1, если отличен от нуля.

Логические операторы связаны с объектами аппаратной категории и используются для определения состояния этих объектов.

Имеются следующие логические операторы:

  • FVj равен 1, если устройство j доступно, иначе - 0;
  • FIj равен 1, если устройство j обслуживает прерывание, иначе - 0;
  • SFj равен 1, если МКУ j заполнено полностью, иначе - 0;
  • SEj равен 1, если МКУ j пусто, иначе - 0;
  • SVj равен 1, если МКУ j доступно, иначе - 0;
  • LSj равен 1, если логический ключ j включен, иначе - 0. Под j понимается номер или имя.

Например:

Oky BVARIABLE FV$Rem1

Can3 BVARIABLE SF$Usel

Prov1 BVARIABLE SV$Pusk

Prov2 BVARIABLE LS2

В первом примере булева переменная Oky равна 1, если устройство Rem1 доступно, и - 0, если не доступно. Во втором примере булева переменная Can3 равна 1, если МКУ Usel заполнено полностью. В третьем примере булева переменная Prov1 равна 1, если МКУ Pusk доступно. В четвертом примере булева переменная Prov2 равна 1, если логический ключ номер 2 включен.

Операторы отношения производят алгебраическое сравнение операндов. Например:

Prov1 BVARIABLE V$VseAvt'G'16

Prov2 BVARIABLE Q5$'LE'P3

Prov3 BVARIABLE MX$Plan(Stroka,Stolbez)'GE'P2

Булева переменная Prov1 равна 1, если переменная VseAvt больше 16, иначе равна 0. Во втором примере булева переменная Prov2 равна 1, если текущая длина очереди номер 5 меньше или равна значению параметра 3 транзакта. В третьем примере булева переменная Prov3 равна 1, если значение определенного элемента матрицы Plan больше или равно значению параметра 2.

Булевых операторов два: OR - ИЛИ и AND - И. Оператор ИЛИ проверяет выполнение хотя бы одного из условий, а оператор И требует выполнения обоих условий. Например:

Con1 BVARIABLE FI$Rem"OR"SF4

Con2 BVARIABLE FI$Rem"AND"SF$Pogr

Con3 BVARIABLE (V3'G'7)"AND"(FN$Rav"OR"LS7)

Булева переменная Con1 равна 1, если выполняется одно из условий: устройство Rem обслуживает прерывание или память номер 4 не заполнена. Булева переменная Con2 равна 1, если выполняются оба условия: устройство Rem обслуживает прерывание и память с именем Pogr не заполнена. В третьем примере переменная Con3 равна 1, если выполняются оба условия: значение переменной номер 3 больше 7 и логический ключ номер 7 включен.

Скобки в третьем примере нужны только для задания определенных булевых соотношений. Скобки следует использовать только в тех случаях, когда они необходимы.

Если булева переменная задается СЧА, как например

Stan BVARIABLE V$TreAvt

то вычисляется значение арифметической переменной с именем TreAvt и если оно отлично от нуля - значение булевой переменной Stan будет равно 1, в противном случае - 0.

Рассмотрим работу модели.

Блок GENERATE с интервалами две единицы модельного времени генерирует семь транзактов. Следующий за ним блок TEST проверяет МКУ Sist на исправность (доступность) и наличия в нем свободных каналов, достаточных для удовлетворения запроса. Если булева переменная Kont1 равна 1, транзакт пропускается и занимает МКУ Sist. Но перед этим вычисляется и заносится целое число INT(Emk/Zap) = INT(7/2)=3 в сохраняемую ячейку с именем KolPovt, которое определяет, сколько транзактов может одновременно находится в МКУ.

После выхода транзакта из блока ENTER начинает работать сегмент учета номеров транзактов, занявших МКУ. Блоком ASSIGN в параметр с именем KolPovt - параметр цикла - заносится число, находящееся в сохраняемой ячейке с именем KolPovt. Далее в цикле, тело которого начинается с блока TEST с меткой Met5 и заканчивается блоком LOOP с меткой Met4, находится свободное место в списке для записи номера транзакта. Свободное место определяется блоком TEST как равенство нулю значения какой-либо одной из трех сохраняемых ячеек Х1, Х2 или Х3 (по числу транзактов, одновременно находящихся в МКУ). Такая ячейка всегда есть и блоком SAVEVALUE в нее записывается номер занявшего МКУ транзакта. А так как сохраняемых ячеек, значения которых равны нулю, может быть несколько (особенно вначале работы модели), после записи номера транзакта осуществл яется выход из цикла.

Транзакт направляется к блоку ADVANCE с меткой Met6 и входит в него. Имитируется обслуживание заявки. После обслуживания транзакт освобождает МКУ Sist, пройдя блок LEAVE.

Начинает работать сегмент учета номеров транзактов, освободивших МКУ. Его работа аналогична рассмотренной ранее работе сегмента учета номеров транзактов, занявших МКУ. Отличие состоит в том, что отыскивается сохраняемая ячейка Х1, Х2 или Х3, которая содержит номер обслуженного транзакта. Найденная ячейка обнуляется, т. е. обслуженный транзакт снимается с учета. Так как номер записывается только в одну ячейку, то после ее обнуления осуществляется выход из цикла, тело которого начинается с блока TEST с меткой Met8 и заканчивается блоком LOOP с меткой Met7.

Теперь рассмотрим работу модели при возникновении неисправности МКУ. Транзакт, инициирующий неисправность, после задержки блоком ADVANCE сегмента имитации неисправностей, входит в блок SUNAVAIL, который переводит МКУ Sist в недоступное (неисправное) состояние.

Далее начинается работа сегмента удаления транзактов из МКУ. Суть ее заключается в следующем. В цикле, также организованном с помощью блока LOOP, просматривается список номеров транзактов, занявших МКУ. Если значение какой-либо сохраняемой ячейки Х1, Х2 или Х3 не равно нулю, значит в ней записан номер транзакта, находящегося в данный момент в МКУ. Блоком DISPLACE этот транзакт перемещается к блоку LEAVE с меткой Met3, освобождает МКУ и выводится из модели.

После удаления из МКУ всех транзактов, транзакт - инициатор неисправности входит в следующий за блоком LOOP с меткой Met11 блок TEST. Так как МКУ Sist пусто (булева переменная Kont2 равна нулю), блок TEST пропускает этот транзакт в блок ADVANCE и начинается имитация восстановления работоспособности МКУ.

Результаты моделирования представлены в табл. 6.4.

Из результатов следует, что обслужены только две заявки (первый и шестой транзакты). Пять заявок не обслужены: пятый тран-закт поступил, когда МКУ было неисправным, а третий и четвертый, седьмой и восьмой транзакты потеряны: в моменты возникновения неисправностей (t = 7,5 и t =16 соответственно) они находились в МКУ.

Таблица 6.4. Результаты моделирования примера п. 6.8.1
События Транзакты
               
Вход в модель              
Занятие МКУ              
В МКУ транзакты   1,3 1,3,4     6,7 6,7,8
Удаление   7.5 7.5        
Освобождение МКУ   7.5 7.5        
Вывод из модели   7.5 7.5        

Коэффициент использования (Util.) МКУ Sist равен 0,375. Он рассчитывается по формуле:

где - число транзактов, занимавших МКУ за время Т моделирования;

- число каналов МКУ (емкость);

- число каналов, занимаемых i - м транзактом;

- промежуток времени, в течение которого - м транзактом было занято каналов, рассчитывается как

и - абсолютное модельное время занятия и освобождения соответственно каналов МКУ.

Для рассматриваемого примера п. 6.8.1 (см. табл. 6.4) имеем:

Таким образом, коэффициент использования МКУ рассчитан с учетом времени занятия его полностью обработанными транзак-тами и временем, затраченным на обработку тех транзактов, обслуживание которых было прервано.

Если в результате моделирования требуется определить коэффициент использования МКУ без учета удаленных из него тран-зактов, т. е. транзактов, обслуживание которых было прервано, пользователь может это сделать самостоятельно. Для этого нужно знать, сколько заявок будет обслужено полностью. Введем в модель следующие строки:

KIsp VARIABLE (Zap#N$Met9#5)/(Emk#16) SAVEVALUE KIsp,V$KIsp

Получим

Вопросы для самоконтроля

  1. Перечислите категории объектов GPSS World.
  2. Какие реальные объекты моделируются транзактом?
  3. Назовите блок, генерирующий транзакты, его формат и назначение операндов.
  4. Раскройте понятие одноканального устройства (ОКУ), режимы его работы. Напишите операторы, описывающие ОКУ; назначение операндов.
  5. Раскройте понятие многоканального устройства (МКУ), режимы его работы. Напишите операторы, описывающие МКУ; назначение операндов.
  6. Назовите блоки, обеспечивающие получение статистических результатов.
  7. Назначение и формат операторов LINK и UNLINK.
  8. Что такое системные числовые атрибуты?
  9. Как описывается в модели арифметическое выражение? Приведите примеры.
  10. Как организовать в модели сохранение какой-либо величины?
  11. Что такое прямая и обратная задачи имитационного моделирования?
  12. Назовите виды списков для хранения транзактов.
  13. Назовите виды списков ОКУ и МКУ.
  14. Структура модели на языке GPSS и ее представление в виде блок-диаграмм.
  15. Назначение, сходство и различие команд CLEAR и RESET.
  16. Назовите блоки, изменяющие последовательность движения транзактов (блоки передачи управления).
  17. Приведите пример фрагмента модели, с введением которого арифметические выражения расчета результатов моделирования не требуют корректировки при изменении количества прогонов.
  18. Какими методами можно уменьшить машинное время моделирования?
  19. Измените условия примера 6.1 так, чтобы сервер стал однофазной системой массового обслуживания с ожиданием разомкнутого типа (добавьте входной накопитель емкостью на L сообщений). В соответствии с этим откорректируйте программу модели решения прямой задачи (п. 6.3.1). Запустите модель и получите результаты.
  20. Откорректируйте так же, как и в вопросе 6.19, программу модели решения обратной задачи (п. 6.3.2). В качестве количества запросов, время обработки которых нужно оценить, используйте результат моделирования, полученный при решении прямой задачи. Запустите модель. Получив результаты, сделайте выводы об особенностях решения прямой и обратной задач. Выясните, учитывается ли стохастичность при решении обратной задачи.
  21. В каких отношениях должны быть средние значения и среднеквадратические отклонения равномерного и нормального распределений? К чему приводят несоблюдения этих отношений?
  22. Какими средствами GPSS World можно представлять исходные данные в программе модели?
  23. Внесите изменения в исходные данные модели процесса изготовления изделий на предприятии (п. 6.5.1.2, прямая задача): количество цехов, а значит и количество различных типов блоков, выпускаемых цехами, из которых собирается одно изделие, равно шести (). Откорректируйте в соответствии с этим программу модели. Дополните по своему усмотрению необходимыми исходными данными. Сравните результаты моделирования с результатами, полученными при .
  24. Проделайте то же самое, что и при ответе на вопрос 6.23, с моделью процесса изготовления изделий на предприятии (обратная задача). Количество изделий, время подготовки которых нужно оценить, возьмите из ответа на вопрос 6.23.
  25. Какими методами можно сократить количество блоков в программе модели?
  26. Приведите примеры организации циклов средствами GPSS World. Назовите достоинства и недостатки.
  27. Приведите пример розыгрыша в имитационной модели группы несовместных независимых событий средствами GPSS World.
  28. Приведите варианты организации счета, например, сообщений по видам и в целом средствами GPSS World.
  29. Приведите примеры имитации средствами GPSS World неисправностей одноканальных устройств.
  30. Какими средствами GPSS World можно организовать изменение версий модели?
  31. Измените постановку задачи процесса изготовления изделий на предприятии (п. 6.4.1.1, прямая задача) так, чтобы на откорректированной в соответствии с этими изменениями модели можно было исследовать зависимость дохода (в условных единицах) предприятия от качества изготовления блоков и других факторов.
  32. Какими средствами GPSS World можно имитировать неисправности многоканальных

 

. Лекция: Организация компьютерных экспериментов: версия для печати и PDA Необходимым условием успешного моделирования является обеспечение адекватности модели, т. е. функционального или структурного тождества модели исследуемому процессу или объекту относительно цели исследования. Однако этого недостаточно. Для успешного исследования необходимо разработать план эксперимента с моделью, правильно обработать и интерпретировать результаты моделирования. Как можно проводить эксперимент? Изменять значения факторов, получать значения целевой функции (функции отклика), а потом обрабатывать или вручную или с использованием различных математических программ.
GPSS World имеет все необходимые средства, которые позволяют провести:
  • дисперсионный анализ (отсеивающий эксперимент);
  • регрессионный анализ (оптимизирующий эксперимент);
  • собственный эксперимент пользователя. Рассмотрение возможностей GPSS World по проведению компьютерных экспериментов начнем с дисперсионного анализа.
7.1. Дисперсионный анализ (отсеивающий эксперимент). Прямая задача Сущность этого эксперимента состоит в проведении многофакторного дисперсионного анализа с целью выявления степени влияния различных факторов и их комбинаций (взаимодействий) на значение целевой функции (функции отклика, представленной в виде уравнения регрессии). Пример 7.1. В условиях примера 6.1 (прямая задача) требуется исследовать зависимость вероятности обработки запросов от трех факторов, например, при следующих их минимальных и максимальных значениях (табл. 7.1):
Таблица 7.1.  
Уровни факторов Факторы  
T1_, с Koef Q_, оп/c  
Нижний   0.5    
Верхний   1.5    

Для проведения дисперсионного анализа нужно воспользоваться созданным в п. 6.3.1 объектом "Модель". В программе модели удалите последние три строки:

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

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

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

Откройте модель Прямая задача. Выберите Edit / Insert Experiment / Screening … (Правка / Вставить эксперимент / Отсеивающий …).

Откроется диалоговое окно Screening Experiment Generator (Генератор отсеивающего эксперимента) (рис. 7.1).


Рис. 7.1. Диалоговое окно (незаполненное) Screening Experiment Generator (Генератор отсеивающего эксперимента)

Приступите к заполнению полей диалогового окна.

В поля Experiment Name (Имя эксперимента) и Run Procedure Name (Имя процедуры запуска) введите, например, Dis_Server и Dis_Server_Run соответственно (рис. 7.2).

Имена эксперименту и процедуре запуска эксперимента дает пользователь.


Рис. 7.2. Диалоговое окно (заполненное) Screening Experiment Generator (Генератор отсеивающего эксперимента)

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

В GPSS World максимальное количество факторов, влияние которых на функцию отклика можно исследовать посредством дисперсионного анализа, равно шести.

Для каждого фактора необходимо выбрать два уровня - нижний и верхний. Рекомендуется выбирать уровни, значительно отстоящие друг от друга. Это необходимо для получения также значительно отличающихся откликов.

Введите ранее выбранные факторы, начиная с фактора А. В поле Name (User Variable) (Имя (Переменная пользователя)) введите имя фактора, в поля Value1 и Value2 - его нижний и верхний уровни соответственно. После ввода всех факторов для дальнейшей работы будем иметь факторы А, В и С.

Ниже идет группа Fraction (Часть полного эксперимента). Эксперимент, проводимый в GPSS World, может быть полным факторным экспериментом (ПФЭ) или дробным факторным экспериментом (ДФЭ). Группа Fraction (Часть дробного эксперимента) позволяет это задавать, т. е. позволяет провести стратегическое планирование эксперимента, цель которого, как вам известно, является определение количества наблюдений и сочетаний уровней факторов в них для получения наиболее полной и достоверной информации о поведении системы.

Установке ПФЭ соответствует кнопка Full, для ДФЭ в 1/2 от ПФЭ - Half, в 1/4 - Quarter, в 1/8 - Eight, в 1/16 - Sixteen.

Установите пока Half (1/2). Справа под Run Count появится число 4, так как 22 =4. Это количество наблюдений, которое необходимо сделать. Количество прогонов в каждом наблюдении будет указано позже.

В поле Expression (Выражение) группы Result (Результат) введите выражение, по которому вычисляется вероятность обработки запросов: N$ObrZap/N$KolZap.

После группы Result (Результат) расположены два флажка, позволяющие выбирать опции.

При выборе опции Generate Run Procedure вместе с экспериментом создается стандартная процедура запуска, которую пользователь может корректировать согласно своим требованиям.

Выбор второй опции Load F11 with CONDUCT Command закрепляет команду CONDUCT за функциональной клавишей F11. Тогда после создания объекта "Процесс моделирования" для запуска эксперимента нужно только нажать функциональную клавишу F11. Выберите обе опции.

Перед созданием эксперимента необходимо изучить группы смешивания с целью осуществления стратегического планирования эксперимента. Для этого нужно нажать кнопку Alias Groups (Группы смешивания). Появится диалоговое окно Alias Groups (Группы смешивания) (рис. 7.3).

При изучении групп смешивания необходимо вначале найти отсутствующие факторы, а затем факторы, которые неразличимы, так как находятся в одной группе смешивания. Например, взаимодействие факторов А и В - АВ.

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

Нажмите кнопку Cancel (Отмена).


Рис. 7.3. диалоговое окно Alias Groups (Группы смешивания)

В диалоговом окне Screening Experiment Generator (Генератор отсеивающего эксперимента) в группе Fraction (Часть дробного эксперимента) установите Full (ПФЭ). Под Run Count появится число 8.

Обратите внимание, что кнопка Alias Groups (Группы смешивания) при установке полного факторного эксперимента Full (ПФЭ) не будет активной.

Теперь необходимо создать Plus - операторы и вставить их в нижнюю часть модели Прямая задача. Для этого нажмите кнопку Insert Experiment (Вставить эксперимент), расположенную в левой нижней части диалогового окна Screening Experiment Generator (Генератор отсеивающего эксперимента).

Так как была выбрана опция Generate Run Procedure, то создана стандартная процедура запуска. Появится ее диалоговое окно, дающее возможность пользователю изменить процедуру запуска согласно своим требованиям.

Введите через пробел после слова PROCEDURE указанное ранее имя процедуры Dis_Server_Run, оставив в скобках (Run_Number), без изменения (рис. 7.4).

Перейдите, пользуясь клавишами вверх-вниз, в конец процедуры запуска. Там в разделе Set up your own run conditions (Задайте свои условия наблюдения) имеются две команды START, между которыми находится команда RESET (рис. 7.5).

Поясним назначение этих команд.

Для получения достоверной статистики существуют три подхода (см. п. 4.9). В генераторе экспериментов использован третий подход.


Рис. 7.4. Диалоговое окно стандартной процедуры запуска


Рис. 7.5. Условия стандартной процедуры запуска по умолчанию

Первой командой START

DoCommand("START 100,NP"); /*Get past the Startup Period. */

определяется количество прогонов в неустоявшемся режиме.

Подразумевается, что если моделирование выполняется долго, то система приходит в стационарное состояние. Сколько времени следует вести моделирование, чтобы достичь стационарного состояния? Часто ответ на этот вопрос можно получить из опыта экспериментирования с моделью. Команда RESET служит для этого. Она сбрасывает в ноль накопленную на неустоявшемся режиме статистику без удаления транзактов из процесса моделирования. Второй командой START

DoCommand("START 1000,NP"); /*Run the Simulation. */

определяется количество прогонов в наблюдении, т. е. количество прогонов, которое было определено ранее при тактическом планировании эксперимента: N=9604. Измените 1000 на 9604 (рис. 7.6).

Корректировка процедуры запуска возможна до и после того, как она будет добавлена к объекту "Модель". После корректировки нажмите Ok. Сгенерированный Plus - эксперимент представлен ниже. Изучите его. Это необходимо для создания собственных экспериментов.


Рис. 7.6. Условия стандартной процедуры запуска после корректировки

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

Plus - эксперимент содержит также вызов Plus - процедуры запуска. Процедура запуска осуществляет связь между генерируемым экспериментом и процессом моделирования. Она вызывается столько раз, сколько требуется сделать наблюдений. Так как процедура запуска вызывается Plus - экспериментом, ей разрешается вызывать библиотечную процедуру DoCommand и, следовательно, выполнять RMULT, CLEAR, RESET и многие другие команды GPSS. Поэтому все команды, необходимые для определения условий наблюдения, следует помещать в процедуру запуска.

Для сохранения матрицы результатов при обнулении переменных перед очередным наблюдением используется команда CLEAR OFF. Для изменения начального числа генератора случайных чисел в каждом наблюдении процедуре передается номер запуска.

****************************************************

* Dis_Server *

* Факторный отсеивающий эксперимент *

****************************************************

Dis_Server_Results MATRIX,2,2,2

INITIAL Dis_Server_Results,UNSPECIFIED

Dis_Server_NextRunNumber EQU 0

EXPERIMENT Dis_Server() BEGIN

 

/* Наблюдение 1 */

T1_ = 60;

Koef = 0.5;

Q_ = 300000;

IF (StringCompare(DataType(Dis_Server_Results[1,1,1]),

"UNSPECIFIED")'E'0)

THEN BEGIN

/* Установить начальное значение переменной количества наблюдений */

Dis_Server_NextRunNumber = 1;

/* Записать данные наблюдения и запустить процесс моделирования*/

Dis_Server_GetResult();

Dis_Server_Results[1,1,1] = N$ObrZap/N$KolZap;

END;

 

/* Наблюдение 2 */

T1_ = 60;

Koef = 0.5;

Q_ = 700000;

IF (StringCompare(DataType(Dis_Server_Results[1,1,2]),

"UNSPECIFIED")'E'0)

THEN BEGIN

/* Записать данные наблюдения и запустить процесс моделирования */

Dis_Server_GetResult();

Dis_Server_Results[1,1,2] = N$ObrZap/N$KolZap;

END;

 

/* Наблюдения 3 - 7 для краткости пропущены */

/* Наблюдение 8 */

T1_ = 180;

Koef = 1.5;

Q_ = 700000;

IF (StringCompare(DataType(Dis_Server_Results[2,2,2]),

"UNSPECIFIED")'E'0)

THEN BEGIN

/* Записать данные наблюдения и запустить процесс моделирования */

Dis_Server_GetResult();

Dis_Server_Results[2,2,2] = N$ObrZap/N$KolZap;

END;

/* Эффекты смешивания в дробном факторном эксперименте */

SE_Effects(Dis_Server_Results,"I");

END;

 

*******************************************************

* Процедура запуска наблюдения *

*******************************************************

PROCEDURE Dis_Server_GetResult() BEGIN

/* Выполнить указанное число прогонов и записать результаты. */

/* Факторы для этого наблюдения уже были определены. */

TEMPORARY CurrentYield,ShowString,CommandString;

/* Вызов процедуры запуска */

Dis_Server_Run(Dis_Server_NextRunNumber);

CurrentYield = N$ObrZap/N$KolZap;

ShowString = PolyCatenate("Run ",String(Dis_Server_NextRunNumber),

". ", "");

ShowString = PolyCatenate(ShowString," Yield=",String(CurrentYield),

". ");

ShowString = PolyCatenate(ShowString," T1_=",String(T1_), ";");

ShowString = PolyCatenate(ShowString," Koef=",String(Koef), ";");

ShowString = PolyCatenate(ShowString," Q_=",String(Q_), ";");

CommandString = PolyCatenate("SHOW """,ShowString,

"""", "");

DoCommand(CommandString);

Dis_Server_NextRunNumber = Dis_Server_NextRunNumber + 1;

RETURN CurrentYield;

END;

*******************************************************

* Процедура запуска *

*******************************************************

PROCEDURE Dis_Server_Run(Run_Number) BEGIN

DoCommand("CLEAR OFF"); /* Использовать OFF для сохранения результата. */

/* Увеличьте число команд RMULT, если у вас большее число ГСЧ. */

/* Задать новые случайные числа всем потокам случайных чисел. */

TEMPORARY CommandString;

/* Вычислить, прежде чем перейти к DoCommand. */

CommandString = Catenate("RMULT ",Run_Number#111);

/* DoCommand контролирует строку в глобальном контексте. */

DoCommand(CommandString);

/* Установить собственные условия наблюдения. */

DoCommand("START 100,NP"); /* Пройти неустоявшийся режим. */

DoCommand("RESET"); /* Начать период измерений. */

DoCommand("START 9604,NP"); /* Провести моделирование. */

END;

Проведем эксперимент. Для вызова эксперимента предназначена команда CONDUCT. Однако за функциональной клавишей [F11] была закреплена соответствующая команда CONDUCT (Edit / Settings / Function Keys (Правка / Настройки / Функциональные клавиши).

Проведите трансляцию, т. е. создайте объект "Процесс моделирования", для чего нажмите [Ctrl]+[Alt]+[S] или выполните команду Command / Create Simulation (Команда / Создать процесс моделирования).

При отсутствии ошибок в сгенерированном эксперименте в окне Journal (Журнал) появится сообщение (рис. 7.7), свидетельствующее об отсутствии ошибок.

Теперь нажмите функциональную клавишу [F11]. Эксперимент начинает работать.

Замечание. Во время эксперимента доступна только команда HALT, а все остальные команды становятся неактивными, т. е. процесс моделирования можно только остановить и потом продолжить, но просмотреть его с использованием меню, вызываемого командой WINDOW / SIMULATION WINDOW и другими командами, нельзя.

В ходе выполнения сгенерированного эксперимента автоматически создается отчет, который по готовности записывается в окно Journal (Журнал) объекта "Процесс моделирования". Фрагмент отчета для четырех наблюдений (Run1 … Run4) показан на рис. 7.8. В отчете содержатся Yield - целевая функция и значения факторов, при которых получение значение целевой функции.


Рис. 7.7. Окно Journal (Журнал) с сообщением об успешном создании объекта "Процесс моделирования"


Рис. 7.8. Окно Journal (Журнал) с отчетами по каждому наблюдению

Так как эксперимент включает 8 наблюдений по 9604 прогонов в каждом из них, то будет выдано 8 отчетов (на рис. 7.8 в целях сокращения показаны только первые четыре отчета). Окончательные результаты моделирования после статистической обработки будут выведены в виде таблицы Anova (рис. 7.9).

В таблице каждый фактор и взаимодействие факторов представлены отдельной строкой. В каждой строке для всех эффектов указаны коэффициенты, с которыми они входят в целевую функцию (столбец Effect), а для главных эффектов (А, В, С) - суммы квадратов отклонений, аналогичных величинам Q 1 (см. п. 5.7) - столбец Sum of Squares.

В столбце Degrees of Freedom приведены степени свободы соответствующих измерений.

В столбце F-for Only Main Effects - вычисленные значения F-статистик для главных эффектов, а в столбце Critical Value of F (p=0,5) - соответствующие критические значения F - распределения для уровня значимости 50%.

В строке Error показаны остаточная составляющая дисперсии (аналогичная Q 2 в п. 5.7) и соответствующая степень свободы.

В строке Total - общая сумма квадратов ошибок по всему эксперименту.


увеличить изображение
Рис. 7.9. Результаты дисперсионного анализа

В строке Greand - среднее значение результата исследования (в примере - вероятности) по данным всего эксперимента.

Чем больше значение F-статистики (F-for Only Main Effects), тем сильнее эффект. Эффект, а, следовательно, и фактор, считается значимым, если превышает критическое значение (Critical Value of F (p=.05)).

В данном примере факторы А, В и С являются значимыми, так как их F-статистики больше критического значения, равного 7.71.

Наибольший эффект на вероятность обработки запросов оказывают факторы В и А, так как они имеют самые большие и близкие статистики (356,055 и 355.658 соответственно). Обратите внимание, что эффекты факторов А и В противоположны.

Таким образом, по результатам моделирования можно сделать вывод, что при данном потоке и характеристике сервера вероятность обработки запросов в среднем составляет 0,481, т. е. вероятность потерь запросов составляет 0,519. Для уменьшения потерь запросов нужно продолжить исследование каждого значимого фактора и в первую очередь факторов В и А, как наиболее существенных.

Date: 2015-07-17; view: 600; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию