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


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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; Нарушение авторских прав



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