Моделирование вычислительной сети

Автор: Пользователь скрыл имя, 26 Июля 2011 в 11:31, курсовая работа

Краткое описание

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

Оглавление

Введение 4
1 Описание моделируемой системы и задание на моделирование 6
2 Структурная схема модели системы 8
3 Результат работы модели 16
4 Эксперимент пользователя 17
5 Расчет статистических показателей 26
Заключение 30
Список использованной литературы 31
Приложение А 32
Приложение Б 38

Файлы: 1 файл

Моя записка.doc

— 360.50 Кб (Скачать)

     Сообщение обрабатывается в мини-ЭВМ и уходит из системы.

     

     Рисунок 5 – Сегмент авральной обработки 

     

     Рисунок 6 – Сегмент учёта потерянных сообщений 

     Учёт  потерянных сообщений ведётся с  помощью сохраняемой величины LOOSE.

     В программе нам будет удобнее  использовать не величину k, а результирующее время обработки сообщений в авральном режиме  Tavr = T3-k, т.к. в этом случае вычисление будет производиться только один раз – при подсчёте убытков, а не на каждом прогоне для вычисления Tavr.

     Получаем  два оптимизируемых показателя: ёмкость  входного накопителя NCapacity и время обработки в авральном режиме Tavr, причём NCapacity может изменяться от 5 до бесконечности, а Tavr – от T3 до 1.

     Необходимо  подобрать эти показатели таким  образом, чтобы минимизировать убытки, вычисляемые:

     SUMM VARIABLE -(10#X$ALLENTERS#(Ncapacity-5)+(35-Tavr)#5#X$AVRCOUNT+100#X$LOOSE+2#X$AVRTIME#3)

     В программе приведённая величина инвертируется для удобства использования  в эксперименте. Таким образом  речь идёт уже о максимизации получаемого  значения.

 

      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,"  Capacity  ",String(Ncapacity),".");

       ShowString=PolyCatenate(ShowString,"  k time  ",String(Tavr),".");

       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;

     В приведённой процедуре выполняются 3 прогона модели, а в переменную Sum записывается среднее арифметическое суммарных затрат прогонов.

     procedure DoTheRun(Run_Number)

     begin

      DoCommand("Clear off");

      temporary CommandString;

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

     DoCommand(CommandString);

     DoCommand("Start 1");

     Return (-(10#X$ALLENTERS#(Ncapacity-5)+ (35 - Tavr)#5#X$AVRCOUNT+100#X$LOOSE+2#X$AVRTIME#3));

     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,"  Capacity  ",String(Nprev),".");

                        ShowString=PolyCatenate(ShowString,"  k time  ",String(Tprev),".");

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

                        DoCommand(CommandString);

                        Flag1=0;

                        Tavr=35;

                      end;

                    else Prev1=Cur1;

              end;

                else Prev1=Cur1;   

              end; 

Информация о работе Моделирование вычислительной сети