Исследование свойств самоподобия трафика в системах с коммутацией пакетов

Страницы работы

Содержание работы

Лабораторная работа № 3 по курсу «Сети распределения информации»

ИССЛЕДОВАНИЕ СВОЙСТВ САМОПОДОБИЯ ТРАФИКА В СИСТЕМАХ С КОММУТАЦИЕЙ ПАКЕТОВ

3.1 Цель работы

Ознакомление с основными фрактальными структурами. Изучение моделей самоподобного трафика. Исследование свойств самоподобия трафика, возникающего в системах с коммутацией пакетов. Изучение методов оценивания параметра Херста.

3.2 Порядок выполнения работы

1. Ознакомится с основными положениями теории фракталов и самоподобных процессов, используя материал приложения 3 и литературу [].

2. Используя листинг 3.1, провести моделирование в системе Mathematica самоподобного процесса в виде модели броуновского движения.

Листинг 3.1 – Математическая модель процесса броуновского движения

BM[n_, seed_]:=(

SeedRandom[seed];

a=0;

b=0;

rt={{a,b}};

For[i=1,i<=n,

=RandomReal[{}];

d=RandomReal[{0.75, 1.25}];

a=a + d*Cos[];

b=b + d*Sin[]];

rt=Append[rt, {a, b}];

i++];

ListPlot[rt, Joined->True]

)

Запуск составленной модели броуновского движения выполняется командой BM[n,seed]. В качестве параметра n следует использовать 500, а значение параметра seed принять равным номеру бригады по лабораторному журналу преподавателя. Результаты моделирования системы занести в отчет. При этом необходимо обратить внимание, что в системах Mathematica до 6-й версии вместо команды RandomReal[{}] следует использовать Random[Real,{}], а также вместо параметра Joined->True команды ListPlot необходимо записать PlotJoined->True.

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

Выполним анализ программного кода. Вначале выполняется инициализация генератора случайных чисел (команда SeedRandom[seed_]). Координаты частицы в начальный момент имеют нулевое значение о чем свидетельствуют команды a=0, b=0. В переменную rt заносятся координаты точек, которые проходит частица. Вначале этот список состоит всего из одного элемента (команда rt={{a,b}}). Основную часть тела процедуры составляет оператор цикла For[]. Переменная цикла пробегает натуральный ряд с верхней границей определяемой аргументом процедуры. Угол, определяющий направление перехода частицы, задается командой =RandomReal[{}] как действительная случайная величина лежащая в интервале . Длина перехода определяется командой d= RandomReal[{0.75, 1.25}] как случайная величина в диапазоне значений [0.75, 1.25]. следующая точка, в которую перемещается частица, задается командами a=a + d*Cos[] и b=b + d*Sin[]. Новая точка добавляется в список командой rt=Append[rt, {a, b}]. Если изменить команду инициализации генератора случайных чисел кривая измениться, причем достаточно существенно.

3. Используя листинг 3.2 выполнить моделирование в системе Mathematica фрактальной системы в виде триадной кривой Коха

Листинг 3.2 – Триадная кривая Коха

FS[L_, n_] := Module[{L1, x1, x2, y1, y2, dist, , P1, P2, P3, i, j},

   L1 = L;

   For[j = 1, j <= n,

    m = Length[L1];

    For[i = 1, i < 4*(m - 1),

     x1 = N[L1[[i, 1]]];

     x2 = N[L1[[i + 1, 1]]];

     y1 = N[L1[[i, 2]]];

     y2 = N[L1[[i + 1, 2]]];

     dist = Sqrt[(x1 - x2)^2 + (y1 - y2)^2];

      = ArcCos[(x2 - x1)/dist];

     If[y2 < y1,  = 2* - ];

      =  + /6;

     P1 = {(2*x1 + x2)/3, (2*y1 + y2)/3};

     P2 = {x1 + dist*Cos[]/Sqrt[3],

       y1 + dist*Sin[]/Sqrt[3]};

     P3 = {(x1 + 2*x2)/3, (y1 + 2*y2)/3};

     L1 = Insert[L1, P3, i + 1];

     L1 = Insert[L1, P2, i + 1];

     L1 = Insert[L1, P1, i + 1];

     i = i + 4];

    j++];

   Return[L1]

];

Код процедуры главным образом ориентирован на то, чтобы явно очертить математическую основу алгоритма построения списка вершин фрактальной кривой. Использован следующий подход. Начальный отрезок (или кривая) передается аргументом процедуре в виде списка. Элементами списка являются пары значений координат точек-вершин начальной кривой. За один цикл перебираются все элементы списка. Между каждой парой точек добавляется по три новых точки – результат деления соответствующего отрезка на три части, удаления центральной и добавления двух дополнительных отрезков. Во вновь полученном списке снова проделывается эта процедура, и так далее – в соответствие с тем, какое значение указано вторым аргументом процедуры.

