forum.vnstele.com

Вітруальне навчальне середовище телекомунікацій - Форум підтримки
Сьогодні: 28 березня 2024, 21:25

Часовий пояс UTC + 2 годин [ DST ]




Створити нову тему Відповісти  [ 1 повідомлення ] 
Автор Повідомлення
ПовідомленняДодано: 19 червня 2014, 01:34 
Офлайн
Аватар користувача

З нами з: 19 січня 2012, 18:50
Повідомлення: 31
Звідки: Львів
Четверта лабораторна робота - доволі проста, але якщо раптом її комусь складно реалізувати, то ось вона тут її реалізація:

Код:
%#> Lab#4_Sheremeta variant #2

function Lab4_Sheremeta

%-> input data
l = 5; Tmin = 45; Tmax = 165; lambdaMin = 2; lambdaMax = 6; Vmin = 10; Vmax = 50; N = 100;

% N - amount of abonents (from Lab#3)
% lambdaMin and lambdaMax  - call admission intensity in hour of greatest load

%-> building factor space
lambda = lambdaMin:(lambdaMax - lambdaMin)/(l - 1):lambdaMax;
V = Vmin:(Vmax - Vmin)/(l - 1):Vmax;
T = Tmin:(Tmax - Tmin)/(l - 1):Tmax;

%-> full factorial experiment
results = zeros(5, 5, 5); % will contain call losses in percentages

for i = lambda
    for j = T
        for k  = V
            results(T == j, V == k, lambda == i) = firstErlang(i*j*N/3600, k)*100;     
        end 
    end
end

% charting results
figure(1); % when surf - x is columns, y is rows
view(-35, 35); % view(az, el)
hold on;
grid on;
title('Full factorial experiment');
xlabel('Amount of service units');
ylabel('Call duration, s');
zlabel('Call losses, %');

colors = ['r', 'b', 'g', 'y', 'm'];
theLegend = [];

for i = 1:length(lambda)
    surface(V, T, results(:, :, i), 'FaceColor', colors(i), 'FaceAlpha', .7);
    theLegend = [theLegend; ['\lambda = ', num2str(lambda(i)), ' call/h']];
end

legend(theLegend);

%-> latin square experiment

% building square
square = zeros(length(T), length(V));

for i = 1:length(T)
    square(i, :) = circshift(lambda, [0, -i + 1]);
end

% calculations and charting results
figure(2);
view(65, 35); % view(az, el)
hold on;
grid on;

losses = zeros(length(T), length(V));

for i = 1:size(square, 1)
    for j = 1:length(V)
        losses(i, j) = firstErlang(T(i)*square(i, j)*N/3600, V(j))*100;
        text(V(j), T(i), losses(i, j), [' \lambda = ', num2str(square(i, j))],...
            'Color', 'r', 'FontSize', 12, 'FontWeight', 'bold');
    end
end

title('Latin square experiment');
xlabel('Amount of service units');
ylabel('Call duration, s');
zlabel('Call losses, %');
xlim([min(V)*.8, max(V)*1.2]);
ylim([min(T)*.5, max(T)*1.2]);
surf(V, T, losses, 'FaceColor', 'g', 'FaceAlpha', .7, 'EdgeColor', 'b',...
    'Marker', 'o', 'MarkerFaceColor', 'b', 'MarkerSize', 5);

%-> random assignment experiment (25 experiments)

% building matrix with random indexes where rows represents number of experiment and columns represents
% call admission intensity, call duration and amount of service units respectively

randomIndexes = round(unifrnd(1, l, 25, 3));

% calculations and charting results
figure(3);
view(35, 15); % view(az, el)
hold on;
grid on;

for i = 1:25
    loss = firstErlang(lambda(randomIndexes(i, 1))*T(randomIndexes(i, 2))*N/3600, V(randomIndexes(i, 3)))*100;
    text(V(randomIndexes(i, 3)), T(randomIndexes(i, 2)), loss, [' \lambda = ', num2str(lambda(randomIndexes(i, 1)))],...
            'Color', 'r', 'FontSize', 12);
    plot3(V(randomIndexes(i, 3)), T(randomIndexes(i, 2)), loss, 'ko', 'MarkerFaceColor', 'k', 'MarkerSize', 5);
    hold on
end

title('Random assignment experiment (25 experiments)');
xlabel('Amount of service units');
ylabel('Call duration, s');
zlabel('Call losses, %');

%-> single factor change experiment
% calculations and charting results

losses = zeros(1, length(V));
for i = 1:length(V)
    losses(i) = firstErlang(lambda(1)*T(1)*N/3600, V(i))*100;
end

figure('Name','Single Factor Change Experiment', 'NumberTitle','off');

subplot(2, 2, 1);
plot(V, losses, 'LineWidth', 2, 'Color', 'r');
title(['losses = f(V), T = ', num2str(T(1)), ' s, \lambda  = ', num2str(lambda(1)), ' c/h']);
xlabel('Amount of service units');
ylabel('Call losses, %');
grid on;

losses = zeros(1, length(V));
for i = 1:length(T)
    losses(i) = firstErlang(lambda(1)*T(i)*N/3600, V(1))*100;
end

subplot(2, 2, 2);
plot(T, losses, 'LineWidth', 2, 'Color', 'r');
title(['losses = f(T), V = ', num2str(V(1)), ', \lambda = ', num2str(lambda(1)), ' c/h']);
xlabel('Call duration, s');
ylabel('Call losses, %');
grid on;

losses = zeros(1, length(V));
for i = 1:length(lambda)
    losses(i) = firstErlang(lambda(i)*T(1)*N/3600, V(1))*100;
end

subplot(2, 2, 3);
plot(lambda, losses, 'LineWidth', 2, 'Color', 'r');
title(['losses = f(\lambda), T = ', num2str(T(1)), ' s, V = ', num2str(V(1))]);
xlabel('Call admission intensity, call/h');
ylabel('Call losses, %');
grid on;

end

function loss = firstErlang(Y, V)

i = 0:V;
loss =(Y^V/factorial(V))/sum(Y.^i./factorial(i));

end


Фактично я трохи схалявив використавши першу формулу Ерланга, але сама суть планування модельних експерементів тут має бути висвітленна коректно. А якщо для когось це дуже критично, то ви завжди зможете замінити першу формулу Ерланга на істинне моделювання.
Для незнаючих - істинне моделювання дивіться в третій лабораторній роботі, моя її реалізація є тут.

P.S. Ну от і все, як я казав п'ята робота на вашій совісті.
P.S.S. Всім бажаю успіхів, не втрачати натхнення, та завжди бути спарглим до знань.

_________________
Зображення


Догори
 Профіль  
 
Відображати повідомлення за:  Сортувати за  
Створити нову тему Відповісти  [ 1 повідомлення ] 

Часовий пояс UTC + 2 годин [ DST ]


Хто зараз онлайн

Зараз переглядають цей форум: Немає зареєстрованих користувачів і 2 гостей


Ви не можете створювати нові теми у цьому форумі
Ви не можете відповідати на теми у цьому форумі
Ви не можете редагувати ваші повідомлення у цьому форумі
Ви не можете видаляти ваші повідомлення у цьому форумі
Ви не можете додавати файли у цьому форумі

Знайти:
Вперед:  
cron
POWERED_BY
Український переклад © 2005-2010 Українська підтримка phpBB