% File d'attente M/M/1
% Les clients arrivent avec un temps expo de paramètre l
% Le serveur sert avec un temps expo de paramètre m
% N(t) = nombre de clients dans la file au temps t 
% y compris ceux qui sont en train d'etre servis

clear; clf;

l=1.5;    % intensité d'arrivée des clients
m=1.6;    % intensité du traitement par le serveur

t=2;    % 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)
         % un client de moins avec proba m/(l+m)
         n=n+2*(rand<l/(l+m))-1;            
        end    
        % on attend le prochain evenement
        % on tient compte du fait que la file est vide ou pas
        T=T-log(rand)/(l+m*(n>0)); 
     end
    N(i)=n;
end
histo(N)
[mean(N),std(N)]