1 / 26

Simulación Dr. Ignacio Ponzoni

Simulación Dr. Ignacio Ponzoni. Clase XIV: Una Implementación en Pascal del Método de las Tres Fases Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Año 2005. Implementación de Pidd.

mauve
Download Presentation

Simulación Dr. Ignacio Ponzoni

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SimulaciónDr. Ignacio Ponzoni Clase XIV: Una Implementación en Pascal del Método de las Tres Fases Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Año 2005

  2. Implementación de Pidd • Michael Pidd presenta una librería de subrutinas para implementar simuladores siguiendo el método de las tres fases. • Para su implementación, Pidd utilizó la estructura básica para programas de simulación de eventos discretos propuesta por Fishman en 1973. • Esta estructura continua siendo la base de varios paquetes de software para simulación comercializados en la actualidad.

  3. Estructura Básica de Fishman Herramientas: -Entrada:Salida -Muestreo Aleatorio -Debugging, etc. Unidad de Control: -Planificación -Secuenciamiento Unidad Lógica del Modelo: -Rutinas particulares de la aplicación. (Especificadas por el modelador)

  4. Módulos • La Unidad de Control se encarga del avance dinámico de la simulación, planificando y secuenciando la ejecución de eventos y actividades. • La Unidad Lógica del Modelo implementa las rutinas propias de la aplicación que se está modelando. Estas rutinas son especificadas por el modelador. • La Unidad de Herramientas se encarga de proveer rutinas para la interface de entrada-salida del programa de simulación, generación números aleatorios, generación de reportes estadísticos para análisis de la salida, facilidades para debugging, herramientas de visualización y animación gráfica y otros.

  5. Unidad de ControlArreglo de Control • El arreglo de control mantiene los datos referidos a las entidades. • Cada componente del arreglo es un registro correspondiente a una entidad. • El registro posee cinco campos: • Nombre: contiene una string con el nombre de la entidad. • Disponible: contiene un valor booleano que indica si la entidad está disponible. • Celda de Tiempo: contiene un valor entero que indica cuando ocurrirá la próxima actividad B planificada. • Próxima Actividad: indica cual es la próxima actividad, la representación depende fuertemente del lenguaje usado en la implementación. • Utilización: contiene un entero que almacena el tiempo en que la entidad estuvo ocupada durante la simulación.

  6. Unidad de ControlArreglo de Control • Type BAct = Procedure; • EntDetails = Record • Name : String; • Avail : Boolean; • TimeCell : Integer; • NextAct : BAct; • Util : Integer; • End; • Var Details : Array[1..MaxEnt] of EntDetails;

  7. Unidad de ControlDeclaración de las Variables de Control Var Details : Array[1..MaxEnt] of EntDetails; CArray : Array[1..MaxC] of Procedure; NumCurrEnts : Integer; Clock, PrevClock : Integer; RunDuration : Integer; NumEnts : Integer; NumCs : Integer; CurrEntArray : Array[1..MaxEnt] of Integer; CurrEnt : Integer; CStarted : Boolean;

  8. Unidad de ControlDescripción • CurrEntArray representa la lista HacerAhora. • NumCurrEnt es un índice dentro del arreglo que indica la cantidad de entidades almacenadas en la lista. • CurrEnt es la entidad, dentro de la lista HacerAhora, que está siendo considerada en determinado momento durante la fase B. • Clock y PrevClock representan el valor actual y anterior del reloj durante el avance de la simulación y se representa con una variable entera. • RunDuration representa el tiempo preestablecido para la finalización de la simulación.

  9. Unidad de ControlDescripción • De una manera similar a como los campos NextAct de los registros de tipo EntDetails contienen punteros a los procedimientos que representan las actividades B, el arreglo CArray guarda punteros a los procedimientos asociados con las actividades C. • El orden en que se almacenan los punteros establece un orden de prioridad entre las actividades C. • La variable NumCs contiene la cantidad de actividades C que tiene el programa de simulación. • CStarted es una variable booleana que toma valor true si la actividad C actualmente analizada superó su test de condición y false en caso contrario.

  10. Name Avail TimeCell NextAct Util Entidad 1 Entidad 2 Entidad 3 Entidad 4 ... Unidad de ControlFase A Details array CurrEntArray

  11. Procedure Aphase; Var Entity, Minm : Integer; Begin NumCurrEnts := 0; Minm := MaxInt; For Entity := 1 to NumEnts do With Details[Entity] do If Not Avail then Begin If Timecell <= Minm then Begin If TimeCell < Minm then NumCurrEnts := 1 Else NumCurrEnts := NumCurrEnts + 1; Minm := TimeCell; CurrEntArray[NumCurrEnts] := Entity; End; End; If Minm = MaxInt then Error('Error in A phase, Minm still = MaxInt'); If Minm < 0 then Error('Seems to be a mistake in A phase, Minm -ve'); PrevClock := Clock; Clock := Minm; End;

  12. Unidad de ControlFase B CurrEntArray Ejecutar NextAct correspondiente Ejecutar NextAct correspondiente Ejecutar NextAct correspondiente

  13. Procedure Bphase; Var Loop : Integer; Begin If TraceOn then Begin Writeln(TraceFile); Writeln(TraceFile, 'Time now .. ', Clock:5); End; ShowEntDetails; For Loop := 1 to NumCurrEnts do Begin CurrEnt := CurrEntArray[Loop]; With Details[CurrEnt] do Begin Avail := True; {Release CurrEnt} NextAct; {Do this B Activity} End; End; End;

  14. Unidad de ControlFase C Procedure Cphase; {Try each C activity in turn} Var Loop : Integer; Begin Repeat CStarted := False; For Loop := 1 to NumCs do CArray[Loop]; Until Not CStarted; End;

  15. Unidad Lógica del ModeloCaso de Estudio del Vendedor B1: Arrive (Arribo de Clientes en Persona). B2: EndOfService (Fin de Atención en Ventanilla). B3: Call (Arribo de una Llamada). B4: EndOfCall (Fin de la Atención de una Llamada). C1: BeginService (Inicio de Atención en Ventanilla). C2: BeginCall (Inicio de Atención de una Llamada).

  16. Unidad Lógica del ModeloActividades B Procedure Arrive; {Arrival of personal enquirer} Var Time : Real; Begin Inc(PersIn); {Increment number of arrivals} Time := NegExp(PersArrTime, 1); Inc(PersQ); {Increment queue length} Display('Personal enquirer No. ' + Int2Str(PersIn,3) + ' arrives, queue = '+ Int2Str(PersQ,3) + ' next due after ' + Int2Str(Round(Time),3)); Schedule(PersEnq, Arrive, Time); {Schedule next personal arrival} End;

  17. Unidad Lógica del ModeloActividades B Procedure Call; {Arrival of phone call} Var Time : Real; Begin Inc(PhoneIn); {Increment number of calls} Time := NegExp(PhoneArrTime, 2); Inc(PhoneQ); {Increment queue length} Display('Phone enquirer No. ' + Int2Str(PhoneIn,3) + ' arrives, queue = '+ Int2Str(PhoneQ,3) + ' next after ' + Int2Str(Round(Time),3)); Schedule(PhoneEnq, Call, Time); {Schedule next phone call} End;

  18. Unidad de ControlPlanificador de Eventos Procedure Schedule(Entity : Integer; Activity : BAct; RTime : Real); {Commits specified entity to Activity after RTime} Begin With Details[Entity] do Begin Nextact := Activity; TimeCell := Clock + Round(RTime); Avail := False; Util := Util + Round(RTime); End; End;

  19. Unidad Lógica del ModeloActividades B Procedure EndServe; {End of personal service. CurrEnt is clerk who is released} Begin Inc(PersOut); {Increment number of completed services} Display('End of personal service:' + Int2Str(PersOut,3) + ' freed Clerk:' + Int2Str(CurrEnt,2)); End;

  20. Unidad Lógica del ModeloActividades B Procedure EndTalk; {End of phone conversation. CurrEnt is clerk who is released} Begin Inc(PhoneOut); {Increment number of completed conversations} Display('End of phone conversation:' + Int2Str(PhoneOut,3) + ' freed Clerk: ' + Int2Str(CurrEnt,2)); End;

  21. Unidad Lógica del ModeloActividades B Procedure Observe; {Collect time series of queue lengths} Begin PersRec[Obs] := PersQ; PhoneRec[Obs] := PhoneQ; Inc(Obs); Schedule(Observer, Observe, ObsInterval); {Schedule next observation} Display('Recording, Personal queue = ' + Int2Str(PersQ,3) + ', phone queue = ' + Int2Str(PhoneQ,3)); End;

  22. Unidad Lógica del ModeloActividades C Procedure BeginPersService; Var Time : Real; Clerk : Integer; Begin Clerk := FirstClerk-1; While (PersQ > 0) and (Clerk < LastClerk) do Begin Inc(Clerk); If Details[Clerk].Avail then Begin CStarted := True; Dec(PersQ); Time := NegExp(PersServeTime, 3); Schedule(Clerk, EndServe, Time); Display('Start of Personal service with Clerk:' + Int2Str(Clerk,2)); End; End; End;

  23. Unidad Lógica del ModeloActividades C Procedure BeginPhoneConv; Var Time : Real; Clerk : Integer; Begin Clerk := FirstClerk - 1; While (PhoneQ > 0) and (Clerk < LastClerk) do Begin Inc(Clerk); If Details[Clerk].Avail then Begin CStarted := True; Dec(PhoneQ); Time := NegExp(PhoneServeTime, 4); Schedule(Clerk, EndTalk, Time); Display('Start of Phone Service with Clerk: ' + Int2Str(Clerk,2)); End; End; End;

  24. Unidad de ControlPrograma Principal Begin {Main program} Initialisation; While Clock <= RunDuration do Begin Aphase; Bphase; Cphase; End; Finalisation; End.

  25. Unidad Lógica del ModeloInicialización y Finalización • Los procedimientos Initialisation y Finalisation deben ser provistos por toda Unidad Lógica que uno desee conectar con la Unidad de Control. • Initialisation: este procedimiento se encarga de inicializar todas las variables del modelo antes de comenzar con la primera iteración del método de las tres fases. • Finalisation: este procedimiento se encarga de recopilar los resultados de la simulación y almacenarlos en un formato apropiado para su futuro análisis.

  26. Recomendaciones • Lectura sugerida: • Capítulo 7 del libro Computer Simulation in Management Science de Michael Pidd. • Ejercitación recomendada: • Trabajo Práctico 10: DEVS: Método de las Tres Fases.

More Related