Code covered by the BSD License  

Highlights from
mm1_simulator

from mm1_simulator by DIMITRIOS KAKOGIANNIS
This m. file contains a simulator of mm1 queue model.

mm1.m
%implementation of a simple M/M/1

queue_lim=200000;				 % system limit
arrival_mean_time(1:65)=0.01;    
service_mean_time=0.01;		     
sim_packets=750;                 %number of clients to be simulated 
util(1:65) = 0;
avg_num_in_queue(1:65) = 0;
avg_delay(1:65) = 0;
P(1:65) = 1;

for j=1:64 %loop for increasing the mean arrrival time
            
    arrival_mean_time(j+1)=arrival_mean_time(j) + 0.001;
    
num_events=2;						    

% initialization
sim_time = 0.0; 		    

server_status=0; 			
queue_size=0; 				
time_last_event=0.0;       

num_pack_insys=0;		 
total_delays=0.0;		  
time_in_queue=0.0;        
                          
time_in_server=0.0;       
delay = 0.0;
  
time_next_event(1) = sim_time + exponential(arrival_mean_time(j+1));
 
time_next_event(2) = exp(30);    
  
disp(['Launching Simulation...',num2str(j)]); 
 
while(num_pack_insys < sim_packets) 

min_time_next_event = exp(29); 
  type_of_event=0;       
    for i=1:num_events 


      if(time_next_event(i)<min_time_next_event)     
         min_time_next_event = time_next_event(i);    
         type_of_event = i;                           
      end;

  end

  if(type_of_event == 0)
     disp(['no event in time ',num2str(sim_time)]);
  end

  sim_time = min_time_next_event;    

time_since_last_event = sim_time - time_last_event;   
time_last_event = sim_time;   

   time_in_queue = time_in_queue + queue_size * time_since_last_event ; 
    
   time_in_server = time_in_server + server_status * time_since_last_event; 
  
 
  if (type_of_event==1) 
  
  %disp(['packet arrived']);
  % -------------------------larrival-------------------------
  time_next_event(1) = sim_time + exponential(arrival_mean_time(j+1)); 
  % epomenos xronos afiksis
  
  if(server_status == 1) 
     
     num_pack_insys = num_pack_insys + 1;
     queue_size = queue_size + 1 ; 
     
     if(queue_size > queue_lim)
        disp(['queue size = ', num2str(queue_size)]);
        disp(['System Crash at ',num2str(sim_time)]);
        pause
     end

     arr_time(queue_size) = sim_time;

  else 	
    
  
     server_status = 1;                     
     time_next_event(2) = sim_time + exponential(service_mean_time);
	  
   
  end
 
    
  elseif (type_of_event==2) 
      
      % ---------------service and departure---------------			
 
      if(queue_size == 0) 
        server_status = 0;                  
        time_next_event(2) = exp(30);  
    else
    
      
       queue_size = queue_size - 1;

       delay = sim_time - arr_time(1);
       total_delays = total_delays + delay;
      

       time_next_event(2) = sim_time + exponential(service_mean_time);
	
 
       for i = 1:queue_size
          arr_time(i)=arr_time(i+1);
       end
    
    end         
  
 end 

end 

%results output
util(j+1) = time_in_server/sim_time;
avg_num_in_queue(j+1) = time_in_queue/sim_time;
avg_delay(j+1) = total_delays/num_pack_insys;
P(j+1) = service_mean_time./arrival_mean_time(j+1);


end

%----------------------graphs--------------------------------
figure('name','mean number of clients in system diagram(simulated)');
plot(P,avg_num_in_queue,'r');
Xlabel('P');
Ylabel('mean number of clients');
axis([0 0.92 0 15]);

figure('name','mean delay in system diagram (simulated)');
plot(P,avg_delay,'m');
Xlabel('P');
Ylabel('mean delay (hrs)');
axis([0 0.92 0 0.15]);

figure('name', 'UTILISATION DIAGRAM');
plot(P,util,'b');
Xlabel('P');
Ylabel('Utilisation');
axis([0 0.92 0 1]);



Contact us at files@mathworks.com