Simulaci n dr ignacio ponzoni
Download
1 / 26

- PowerPoint PPT Presentation


  • 100 Views
  • Uploaded on

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.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '' - mauve


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Simulaci n dr ignacio ponzoni

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


Implementaci n de pidd
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.


Estructura b sica de fishman
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)


M dulos
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.


Unidad de control arreglo de control
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.


Unidad de control arreglo de control1
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;


  • Unidad de control declaraci n de las variables de control
    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;


    Unidad de control descripci n
    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.


    Unidad de control descripci n1
    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.


    Unidad de control fase a

    Name

    Avail

    TimeCell

    NextAct

    Util

    Entidad 1

    Entidad 2

    Entidad 3

    Entidad 4

    ...

    Unidad de ControlFase A

    Details array

    CurrEntArray


    Simulaci n dr ignacio ponzoni

    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;


    Unidad de control fase b
    Unidad de ControlFase B

    CurrEntArray

    Ejecutar NextAct correspondiente

    Ejecutar NextAct correspondiente

    Ejecutar NextAct correspondiente


    Simulaci n dr ignacio ponzoni

    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;


    Simulaci n dr ignacio ponzoni

    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;


    Unidad l gica del modelo caso de estudio del vendedor
    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).


    Unidad l gica del modelo actividades b
    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;


    Unidad l gica del modelo actividades b1
    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;


    Unidad de control planificador de eventos
    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;


    Unidad l gica del modelo actividades b2
    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;


    Unidad l gica del modelo actividades b3
    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;


    Unidad l gica del modelo actividades b4
    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;


    Unidad l gica del modelo actividades c
    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;


    Unidad l gica del modelo actividades c1
    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;


    Unidad de control programa principal
    Unidad de ControlPrograma Principal

    Begin {Main program}

    Initialisation;

    While Clock <= RunDuration do

    Begin

    Aphase;

    Bphase;

    Cphase;

    End;

    Finalisation;

    End.


    Unidad l gica del modelo inicializaci n y finalizaci n
    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.


    Simulaci n dr ignacio ponzoni

    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.