¡Urgente! Pregunte sobre la teoría de colas de Matlab.
función r=randexp(lambda) r = -lambda*log(rand);
Explicación igual que la anterior
simulación mmm en matlab
clc.clear;
ST_Idle=0;
ST_Busy=1;
EV_NULL=0; p>
p>
EV_Arrive=1;
EV_Depart=2;
EV_LEN=3;
Q_LIMIT=1000 )
next_event_type =[];
next_depart=[]
num_custs_delayed=[]
num_delays_required=[]; > num_events=[ ] ;
num_in_q=[];
estado_servidor=[]; =[];
mean_interarrival=[] )
mean_service=[];
sim_time=[]
time_last_event=[ ];
total_of_delays=[];
time_arrival=[]; time_arrival
time_next_event=zeros(1, EV_LEN);
Parámetros de simulación
num_events=EV_LEN-1;
num_server=3; M/M/m m=2
mean_interarrival= 1;
mean_service=.5;
num_delays_required=2000;
outfile=fopen('MM m.txt', 'w'); p>
fprintf(outfile, 'Sistema de colas de múltiples servidores\n\n');
fprintf(outfile, 'Tiempo medio entre llegadas 11,3 f minutos\n\n', mean_interarrival);
fprintf(outfile, 'Tiempo medio de servicio16.3f minutos\n\n', mean_service);
fprintf(outfile, 'Número de servidores20d\n\n', num_server);
fprintf(outfile, 'Número de clientes14d\n\n', num_delays_required);
inicialización de part1
sim_time=0.0;
/* Variable de estado de inicialización.
*/
server_status =zeros(1, num_server); inactivo
num_in_q = 0;
time_last_event = 0.0; * Inicializar contador de estadísticas. */
num_custs_delayed = 0;
total_of_delays = 0.0;
total_of_time = 0.0
area_num _in_q = 0.0; >
area_server_status = 0.0;
/* Inicializa lista de eventos. Como no hay clientes, no se considera el evento Departure
(finalización del servicio). */
time_next_event(EV_Arrive) = sim_time randexp(mean_interarrival);
time_next_event(EV_Arrive) = sim_time randexp(mean_interarrival);
Time_next_event(EV_Depart); = 1.0e 230;
time_depart=zeros(1, num_server
next_depart=0
part2
mientras (num_custs_); retrasado lt; num_delays_required)
Ejecute la simulación mientras aún se necesitan más retrasos.
/* Determine el próximo evento.*/
min_ time_next_event = 1.0e 290;
next_event_type = 0;
Determinar m evento de salida
min_time_depart=1e290
next_depart=-1; >
for i=1:num_server
if(server_status(i)==1 amp; time_depart(i)lt; min_time_depart)
min_time_depart=time_depart(i);
next_depart=i
fin
fin
time_next_event(2)=min_time_depart
p>
p>
/* El tipo de evento que determina el próximo evento que ocurrirá. */
para i = 1: num_events
if (time_next_event(i) lt; min_time_next_event)
min_time_next_event = time_next_event(i);
next_event_type = i;
end
end
/* Compruebe si la lista de eventos está vacía.
*/
if (next_event_ type == 0)
/* La lista de eventos está vacía, por lo que se detiene la simulación. */
fprintf(outfile, '\nLista de eventos vacía en el momento f', sim_time
exit(1
end
);/* La lista de eventos no está vacía, así que avance el reloj de simulación. */
sim_time = min_time_next_event;
/* Actualiza el acumulador de estadísticas de promedio de tiempo. */
double time_since_last_event;
/* Calcula el tiempo desde el último evento y actualiza la marca de tiempo del último evento. */
time_since_last_event = sim_time - time_last_event;
time_last_event = sim_time;
/* Actualiza el área bajo la función de número de cola. */
area_num_in_q = area_num_in_q num_in_q * time_since_last_event;
/* Actualiza el área bajo la función de indicador de servidor ocupado. */
for i=1:num_server
area_server_status =area_server_status server_status(i) * time_since_last_event
end
/* call La función de evento correspondiente. */
llegada
if(next_event_type==EV_Arrive)
doble retraso;
/* Organizar la próxima llegada. */
time_next_event(1) = sim_time randexp(mean_interarrival);
/* Compruebe si el servidor está ocupado. *//
time_next_event(1) = sim_time randexp(mean_interarrival);
/* Compruebe si el servidor está ocupado.
s_idle=-1;
para i=1: num_server
if (server_status(i) == ST_Idle)
s_idle =i;
break;
end
end
/* Todos los servidores están ocupados, así que incremente el número de clientes en el cola. */
if(s_idle== -1)
num_in_q=1 num_in_q;
/* Compruebe si hay un desbordamiento. */
if (num_in_q gt; Q_LIMIT)
/* La cola se ha desbordado, por lo que se detiene la simulación. */