%
% M/M/s
% Les clients arrivent avec un temps expo l
% Les s serveurs servent avec des temps expo m
% N(t) = nombre de clients dans la file au temps t 
%        y compris ceux qui sont en train d'etre servis
%

% Tester avec T=+Inf.

clear; clf;

s=2;    % nombre de serveurs
l=.5;    % intensité d'arrivée des clients
m=.26;    % intensité du traitement d'un serveur

t=20;    % on cherche la longueur de la file à cet instant
r=1000;  % nombre de réalisations i.i.d.

for i=1:r,
    n=0;  % la file est vide au depart
    T=-log(rand)/l; % on attend le premier client
    while (T<t) % on boucle tant que le temps est < t
        % il s'est passe quelque chose
        if n==0 % la file etait vide
         n=1; % un client de plus 
        else  % la file n'etait pas vide
         % un client de plus avec proba l/(l+m*min(n,s))
         % un client de moins avec proba m*min(n,s)/(l+m*min(n,s))
         n=n+2*(rand<l/(l+m*min(n,s)))-1; 
        end
        % on attend le prochain changement
        T=T-log(rand)/(l+m*min(n,s)); 
    end
    N(i)=n;
end
histo(N)
[mean(N),std(N)]
