Red de conocimiento informático - Conocimiento del nombre de dominio - ¡Urgente! Pregunte sobre la teoría de colas de Matlab.

¡Urgente! Pregunte sobre la teoría de colas de Matlab.

Código de simulación de rendimiento del sistema de cola m/m

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>

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');

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>

/* 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. */