Untitled
unknown
matlab
2 years ago
2.3 kB
4
Indexable
clc;
clear all;
close all;
P = [0,0,0,0,0,0,0,0,0,0,0];
arrivals = [0,0,0,0,0,0,0,0,0,0,0];
total_arrivals = 0;
current_state = 0;
previous_mean_clients = 0;
index = 0;
lamda = 3;
mu = 5;
threshold = lamda/(lamda + mu);
transitions = 0;
while transitions >= 0
transitions = transitions + 1;
if mod(transitions,1000) == 0
index = index + 1;
for i=1:1:length(arrivals)
P(i) = arrivals(i)/total_arrivals;
endfor
mean_clients = 0;
for i=1:1:length(arrivals)
mean_clients = mean_clients + (i-1).*P(i);
endfor
to_plot(index) = mean_clients;
if abs(mean_clients - previous_mean_clients) < 0.00001 || transitions > 1000000
break;
endif
previous_mean_clients = mean_clients;
endif
random_number = rand(1);
if current_state == 0 || random_number < threshold
if current_state <= 10
total_arrivals = total_arrivals + 1;
if transitions <= 30
disp(["Current state = " num2str(current_state)]);
display("Next transition");
display("arrival");
disp(["Total arrivals in current state = " num2str(arrivals(current_state+1))]);
endif
arrivals(current_state + 1) = arrivals(current_state + 1) + 1;
if current_state < 10
current_state = current_state + 1;
endif
endif
else
if current_state != 0
if transitions <= 30
disp(["Current state = " num2str(current_state)]);
display("Next transition");
display("departure");
disp(["Total arrivals in current state = " num2str(arrivals(current_state+1))]);
endif
current_state = current_state - 1;
endif
endif
endwhile
display("State propabilities:");
for i=1:1:length(arrivals)
display(P(i));
endfor
g = lamda*(1-P(11));
average_delay_time = mean_clients / g;
display("Average delay time =");
disp(average_delay_time);
display("Blocking propability =");
disp(P(11));
figure(1);
plot(to_plot,"g","linewidth",1.3);
title("Average number of clients in the M/M/1 queue: Convergence");
xlabel("transitions in thousands");
ylabel("Average number of clients");
x=[0,1,2,3,4,5,6,7,8,9,10];
figure(2);
bar(x,P,0.4);
title("Probabilities")Editor is loading...