Untitled

 avatar
unknown
matlab
2 years ago
2.3 kB
2
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...