Revision: 67759
Updated Code
at December 2, 2014 23:26 by eiger_824
Updated Code
%Student: Santiago Pagola
%LiU-ID & Personal Number: 930302-T092, sanpa993
%clear all variables from workspace, close all figures and clear everything
%in command line
clear all
close all
clc
%IMPORTANT NOTE: AN EXTERNAL FUNCTION WAS CREATED IN ORDER TO WRAP THE SUMS
%OF THE VECTORS: a = sumk(vector,k). It will be described in the report,
%but basically sums the first k elements of an array called 'vector'.
m = 100; %100 nodes on no-buffering assumption
t = 1000; %Time: 1000 slots of time
backlog_array = zeros(size(1:t)); %Array of the values of the system backlog
backlog_estimate = zeros(size(1:t)); %Array of the estimated values of the system backlog
slots = 1:t; %Slots array
n = 0; %Initially, all nodes are unbacklogged
%lambda = 1/exp(1); %Overal arrival rate will be set to 1/exp(1) (max. stable throughput)
n_estimated = 0; %Estimated backlog initialization. This will be updated during runtime
q_r = 0; %Value of q_r is now stabilized by this algorithm
packets_leaving = 1:t; %Array which will count #packets leaving the system
packets_arriving = 1:t; %Array which will count #packets entering the system
state_probs = zeros(size(1,m)); %State probabilitites array
W = zeros(size(1,7));%Array definition for the P.B. delay
D = zeros(size(1,7));%Array definition for LIttle Theorem delay
v = 1; %Auxiliary variable
%main loop
for lambda2 = 0.05:0.05:0.35
qa = 1-exp(-lambda2/m); %qa is the probability that each unbacklogged node has to transmit in the next slot
for i = 1:t
a = rand(1); %realization of Pr_x
b = rand(1);
c = rand(1);
%Estimation of q_r starting from the estimated backlog
if n_estimated >= 0 && n_estimated < 1
q_r = 1;
else
q_r = 1/n_estimated;
end
%Now we are going to create an array with the Poisson pmf's taking into
%account the number of transmitting nodes
Pr = zeros(size(1:11));
for j = 0:10
Pr(j+1) = ((lambda2)^j/factorial(j))*exp(-lambda2);
end
if 0 <= a && a <= Pr(1)
n;
elseif sumk(Pr,1) < a && a <= sumk(Pr,2)
n = n+1;
elseif sumk(Pr,2) < a && a <= sumk(Pr,3)
n = n+2;
elseif sumk(Pr,3) < a && a <= sumk(Pr,4)
n = n+3;
elseif sumk(Pr,4) < a && a <= sumk(Pr,5)
n = n+4;
elseif sumk(Pr,5) < a && a <= sumk(Pr,6)
n = n+5;
elseif sumk(Pr,6) < a && a <= sumk(Pr,7)
n = n+6;
elseif sumk(Pr,7) < a && a <= sumk(Pr,8)
n = n+7;
elseif sumk(Pr,8) < a && a <= sumk(Pr,9)
n = n+8;
elseif sumk(Pr,9) < a && a <= sumk(Pr,10)
n = n+9;
elseif sumk(Pr,10) < a && a <= 1
n = n+10;
end
%Now we are going to create an array with the Qr's (%Probabilities that up to 10 backlogged nodes
%retransmit (up to 10 new arrivals))
Qr = zeros(size(1:11));
for j = 0:10
Qr(j+1) = binopdf(j,n,q_r);
end
if 0 <= n && n < m %Check if the backlog is less than m = 100
if 0 <= b && b <= sumk(Qr,1) %CASE 1: IDLE SLOT, NO NEW ARRIVALS, FEEDBACK 0
n_estimated=max(lambda2, n_estimated + lambda2 - 1);
packets_arriving(i) = 0;
packets_leaving(i) = 0;
elseif sumk(Qr,1) < b && b <= sumk(Qr,2) %CASE 2: NO RETRASMISSION + 1 UNBACKLOGGED NODE TRANSMISION -> SUCCESS! , FEEDBACK 1
n = n-1;
n_estimated = max(lambda2, n_estimated + lambda2 - 1);
packets_arriving(i) = 1;
packets_leaving(i) = 1;
elseif sumk(Qr,2) < b && c <= 1 % CASE 3: COLLISION: RETRANSMISSION OF MORE THAN ...
if sumk(Qr,2) < b && b <= sumk(Qr,3) %... 2 PACKETS
x = 2;
elseif sumk(Qr,3) < b && b <= sumk(Qr,4) %...3 PACKETS
x = 3;
elseif sumk(Qr,4) < b && b <= sumk(Qr,5) %...AND SO ON
x = 4;
elseif sumk(Qr,5) < b && b <= sumk(Qr,6)
x = 5;
elseif sumk(Qr,6) < b && b <= sumk(Qr,7)
x = 6;
elseif sumk(Qr,7) < b && b <= sumk(Qr,8)
x = 7;
elseif sumk(Qr,8) < b && b <= sumk(Qr,9)
x = 8;
elseif sumk(Qr,9) < b && b <= sumk(Qr,10)
x = 9;
elseif sumk(Qr,10) < b && b <= 1
x = 10;
end
%estimation of n for FEEDBACK e
n_estimated = n_estimated + lambda2 + (exp(1)-2)^-1;
packets_arriving(i) = x;
packets_leaving(i) = 0;
end
end
backlog_array(i) = n;
backlog_estimate(i) = n_estimated; %Vector that saves the estimated backlog after each slot
end
N = mean(backlog_array);
nelements = hist(backlog_array,m); %In each bin, it counts how many times element i was seen ("numerical plot of the hist function")
D(v) = N/lambda2;
W(v) = ((exp(1)-0.5)/(1-lambda2*exp(1)))-(((exp(1)-1)*((exp(1)^lambda2)-1))/(lambda2*(1-((exp(1)-1)*((exp(1)^lambda2)-1)))));
v = v + 1;
end
figure(1) %Setting up the plotting environment for the backlog of the system
xlabel('Slot number, n')
ylabel('Backlogged packets')
plot(slots, backlog_array)
hold on
plot(slots,backlog_estimate,'g')
title('Real backlog (blue) vs. Pseudo Bayesian Estimated backlog (green)')
figure(2) %Setting up the plotting environment for the packets of the system
plot(slots,packets_arriving)
hold on
plot(slots,packets_leaving,'k')
grid on
xlabel('Slot number')
ylabel('Number of packets')
title('Number of packets entering (blue) or leaving (black) the system vs. Slot number')
%Question 8
max = max(backlog_array);
lambda2array = [0.05 0.1 0.15 0.2 0.25 0.3 0.35];
figure(3)
plot(lambda2array,D)
xlabel('Variation of lambda')
ylabel('Average delay')
title('Average delay according to Little Theorem and P-B Stabilization')
hold on
plot(lambda2array,W,'r')
legend('Little Theorem','P-B Stabilization')
Revision: 67758
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at October 27, 2014 22:15 by eiger_824
Initial Code
%Student: Santiago Pagola
%LiU-ID & Personal Number: 930302-T092, sanpa993
%clear all variables from workspace, close all figures and clear everything
%in command line
clear all
close all
clc
%IMPORTANT NOTE: AN EXTERNAL FUNCTION WAS CREATED IN ORDER TO WRAP THE SUMS
%OF THE VECTORS: a = sumk(vector,k). It will be described in the report,
%but basically sums the first k elements of an array called 'vector'.
m = 100; %100 nodes on no-buffering assumption
t = 1000; %Time: 1000 slots of time
backlog_array = zeros(size(1:t)); %Array of the values of the system backlog
backlog_estimate = zeros(size(1:t)); %Array of the estimated values of the system backlog
slots = 1:t; %Slots array
n = 0; %Initially, all nodes are unbacklogged
lambda = 1/exp(1); %Overal arrival rate will be set to 1/exp(1) (max. stable throughput)
n_estimated = 0; %Estimated backlog initialization. This will be updated during runtime
qa = 1-exp(-lambda/m); %qa is the probability that each unbacklogged node has to transmit in the next slot
q_r = 0; %Value of q_r is now stabilized by this algorithm
packets_leaving = 1:t; %Array which will count #packets leaving the system
packets_arriving = 1:t; %Array which will count #packets entering the system
state_probs = zeros(size(1,m)); %State probabilitites array
%main loop
for i = 1:t
a = rand(1); %realization of Pr_x
b = rand(1);
c = rand(1);
%Estimation of q_r starting from the estimated backlog
if n_estimated >= 0 && n_estimated < 1
q_r = 1;
else
q_r = 1/n_estimated;
end
%Now we are going to create an array with the Poisson pmf's taking into
%account the number of transmitting nodes
Pr = zeros(size(1:11));
for j = 0:10
Pr(j+1) = ((lambda)^j/factorial(j))*exp(-lambda);
end
if 0 <= a && a <= Pr(1)
n;
elseif sumk(Pr,1) < a && a <= sumk(Pr,2)
n = n+1;
elseif sumk(Pr,2) < a && a <= sumk(Pr,3)
n = n+2;
elseif sumk(Pr,3) < a && a <= sumk(Pr,4)
n = n+3;
elseif sumk(Pr,4) < a && a <= sumk(Pr,5)
n = n+4;
elseif sumk(Pr,5) < a && a <= sumk(Pr,6)
n = n+5;
elseif sumk(Pr,6) < a && a <= sumk(Pr,7)
n = n+6;
elseif sumk(Pr,7) < a && a <= sumk(Pr,8)
n = n+7;
elseif sumk(Pr,8) < a && a <= sumk(Pr,9)
n = n+8;
elseif sumk(Pr,9) < a && a <= sumk(Pr,10)
n = n+9;
elseif sumk(Pr,10) < a && a <= 1
n = n+10;
end
%Now we are going to create an array with the Qr's (%Probabilities that up to 10 backlogged nodes
%retransmit (up to 10 new arrivals))
Qr = zeros(size(1:11));
for j = 0:10
Qr(j+1) = binopdf(j,n,q_r);
end
if 0 <= n && n < m %Check if the backlog is less than m = 100
if 0 <= b && b <= sumk(Qr,1) %CASE 1: IDLE SLOT, NO NEW ARRIVALS, FEEDBACK 0
n_estimated=max(lambda, n_estimated + lambda - 1);
packets_arriving(i) = 0;
packets_leaving(i) = 0;
elseif sumk(Qr,1) < b && b <= sumk(Qr,2) %CASE 2: NO RETRASMISSION + 1 UNBACKLOGGED NODE TRANSMISION -> SUCCESS! , FEEDBACK 1
n = n-1;
n_estimated = max(lambda, n_estimated + lambda - 1);
packets_arriving(i) = 1;
packets_leaving(i) = 1;
elseif sumk(Qr,2) < b && c <= 1 % CASE 3: COLLISION: RETRANSMISSION OF MORE THAN ...
if sumk(Qr,2) < b && b <= sumk(Qr,3) %... 2 PACKETS
x = 2;
elseif sumk(Qr,3) < b && b <= sumk(Qr,4) %...3 PACKETS
x = 3;
elseif sumk(Qr,4) < b && b <= sumk(Qr,5) %...AND SO ON
x = 4;
elseif sumk(Qr,5) < b && b <= sumk(Qr,6)
x = 5;
elseif sumk(Qr,6) < b && b <= sumk(Qr,7)
x = 6;
elseif sumk(Qr,7) < b && b <= sumk(Qr,8)
x = 7;
elseif sumk(Qr,8) < b && b <= sumk(Qr,9)
x = 8;
elseif sumk(Qr,9) < b && b <= sumk(Qr,10)
x = 9;
elseif sumk(Qr,10) < b && b <= 1
x = 10;
end
%estimation of n for FEEDBACK e
n_estimated = n_estimated + lambda + (exp(1)-2)^-1;
packets_arriving(i) = x;
packets_leaving(i) = 0;
end
end
backlog_array(i) = n;
backlog_estimate(i) = n_estimated; %Vector that saves the estimated backlog after each slot
end
figure(1) %Setting up the plotting environment for the backlog of the system
xlabel('Slot number, n')
ylabel('Backlogged packets')
plot(slots, backlog_array)
hold on
plot(slots,backlog_estimate,'g')
title('Real backlog (blue) vs. Pseudo Bayesian Estimated backlog (green)')
figure(2) %Setting up the plotting environment for the packets of the system
plot(slots,packets_arriving)
hold on
plot(slots,packets_leaving,'k')
grid on
xlabel('Slot number')
ylabel('Number of packets')
title('Number of packets entering (blue) or leaving (black) the system vs. Slot number')
%Question 8
max = max(backlog_array);
nelements = hist(backlog_array,100); %In each bin, it counts how many times element i was seen ("numerical plot of the hist function")
for i = 1:m
state_probs(i) = nelements(i)/1000;
end
%8.1 According to Little's Theorem (D):
N = 0;
for i = 1:m
N = N + i*state_probs(i);
end
%8.2 According to PseudoBayesian approximate delay analysis (W)
lambda2array = [0.05 0.1 0.15 0.2 0.25 0.3 0.35];
W = zeros(size(1,7));
D = zeros(size(1,7));
i = 1;
for lambda2 = 0.05:0.05:0.35
D(i) = N/lambda2;
W(i) = ((exp(1)-0.5)/(1-lambda2*exp(1)))-(((exp(1)-1)*((exp(1)^lambda2)-1))/(lambda2*(1-((exp(1)-1)*((exp(1)^lambda2)-1)))));
i = i + 1;
end
figure(3)
plot(lambda2array,D)
xlabel('Variation of lambda')
ylabel('Average delay')
title('Average delay according to Little Theorem and P-B Stabilization')
hold on
plot(lambda2array,W,'r')
legend('Little Theorem','P-B Stabilization')
Initial URL
Initial Description
PSEUDO BAYESIAN STABILIZATION ALGORITHM IN MATLAB, ESTIMATION OF BACKLOGGED NODES
Initial Title
PSEUDO BAYESIAN STABILIZATION ALGORITHM IN MATLAB
Initial Tags
Initial Language
MatLab