M/M/1/4 vs M/M/2/4 queue

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

M/M/1/4 vs M/M/2/4 queue

mari_tsa
Here is the code I wrote which is explained in comments.
% system M/M/1/4
% when there are 3 clients in the system, the capability of the server
doubles.

clc;
clear all;
close all;

lambda = 4;
mu = 5;
states = [0,1,2,3,4]; % system with capacity 4 states
% the initial state of the system. The system is initially empty.
initial_state = [1,0,0,0,0];

% define the birth and death rates between the states of the system.
births_B = [lambda,lambda,lambda,lambda];
deaths_D = [mu,mu,2*mu,2*mu];

% get the transition matrix of the birth-death process
transition_matrix = ctmcbd(births_B,deaths_D);
% get the ergodic probabilities of the system
P = ctmc(transition_matrix);

% plot the ergodic probabilities (bar for bar chart)
figure(1);
bar(states,P,"r",0.5);

% transient probability of state 0 until convergence to ergodic probability.
Convergence takes place P0 and P differ by 0.01
index = 0;
for T=0:0.01:50
  index = index + 1;
  P0 = ctmc(transition_matrix,T,initial_state);
  Prob0(index) = P0(1);
  if P0-P < 0.01
    break;
  endif
endfor

T = 0:0.01:T;
figure(2);
plot(T,Prob0,"r","linewidth",1.3);

If I had 2 servers thus a M/M/2/4 queue, what would have changed? How 2
servers would have affected the code ?
 In my opinion, it would make any difference, but is that true?



--
Sent from: http://octave.1599824.n4.nabble.com/Octave-General-f1599825.html


Reply | Threaded
Open this post in threaded view
|

Re: M/M/1/4 vs M/M/2/4 queue

Moreno Marzolla-2
On 13/05/2018 19:59, mari_tsa wrote:

> Here is the code I wrote which is explained in comments.
> % system M/M/1/4
> % when there are 3 clients in the system, the capability of the server
> doubles.
>
> clc;
> clear all;
> close all;
>
> lambda = 4;
> mu = 5;
> states = [0,1,2,3,4]; % system with capacity 4 states
> % the initial state of the system. The system is initially empty.
> initial_state = [1,0,0,0,0];
>
> % define the birth and death rates between the states of the system.
> births_B = [lambda,lambda,lambda,lambda];
> deaths_D = [mu,mu,2*mu,2*mu];
>
> % get the transition matrix of the birth-death process
> transition_matrix = ctmcbd(births_B,deaths_D);
> % get the ergodic probabilities of the system
> P = ctmc(transition_matrix);
>
> % plot the ergodic probabilities (bar for bar chart)
> figure(1);
> bar(states,P,"r",0.5);
>
> % transient probability of state 0 until convergence to ergodic probability.
> Convergence takes place P0 and P differ by 0.01
> index = 0;
> for T=0:0.01:50
>    index = index + 1;
>    P0 = ctmc(transition_matrix,T,initial_state);
>    Prob0(index) = P0(1);
>    if P0-P < 0.01
>      break;
>    endif
> endfor
>
> T = 0:0.01:T;
> figure(2);
> plot(T,Prob0,"r","linewidth",1.3);
>
> If I had 2 servers thus a M/M/2/4 queue, what would have changed? How 2
> servers would have affected the code ?
>   In my opinion, it would make any difference, but is that true?

Hello,

for a M/M/2/4 system the death rates would be:

deaths_D = [mu, 2*mu, 2*mu, 2*mu];

(assuming that the service rates of the servers never change).
Have a look at the qsmmmk() function in the queueing package, that
handles precisely this kind of queues.

See also https://en.wikipedia.org/wiki/M/M/c_queue#Finite_capacity (and
the references therein).

Moreno.

--
Moreno Marzolla
EMail: [hidden email]
WWW  : https://www.moreno.marzolla.name/



Reply | Threaded
Open this post in threaded view
|

Απ: M/M/1/4 vs M/M/2/4 queue

mari_tsa
thank you very much for your time and your help

Από: Moreno Marzolla <[hidden email]>
Στάλθηκε: Τρίτη, 15 Μαΐου 2018 11:21 πμ
Προς: mari_tsa; [hidden email]
Θέμα: Re: M/M/1/4 vs M/M/2/4 queue
 
On 13/05/2018 19:59, mari_tsa wrote:
> Here is the code I wrote which is explained in comments.
> % system M/M/1/4
> % when there are 3 clients in the system, the capability of the server
> doubles.
>
> clc;
> clear all;
> close all;
>
> lambda = 4;
> mu = 5;
> states = [0,1,2,3,4]; % system with capacity 4 states
> % the initial state of the system. The system is initially empty.
> initial_state = [1,0,0,0,0];
>
> % define the birth and death rates between the states of the system.
> births_B = [lambda,lambda,lambda,lambda];
> deaths_D = [mu,mu,2*mu,2*mu];
>
> % get the transition matrix of the birth-death process
> transition_matrix = ctmcbd(births_B,deaths_D);
> % get the ergodic probabilities of the system
> P = ctmc(transition_matrix);
>
> % plot the ergodic probabilities (bar for bar chart)
> figure(1);
> bar(states,P,"r",0.5);
>
> % transient probability of state 0 until convergence to ergodic probability.
> Convergence takes place P0 and P differ by 0.01
> index = 0;
> for T=0:0.01:50
>    index = index + 1;
>    P0 = ctmc(transition_matrix,T,initial_state);
>    Prob0(index) = P0(1);
>    if P0-P < 0.01
>      break;
>    endif
> endfor
>
> T = 0:0.01:T;
> figure(2);
> plot(T,Prob0,"r","linewidth",1.3);
>
> If I had 2 servers thus a M/M/2/4 queue, what would have changed? How 2
> servers would have affected the code ?
>   In my opinion, it would make any difference, but is that true?

Hello,

for a M/M/2/4 system the death rates would be:

deaths_D = [mu, 2*mu, 2*mu, 2*mu];

(assuming that the service rates of the servers never change).
Have a look at the qsmmmk() function in the queueing package, that
handles precisely this kind of queues.

See also https://en.wikipedia.org/wiki/M/M/c_queue#Finite_capacity (and
the references therein).

Moreno.

--
Moreno Marzolla
EMail: [hidden email]
WWW  : https://www.moreno.marzolla.name/