darksantos

Simlib MM1

May 30th, 2014
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.79 KB | None | 0 0
  1. /* Modelo MM1 - Un Servidor, Una Cola */
  2. #include "simlib.c"
  3.  
  4. #define Arribo 1 /* Tipo de Evento 1: Arribos */
  5. #define Partida 2 /* Tipo de Evento 2: Partidas */
  6. #define Servidor 1 /* Lista 1: Servidor */
  7. #define Cola 2 /* Lista 2: Cola */
  8. #define Demora_cola 1 /* Sampst 1: Demora en Cola */
  9. /* Declaraci¢n de variables propias */
  10. float media_interarribos, media_servicio;
  11. int num_clientes, clientes_act,i;
  12.  
  13. /* Declaraci¢n de Funciones propias */
  14. void inicializa(void);
  15. void Rutina_arribos(void);
  16. void Rutina_partidas(void);
  17. void reporte(void);
  18.  
  19. main() // Main function.
  20. {
  21. media_interarribos = 1.0;
  22. media_servicio = 0.8;
  23. num_clientes = 10000;
  24. clientes_act = 0;
  25.  
  26. init_simlib(); // Initializar Simlib
  27. maxatr = 4; // Establecer maxatr = M ximo n£mero de Atributos utilizados
  28. inicializa(); // Initializar el Sistema
  29.  
  30. /* Ejecutar la simulaci¢n. */
  31. while (clientes_act < num_clientes)
  32. {
  33. timing(); // Determinar pr¢ximo Evento */
  34. switch( next_event_type ) // Invoke the appropriate event function. */
  35. {
  36. case Arribo: Rutina_arribos(); break;
  37. case Partida: Rutina_partidas(); break;
  38. }
  39. }
  40. /* Llamada al Reporte para mostrar los resultados */
  41. reporte();
  42. getch();
  43. }
  44.  
  45. void inicializa(void) // Inicializar el Sistema
  46. {
  47. // Se carga el primer Arribo en la Lista de Eventos
  48. transfer[1] = sim_time + expon(media_interarribos,Arribo);
  49. transfer[2] = Arribo;
  50. list_file(INCREASING,LIST_EVENT);
  51. }
  52.  
  53. void Rutina_arribos(void) /* Evento Arribo */
  54. {
  55. // Determinar proximo arribo y cargar en Lista de Eventos
  56. transfer[1] = sim_time + expon(media_interarribos,Arribo);
  57. transfer[2] = Arribo;
  58. list_file(INCREASING,LIST_EVENT);
  59. // Chequear si el Servidor esta desocupado
  60. if (list_size[Servidor] == 0)
  61. {
  62. ++clientes_act;
  63. // Si est desocupado, ocuparlo
  64. list_file(FIRST, Servidor);
  65. sampst(0.0, Demora_cola);
  66. // y generar la partida
  67. transfer[1] = sim_time + expon(media_servicio, Partida);
  68. transfer[2] = Partida;
  69. list_file(INCREASING,LIST_EVENT);
  70. }
  71. else
  72. {
  73. // Si el Servidor esta ocupado, poner en Cola */
  74. transfer[1] = sim_time;
  75. list_file(LAST, Cola);
  76. }
  77. }
  78.  
  79. void Rutina_partidas(void) /* Evento Partida */
  80. {
  81. // Desocupar el Servidor */
  82. list_remove(FIRST, Servidor);
  83. // Ver si hay trabajos en cola */
  84. if (list_size[Cola] > 0)
  85. {
  86. // Sacar el primero de la cola y actualizar Demoras */
  87. ++clientes_act;
  88. list_remove(FIRST, Cola);
  89. sampst(sim_time - transfer[1], Demora_cola);
  90. // Cargar en el Servidor
  91. list_file(FIRST, Servidor);
  92. // y generar la partida
  93. transfer[1] = sim_time + expon(media_servicio, Partida);
  94. transfer[2] = Partida;
  95. list_file(INCREASING,LIST_EVENT);
  96. }
  97. }
  98.  
  99.  
  100. void reporte( void ) // Generar Reporte de la Simulaci¢n */
  101. {
  102. /* Mostrar Parametros de Entrada */
  103. /* -------- Por pantalla -------- */
  104. printf( "Sistema M/M/1 - Simulaci¢n con Simlib \n\n" );
  105. printf( "Media de Interarribos : %8.3f minutos\n", media_interarribos);
  106. printf( "Media de Servicios : %8.3f minutos\n", media_servicio);
  107. printf( "Cantidad de Clientes Demorados : %i \n\n", num_clientes);
  108. /* Calcular los Estad¡sticos */
  109. /* Estad¡sticos Escalaras - Sampst */
  110. sampst(0.0,-Demora_cola);
  111. printf( "\nDemora en Cola : %f \n ",transfer[1]);
  112. /* Estad¡sticos Temporales - Timest y Filest */
  113. filest(Cola);
  114. printf( "\nN£mero Promedio en Cola : %f \n ",transfer[1]);
  115. filest(Servidor);
  116. printf( "\nUtilizaci¢n Servidor : %f \n ",transfer[1]);
  117. printf( "\nSimulation end time : %10.3f minutes\n", sim_time );
  118. getch();
  119. }
Advertisement
Add Comment
Please, Sign In to add comment