Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Modelo MM1 - Un Servidor, Una Cola */
- #include "simlib.c"
- #define Arribo 1 /* Tipo de Evento 1: Arribos */
- #define Partida 2 /* Tipo de Evento 2: Partidas */
- #define Servidor 1 /* Lista 1: Servidor */
- #define Cola 2 /* Lista 2: Cola */
- #define Demora_cola 1 /* Sampst 1: Demora en Cola */
- /* Declaraci¢n de variables propias */
- float media_interarribos, media_servicio;
- int num_clientes, clientes_act,i;
- /* Declaraci¢n de Funciones propias */
- void inicializa(void);
- void Rutina_arribos(void);
- void Rutina_partidas(void);
- void reporte(void);
- main() // Main function.
- {
- media_interarribos = 1.0;
- media_servicio = 0.8;
- num_clientes = 10000;
- clientes_act = 0;
- init_simlib(); // Initializar Simlib
- maxatr = 4; // Establecer maxatr = M ximo n£mero de Atributos utilizados
- inicializa(); // Initializar el Sistema
- /* Ejecutar la simulaci¢n. */
- while (clientes_act < num_clientes)
- {
- timing(); // Determinar pr¢ximo Evento */
- switch( next_event_type ) // Invoke the appropriate event function. */
- {
- case Arribo: Rutina_arribos(); break;
- case Partida: Rutina_partidas(); break;
- }
- }
- /* Llamada al Reporte para mostrar los resultados */
- reporte();
- getch();
- }
- void inicializa(void) // Inicializar el Sistema
- {
- // Se carga el primer Arribo en la Lista de Eventos
- transfer[1] = sim_time + expon(media_interarribos,Arribo);
- transfer[2] = Arribo;
- list_file(INCREASING,LIST_EVENT);
- }
- void Rutina_arribos(void) /* Evento Arribo */
- {
- // Determinar proximo arribo y cargar en Lista de Eventos
- transfer[1] = sim_time + expon(media_interarribos,Arribo);
- transfer[2] = Arribo;
- list_file(INCREASING,LIST_EVENT);
- // Chequear si el Servidor esta desocupado
- if (list_size[Servidor] == 0)
- {
- ++clientes_act;
- // Si est desocupado, ocuparlo
- list_file(FIRST, Servidor);
- sampst(0.0, Demora_cola);
- // y generar la partida
- transfer[1] = sim_time + expon(media_servicio, Partida);
- transfer[2] = Partida;
- list_file(INCREASING,LIST_EVENT);
- }
- else
- {
- // Si el Servidor esta ocupado, poner en Cola */
- transfer[1] = sim_time;
- list_file(LAST, Cola);
- }
- }
- void Rutina_partidas(void) /* Evento Partida */
- {
- // Desocupar el Servidor */
- list_remove(FIRST, Servidor);
- // Ver si hay trabajos en cola */
- if (list_size[Cola] > 0)
- {
- // Sacar el primero de la cola y actualizar Demoras */
- ++clientes_act;
- list_remove(FIRST, Cola);
- sampst(sim_time - transfer[1], Demora_cola);
- // Cargar en el Servidor
- list_file(FIRST, Servidor);
- // y generar la partida
- transfer[1] = sim_time + expon(media_servicio, Partida);
- transfer[2] = Partida;
- list_file(INCREASING,LIST_EVENT);
- }
- }
- void reporte( void ) // Generar Reporte de la Simulaci¢n */
- {
- /* Mostrar Parametros de Entrada */
- /* -------- Por pantalla -------- */
- printf( "Sistema M/M/1 - Simulaci¢n con Simlib \n\n" );
- printf( "Media de Interarribos : %8.3f minutos\n", media_interarribos);
- printf( "Media de Servicios : %8.3f minutos\n", media_servicio);
- printf( "Cantidad de Clientes Demorados : %i \n\n", num_clientes);
- /* Calcular los Estad¡sticos */
- /* Estad¡sticos Escalaras - Sampst */
- sampst(0.0,-Demora_cola);
- printf( "\nDemora en Cola : %f \n ",transfer[1]);
- /* Estad¡sticos Temporales - Timest y Filest */
- filest(Cola);
- printf( "\nN£mero Promedio en Cola : %f \n ",transfer[1]);
- filest(Servidor);
- printf( "\nUtilizaci¢n Servidor : %f \n ",transfer[1]);
- printf( "\nSimulation end time : %10.3f minutes\n", sim_time );
- getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment