Análisis algorítmico de las estrategias de simulación de sistemas discretos
Los lenguajes de simulación para la simulación de sistemas discretos se
eligen en base a lo atractivo de sus características, aunque hay una de ellas que resulta determinante e impone la naturaleza del lenguaje, es la estrategia, enfoque o visión del mundo inherente al lenguaje, utilizada para la selección del «suceso siguiente» y la gestión del tiempo. Ellos se clasifican en los procedimientos de control de tiempos de los lenguajes de simulación de sucesos discretos, según la estrategia seguida en la selección de sucesos se clasifican en:
1. Programación de Sucesos (Event Scheduling).
2. Exploración de Actividades (Activity Scanning). 3. Interacción de Procesos (Process Interaction).
El hecho de que algunos lenguajes tales como; SIMSCRIPT II.5, SLAM,
SLAM II y SIMAN aparezcan tanto como lenguajes según una estrategia de programación de sucesos (event scheduling), como de interacción de procesos (process interaction), responde a que su estructura y naturaleza permiten al usuario emplear ambas estrategias, lo que refleja la tendencia creciente a la incorporación de múltiples visiones del mundo en la estructura de un solo lenguaje el cual esta ordenada a sucesos incondicionales que se implanta de la manera que, el procedimiento (ES) de control del tiempo selecciona de la lista de sucesos aquel cuyo tiempo de ocurrencia es el más próximo, resolviendo los empates por las prioridades asignadas o por defecto, actualiza el tiempo del reloj de simulación, igualando su valor al del instante en que ocurre el suceso, y llama a la rutina correspondiente al tratamiento del suceso.
Cada una de las estrategias de simulación que se que se presentaron en la
tabla anterior es susceptible de una representación algorítmica genérica, así como las rutinas para el tratamiento de sucesos de la estrategia (ES), las rutinas de condición y las de actividades para la estrategia (AS), y los segmentos de condición y acción para la estrategia (PI).
Debemos demostrar que en toda representación algorítmica se utiliza algún
conjunto de procedimientos de gestión de estructuras de datos un ejemplo de ello seria las listas, para ayudar a la introducción y recuperación de las representaciones de la información sobre los sucesos y de esta manera manteniendo el carácter genérico de la representación, evitaremos suposiciones sobre las estructuras de datos que se pueden utilizar en las implantaciones específicas de las estrategias tal descripción algorítmica sera precisa solo en la descripción de los aspectos esenciales de la gestión del tiempo, incluyendo las implicaciones correspondientes a las rutinas de modelización, aunque excluyendo los detalles que no dependen de la estrategia y de esta forma la representación algorítmica va concentrada en su análisis de las características que dependen de la estrategia adoptada y de las que dependen del problema específico que se simula el cual los lenguajes de simulación ofrecen, en general, las siguientes capacidades y características:
1. Modelización del estado del sistema.
2. Modelización de la dinámica del sistema. 3. Herramientas para el muestreo estadístico. 4. Especificaciones sobre el proceso de recogida de datos. 5. Recogida de datos generados por la simulación. 6. Análisis de los datos recogidos. 7. Presentación de resultados. 8. Monitorización de la simulación y herramientas de depuración del modelo. 9. Procedimientos de inicialización de la simulación. 10. Herramientas auxiliares complementarias. Un enfoque al análisis de estas características, seria que dentro de ellas son intrínsecas aquellas que dependen solo de la estrategia elegida y por lo tanto son las pueden ser objeto de una descripción algorítmica genérica de la estrategia y ellas son; Modelización del estado del sistema, Modelización de la dinámica del sistema y el Procedimientos de inicialización de la simulación, mientras que las restantes son relativamente independientes de la estrategia y a partir de la identificación de los elementos intrínsecos podemos dar las siguientes descripciones de la estrategia en pseudocódigo.
Dentro de las estrategias de las estrategias de simulación de sistemas
discretos damos algunos conceptos de cada una de estas.
Programación de Sucesos (Event Scheduling).
La programación dirigida por eventos o de sucesos es un paradigma de programación. Un paradigma de programación es una propuesta tecnológica que es adoptada por una comunidad de programadores cuyo núcleo central es incuestionable en cuanto a que unívocamente trata de resolver uno o varios problemas claramente delimitados. La resolución de estos problemas debe suponer consecuentemente un avance significativo en al menos un parámetro que afecte a la ingeniería de software. Probablemente el paradigma de programación que actualmente es el más usado a todos los niveles es la orientación a objeto. El núcleo central de este paradigma es la unión de datos y procesamiento en una entidad llamada "objeto", relacionable a su vez con otras entidades "objeto". En el que tanto la estructura como la ejecución de los programas van determinados por los sucesos que ocurran en el sistema, definidos por el usuario o que ellos mismos provoquen. Para entender la programación de sucesos, podemos oponerla a lo que no es, mientras que en la programación secuencial o estructurada, es el programador el que define cuál va a ser el flujo del programa, en la programación dirigida por sucesos será el propio usuario, o lo que sea que esté accionando el programa el que dirija el flujo del programa. Aunque en la programación secuencial puede haber intervención de un agente externo al programa, estas intervenciones ocurrirán cuando el programador lo haya determinado, y no en cualquier momento como puede ser en el caso de la programación dirigida por eventos. Al crear un programa por sucesos se debe definir los eventos que manejarán su programa y las acciones que se realizarán al producirse cada uno de ellos, lo que se conoce como el administrador de evento. Los eventos soportados estarán determinados por el lenguaje de programación utilizado, por el sistema operativo e incluso por eventos creados por el mismo programador. En la programación dirigida por sucesos, al comenzar la ejecución del programa se llevarán a cabo las inicializaciones y demás código inicial y a lo que el programa quedará bloqueado hasta que se produzca algún evento o suceso. Cuando alguno de los eventos o sucesos esperados por el programa tenga lugar, el programa pasará a ejecutar el código del correspondiente administrador de evento. Un ejemplo seria si el evento o suceso consiste en que el usuario ha hecho click en el botón de play de un reproductor de películas, el cual este ejecutará el código del administrador de evento, que será el que haga que la película se muestre por pantalla. Un ejemplo claro lo tenemos en los sistemas de programación Lexico y Visual Basic, en los que a cada elemento del programa (objetos, controles, etcétera) se le asignan una serie de eventos que generará dicho elemento, como la pulsación de un botón del ratón sobre él o el redibujado del control. La programación dirigida por eventos es la base de lo que llamamos interfaz de usuario, aunque puede emplearse también para desarrollar interfaces entre componentes de Software o módulos del núcleo. En los primeros tiempos de la computación, los programas eran secuenciales, también llamados Batch. Un programa secuencial arranca, lee parámetros de entrada, procesa estos parámetros, y produce un resultado, todo de manera lineal y sin intervención del usuario mientras se ejecuta. Con la aparición y popularización de los PC, el software empezó a ser demandado para usos alejados de los clásicos académicos y empresariales para los cuales era necesitado hasta entonces, y quedó patente que el paradigma clásico de programación no podía responder a las nuevas necesidades de interacción con el usuario que surgieron a raíz de este hecho. En contraposición al modelo clásico, la programación orientada a eventos permite interactuar con el usuario en cualquier momento de la ejecución. Esto se consigue debido a que los programas creados bajo esta arquitectura se componen por un bucle exterior permanente encargado de recoger los eventos, y distintos procesos que se encargan de tratarlos. Habitualmente, este bucle externo permanece oculto al programador que simplemente se encarga de tratar los eventos, aunque en algunos lenguajes será necesaria su construcción. Ejemplo de programa orientado a eventos o sucesos en pseudo codigo lenguaje: While (true){ Switch (event){ case mousse_button_down: case mouse_click: case keypressed: case Else: } }
Exploración de Actividades (Activity Scanning).
La estrategia elige el suceso siguiente basándose en ambos, el tiempo
programado para la ocurrencia del suceso y la verificación de las condiciones. Un concepto amplio básico en la actividad que determina una transición de estado del sistema que requiere un periodo de tiempo. Esta actividad se presenta habitualmente mediante dos sucesos distintos que marcan respectivamente el principio y el final de la misma. Según la visión del mundo que corresponde a un lenguaje, o modelo de simulación programado en un lenguaje, basado en la estrategia AS, el cual considera que el sistema consta de componentes que desarrollan actividades sujetas a actividades especificas. Se tiene en cuenta que para un enfoque más priorizado en la implantación de esta estrategia se particularizan las componentes de tipo activo, o componentes móviles del sistema, que pueden tener asociada una rutina de actividad que cuando se ejecuta modela las fases de la componente. Cada componente de tipo activo tiene también asociado un reloj interno que indica en que instante la componente vuelve a poder ser tenida en cuenta para ser activada de nuevo y una rutina de condición para determinar si se reúnen las condiciones, distintas del tiempo, requeridas para su reactivación. El procedimiento de control de tiempo AS explora las actividades en orden de prioridad para su elegibilidad en el tiempo y otras condiciones complementarias de activación y ejecuta la rutina correspondiente a la actividad de la primera componente cuyas condiciones de actividad se satisfacen.
Interacción de Procesos (Process Interaction).
La estrategia contiene características hibridas que lo relacionan tanto con la
estrategia ES como con las AS, dentro de la visión del mundo la PI contempla el progreso de las componentes del sistema a través de una secuencia de pasos, o procesos, cada uno de los cuales puede tener dos posibles componentes, un segmento de condición, cuya ejecución identifica si se puede pasar a ejecutar la segunda componente, un segmento de acción. Dentro de la implantación de la estrategia PI en un lenguaje como el GPSS, (General Purpose Simulation System, este es un lenguaje pionero desarrollado por Gordon en 1964, que a pesar de los años transcurridos mantiene su vigencia gracias a las continuas actualizaciones, Schriber (SCH) el cual se basa en un procedimiento de control del tiempo que utiliza dos listas de sucesos: 1. Una lista de sucesos futuros (Future Events List. FEL), que contiene información sobre los eventos programados para ser ejecutados en un instante posterior. 2. Una lista de sucesos en curso (Current Events List, CEL), que contiene información sobre los eventos que ya son elegibles desde el punto de vista del momento en que tienen que ser ejecutados, pero cuyas otras condiciones pueden no satisfacerse aun.