Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Решение обратной задачи
Для решения обратной задачи возьмем количество запросов, ожидаемое время обработки которых нужно определить, 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));Расчет среднего времени обработки запросов Date: 2015-07-17; view: 378; Нарушение авторских прав |