Первой командой L1 = L процедуры создается копия исходной кривой, переданной аргументом функции. Именно с этой копией будут выполняться все последующие манипуляции. Далее следует оператор цикла, в котором командой m=Length[L1] определяется длина списка L1. В еще одном внутреннем цикле индексная переменная, с помощью которой перебираются элементы-точки списка L1, пробегает значения от 1 до . Здесь принято во внимание, что число элементов списка L1 в процессе выполнения оператора цикла будет меняться: при переборе точек каждый раз добавляются три новые, при этом значение переменной  меняется только в пределах внешнего оператора цикла. Кроме того, следует учесть, что после последней точки новые точки не добавляются, поэтому верхний предел для индексной переменной  равен именно 4(m-1), а не 4m, как можно было бы предположить.

Далее командами

x1 = N[L1[[i, 1]]];

x1 = N[L1[[i+1, 1]]];

y1 = N[L1[[i, 2]]];

y2 = N[L1[[i+1, 2]]];

вводятся локальные переменные для координат точки с индексом, соответственно  и  в списке. Для ускорения процесса вычисления для случая, когда координаты базовых точек заданы в символьном виде, используем функцию N[] вычисления результата в формате числа с плавающей точкой. Расстояние между точками заносится в переменную dist=Sqrt[(x1-x2)^2+(y1+y2)^2]. Для вычисления координат новых точек понадобится также вычислить угол между горизонтальной координатной осью и прямой проходящей через первую и вторую новые точки из трех добавляемых (направление на центральную, вновь добавляемую точку). Поясним назначение команд процедуры. Так, командой =ArcCos[(x2-x1)/dist] дается начальная оценка угла между базовым отрезком и направлением на новую центральную точку отрезка (искомый угол больше этого угла на величину ). Проблема, однако, в том, что это оценочное выражение не всегда является верным: оно справедливо только если синус угла неотрицателен. В противном случае следует угол  переопределить. Для этого использован условный оператор If[y2<y1, =2*]. После выполнения команды  угол  дает направление на центральную точку трансформируемого отрезка.

Координаты новых точек определяются командами

P1={(2*x1+x2)/3, (2*y1+y2)/3};

P2={x1+dist*Cos[]/Sqrt[3], y1+dist*Sin[]/Sqrt[3]};

P3={(x1+2*x2)/3, (y1+2*y2)/3};

Эти точки следует добавить в список L1, что и делается следующими тремя командами. Для добавления элемента в список (точнее, не в сам список, а в его копию) использована функция Insert[], первым аргументом которой указывается список, в который вставляется элемент, второй аргумент – элемент, который вставляется, а третьим аргументом указывается позиция, на которую новый элемент помещается в список. При этом прочие элементы списка сдвигаются вправо. Поэтому при вставке очередного элемента в список индексация его элементов справа от вставленного элемента меняется (индексы элементов увеличиваются на единицу). Данное обстоятельство учтено при добавлении новых элементов в список L1. Наконец, после добавления трех новых элементов следующая «старая» точка отстоит от текущей (той у которой индекс ) на четыре позиции, поэтому в блоке инкремента оператора цикла указана команда i=i+4. в качестве результата возвращается список L1 (команда Return[L1]).

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

L={{0,0},{1,0}};

FP=FS[L,n];

ListPlot[FP,Joined®True,AspectRatio®Automatic,Axes®False]

моделирование выполнить для случаев, когда n=1, 2, N, где N – номер бригады по лабораторному журналу преподавателя.

4. Повторить п.3 для случая, когда базовой фигурой является правильный шестиугольник для этого использовать программный код

L={{-1,0},{-1/2,Sqrt[3]/2},{1/2,Sqrt[3]/2},{1,0},{1/2,-Sqrt[3]/2},{-1/2,-Sqrt[3]/2},

{-1,0}};

FP=FS[L,n];

ListPlot[FP,Joined®True,AspectRatio®Automatic,Axes®False]

моделирование выполнить для случая, когда n=N, где N – номер бригады по лабораторному журналу преподавателя.

5. Повторить п.3 для случая, когда базовой фигурой является равносторонний треугольник для этого использовать такой программный код

L={{0,0},{1/2,Sqrt[3]/2},{1,0},{0,0}};

FP=FS[L,n];

ListPlot[FP,Joined®True,AspectRatio®Automatic,Axes®False]

моделирование выполнить для случая, когда n=N, где N – номер бригады по лабораторному журналу преподавателя.

6. Используя программный код из файлов Hurst_beta_v1_br.nb и Hurst_R_S.nb оценить параметр Херста для фрагмента сетевого трафика, содержащегося в файле brN.tr включающего 2000 отсчетов. Здесь N – номер бригады по лабораторному журналу преподавателя.


Похожие материалы

Информация о работе