Автор: Пользователь скрыл имя, 26 Июля 2011 в 11:31, курсовая работа
Целью данного курсового проекта является построение имитационной модели вычислительной сети и определение её оптимальных критериев для минимизации убытков.
Введение 4
1 Описание моделируемой системы и задание на моделирование 6
2 Структурная схема модели системы 8
3 Результат работы модели 16
4 Эксперимент пользователя 17
5 Расчет статистических показателей 26
Заключение 30
Список использованной литературы 31
Приложение А 32
Приложение Б 38
Сообщение обрабатывается в мини-ЭВМ и уходит из системы.
Рисунок
5 – Сегмент авральной обработки
Рисунок
6 – Сегмент учёта потерянных сообщений
Учёт потерянных сообщений ведётся с помощью сохраняемой величины LOOSE.
В программе нам будет удобнее использовать не величину k, а результирующее время обработки сообщений в авральном режиме Tavr = T3-k, т.к. в этом случае вычисление будет производиться только один раз – при подсчёте убытков, а не на каждом прогоне для вычисления Tavr.
Получаем два оптимизируемых показателя: ёмкость входного накопителя NCapacity и время обработки в авральном режиме Tavr, причём NCapacity может изменяться от 5 до бесконечности, а Tavr – от T3 до 1.
Необходимо подобрать эти показатели таким образом, чтобы минимизировать убытки, вычисляемые:
SUMM
VARIABLE -(10#X$ALLENTERS#(Ncapacity-5)
В программе приведённая величина инвертируется для удобства использования в эксперименте. Таким образом речь идёт уже о максимизации получаемого значения.
3 Результат работы
модели
В
результате запуска модели для первого
варианта при k=1 была получена следующая
статистика:
Рисунок
7 – Значения сохраняемых величин
Обработаны были 1016 сообщений, из них 897 – в авральном режиме за время 29954 микросекунд, 22 сообщения было потеряно. Суммарные затраты составили 186409 единиц стоимости.
Можно отметить, что большую часть времени система работала в авральном режиме. В сравнении с затратами на авральную обработку потерянные сообщения составляют незначительную часть затрат. В связи с этим стоит в первую очередь заняться уменьшением затрат на авральную обработку.
4 Эксперимент пользователя
Так как имеются две оптимизируемые величины, каждая из которых может изменяться в широком диапазоне значений, следует воспользоваться экспериментом пользователя.
В пользовательском эксперименте для задания последовательности команд и исходных данных каждого прогона модели удобно использовать PLUS-процедуру. Такая процедура может инициализировать генераторы случайных чисел, выполнять команды и управлять имитацией.
Для примера возьмём значения первого варианта.
Напишем на данном языке:
experiment
go(Par1,Par2)
begin
temporary CurYield, ShowString, CommandString;
Ncapacity=Par1;
Tavr=Par2;
CurYield=GetResult();
ShowString= PolyCatenate("Summ ", String(CurYield), ". ");
ShowString=PolyCatenate(
ShowString=PolyCatenate(
DoCommand(PolyCatenate("SHOW """,ShowString,"""",""));
END;
Данный эксперимент в качестве параметров принимает числа Par1 и Par2, которые будут присвоены соответственно ёмкости входных накопителей и времени обработки в авральном режиме.
procedure GetResult()
begin
temporary Sum, CurYield,Ind_i;
Ind_i=1;
Sum=0;
while (Ind_i<4)do
begin
CurYield=DoTheRun(Ind_i);
Sum=Sum+ CurYield;
Ind_i=Ind_i+1;
end;
Return (Sum/(Ind_i-1));
end;
В
приведённой процедуре
procedure DoTheRun(Run_Number)
begin
DoCommand("Clear off");
temporary CommandString;
CommandString=Catenate("
DoCommand(CommandString);
DoCommand("Start 1");
Return
(-(10#X$ALLENTERS#(Ncapacity-
end;
В данной процедуре происходит сброс генераторов случайных чисел, очистка сохраняемых величин и сброс статистики. Возвращаемое значение – суммарные затраты.
Для поиска оптимальных параметров используется следующий эксперимент:
experiment
SeekOpt()
begin
temporary ShowString, CommandString;
temporary Prev1, Cur1, Flag1, Tprev;
Ncapacity=4;
Prev1=100000;
Flag1=1;
while (Flag1 'NE' 0) do
begin
Ncapacity=Ncapacity+1;
Tavr=36;
while (Tavr 'GE' 2) do
begin
Tprev=Tavr;
Tavr=Tavr-1;
Cur1=GetResult();
if(Cur1<Prev1) then
begin
if (Prev1<0) then
begin
ShowString=PolyCatenate(" Optimum.Summ ", String(Prev1),".");
ShowString = PolyCatenate (ShowString, " Capacity ",String(Ncapacity),".");
ShowString = PolyCatenate (ShowString, " k time ",String(Tprev),".");
CommandString = PolyCatenate ("SHOW """,ShowString,"""","");
DoCommand(CommandString);
Flag1=0;
Tavr=0;
end;
else Prev1=Cur1;
end;
else Prev1=Cur1;
end;
end;
end;
Так как оптимизируются два параметра, потребуется два цикла, один из которых будет вложенным. При изучении статистики было установлено, что показатель k и время авральной обработки приоритетнее изменений ёмкости накопителей. Кроме того k ограничен отрезком [0;35], а ёмкость ограничена только минимумом 5, поэтому вложенный цикл будет изменять показатель Tavr =T3-k.
Переменная Flag1 используется для управления внешним циклом. Сначала ей присваивается значение 1, условие выхода из цикла: Flag1 = 0. В переменной Prev1 хранится значение затрат на предыдущем шаге. Вначале ей присваивается очень большое положительное значение, чтобы получаемые затраты на первом шаге заведомо были больше. На каждой итерации внешнего цикла ёмкость накопителей увеличивается на 1. Перед входом в цикл оно устанавливается равным 4, однако прогоны начнутся со значения 5.
Для управления внутренним циклом используется значение времени авральной обработки Tavr. На каждой новой итерации внешнего цикла значение Tavr устанавливается равным 36, но прогоны начинаются со значения 35, т.е. время авральной обработки равно штатному времени обслуживания (k=0). На каждой итерации внутреннего цикла время обработки в авральном режиме уменьшается на 1. Цикл продолжается до тех пор, пока Tavr >=2. Так как значение сначала уменьшается, а затем производится моделирование, финальным значением Tavr станет 1.
Переменная Curl получает значение затрат на текущем шаге. Если предыдущее значение затрат меньше текущего, то выдается результат вместе с оптимальными показателями и осуществляется выход из цикла. В противном случае цикл продолжается.
В результате проведения оптимизационного эксперимента получим:
" Optimum.Summ -181924. Capacity 5. k time 35."
Алгоритм поиска решения базируется на том, что экономические показатели реальных систем обычно представляют собой функции, имеющие единственный локальный экстремум, который и является глобальным. Для того, чтобы перепроверить полученный результат, проведём эксперимент, в котором на каждой итерации вложенного цикла Tavr будет увеличиваться на 1 от 1 до 35.
experiment
SeekOptInv()
begin
temporary ShowString, CommandString;
temporary Prev1, Cur1, Flag1, Tprev, Nprev;
Ncapacity=4;
Prev1=100000;
Flag1=1;
while (Flag1 'NE' 0) do
begin
Ncapacity=Ncapacity+1;
Tavr=0;
while (Tavr 'LE' 34) do
begin
Nprev=Ncapacity;
if (Tavr=0) then
begin
Tprev=35;
Nprev=Ncapacity-1;
end;
else Tprev=Tavr;
Tavr=Tavr+1;
Cur1=GetResult();
if(Cur1<Prev1) then
begin
if (Prev1<0) then
begin
ShowString=PolyCatenate(" Optimum.Summ ", String(Prev1),".");
ShowString=PolyCatenate(
ShowString=PolyCatenate(
CommandString =PolyCatenate("SHOW """,ShowString,"""","");
DoCommand(CommandString);
Flag1=0;
Tavr=35;
end;
else Prev1=Cur1;
end;
else Prev1=Cur1;
end;