# Simio # Bienvenida ## ¡Hola! Esta sección busca recopilar información sobre [Simio](http://www.simio.com/), el software de simulación. Fue creada para apoyar a los cursos de Simulación de la [Escuela de Ingeniería Industrial](http://eii.pucv.cl/) de la [Pontificia Universidad Católica de Valparaíso](http://www.pucv.cl/), y para contribuir a generar más material en español. Esperamos que te sirva y, ¡éxito en el estudio! [**Para comenzar puedes ingresar aquí**](https://simulemos.cl/books/simio "Simio") ### Otras fuentes de información La Wiki se encuentra en una etapa temprana, por lo que es muy probable que no encuentres todo lo que necesites. A continuación te dejamos otros sitios que puedes visitar para obtener más información sobre Simio. Lamentablemente algunas de estas fuentes están disponibles solo en inglés. - [Learning Simio Lab Series, por Jeff Smith](https://jsmith.co/node/40) (en inglés): Esta es una serie de videotutoriales que enseña varias características esenciales de Simio, además de algunas más avanzadas. Los ejemplos trabajados se encuentran disponibles para descargar. - [Tutorial de Simio, por Álvaro García](https://www.youtube.com/playlist?list=PLZqh3oAyX6qnwfsKpSzHp5nS60NMNj0nD) (en español): Videotutoriales sobre lo esencial de Simio. - [Simio Reference Guide](https://cdn.simio.com/software/Simio%20Reference%20Guide.pdf) (en inglés): Guía de referencia de Simio. Contiene la documentación detallada de todos los componentes del software. ### ¿Tienes dudas, recomendaciones o te gustaría aportar a la Wiki? Puedes escribirnos a . # Standard Library La Standard Library, o librería estándar, es un conjunto de objetos predefinidos que representan elementos comúnmente utilizados en el desarrollo de modelos de simulación: servidores, calles, vehículos, trabajadores, entre otros. A pesar de que estos objetos son parte de Simio, su funcionamiento no es "mágico", ya que son creados dentro de la aplicación siguiendo las mismas técnicas que aprenderás tú. Simio sigue un paradigma de orientación a objetos, lo que habilita a un usuario avanzado a modificar el funcionamiento de los objetos de la librería o combinar varios de ellos creando así un "superobjeto”. A continuación puedes ver cada uno de los elementos de la Standard Library. # Source ![Source en interfaz de Simio](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/scaled-840-0/bf0bMa7q8dTC3DEK-StandardLibraryMenu_Source.png)
Objeto**Source**
Función**Creación de entidades**
Clase**Fixed**
Process Triggers**Run Initialized, Run Ending, Creating Entities, Created Entity, Exited**
Asignación de estados**Before Exiting, On Balking, On Reneging**
Este objeto permite la creación de entidades de un cierto tipo. Esto puede ocurrir según una tasa específica, un patrón de llegada o como respuesta a un Evento. Cuenta con un buffer de salida (*Output Buffer)* en el cual las entidades pueden esperar para salir del objeto por medio de su nodo de salida (*Output*). [![StandardLibraryGIF_Source.gif](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/DwXgVSWFyFlMuR2I-StandardLibraryGIF_Source.gif)](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/DwXgVSWFyFlMuR2I-StandardLibraryGIF_Source.gif) #### Modos de llegada (*Arrival Modes*) Simio soporta los siguientes modos de llegada: - Tiempo entre llegadas (*Interarrival Time):* Las entidades se generan según la tasa indicada por la propiedad **Interarrival Time**, que representa el intervalo de tiempo entre dos llegadas consecutivas. - Tasa dinámica (*Time Varying Arrival Rate*): En este caso la tasa de llegadas no es fija y se obtiene de la propiedad **Rate Table**, que entrega diferentes tasas según la hora de la simulación. Por ejemplo, se desea modelar una tasa elevada en las primeras horas del día, una disminución gradual hasta la hora de almuerzo y después un aumento hasta el *peak,* antes de la hora de cierre. - Por evento (*On Event*): Se generará una llegada solamente cuando se dispare el evento definido en la propiedad **Event Name.** Se puede utilizar cuando las llegadas dependen de alguna acción dentro de la simulación. Ejemplo: se genera una órden de trabajo a un operador logístico cuando el proceso de producción ha terminado. - Tabla de llegadas (*Arrival Table):* Las llegadas están definidas en una tabla que contiene la hora en la que esta deberá ser generada. La columna que tiene la fecha y hora se indica en la propiedad **Arrival Time Property**. Para más información se recomienda ver el SimBit: *Appointment Arrivals.* #### Detener la creación de entidades Revisar las propiedades: **Maximum Arrivals, Maximum Time y Stopping Event.** ![Source en Facility View](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/ugFfbtl518MacTwZ-StandardLibraryFacility_Source.png) Objeto Source visto en vista Facility (2D) #### Algunas propiedades
**Propiedad****Tipo****Descripción**
Entity Type (Tipo de entidad)Nombre de instancia de entidadEl tipo de entidad a generar.
Arrival Mode (Modo de llegada)*Interarrival Time, Time Varying ArrivalRate, On Event, Arrival Table* El modo utilizado para generar el flujo de llegadas.
Time OffsetExpressionRepresenta un tiempo a esperar antes de generar la primera llegada.
Interarrival Time (Tiempo entre llegadas)ExpressionIntervalo de tiempo entre dos llegadas sucesivas. Esta propiedad suele ser especificada utilizando distribuciones de probabilidad. Ver [Distribuciones de probabilidad](https://simulemos.cl/books/simio/page/distribuciones-de-probabilidad "Distribuciones de probabilidad").
Entities Per Arrival (Entidades por llegada)Expression (truncada a entero)Número de entidades que serán creadas en cada llegada.
Initial Number EntitiesExpressionNúmero inicial de entidades a crear al comienzo de la simulación, adicionalmente a los creados en el modo *On Event.* No son incluidos en los *Maximum Arrivals.*
Maximum ArrivalsExpression (truncada a entero)Cantidad máxima de llegadas que generará este objeto.
Maximum TimeExpressionTiempo contado desde el inicio de la simulación hasta el cual el objeto dejará de generar llegadas.
Stop Event NameEventEvento que al ser disparado hará que el Source deje de generar llegadas.
#### Add-On Process Triggers
**Trigger****Descripción**
Run InitializedOcurre cuando la simulación es iniciada.
Run EndingOcurre cuando la simulación está terminando.
Creating EntitiesOcurre cuando el objeto está por crear una llegada.
Created EntityOcurre cuando una entidad ha sido creada por el objeto.
ExitedOcurre cuando una entidad ha salido del objeto.
# Sink ![StandardLibraryMenu_Sink.png](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/scaled-840-0/Wg9i0FoBilS4xgVu-StandardLibraryMenu_Sink.png)
Objeto**Sink**
Función**Destrucción de entidades**
Clase**Fixed**
Process Triggers**Run Initialized, Run Ending, Entered, Destroying Entity**
Asignación de estados**On Entering**
Este objeto destruye las entidades que ingresan a él, además, puede guardar estadísticas como el tiempo en sistema (*Time In System*). Cuenta con un buffer de entrada (*Input Buffer).* ![StandardLibraryGIF_Sink.gif](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/c2RNcaa10uFFwdNH-StandardLibraryGIF_Sink.gif) ![StandardLibraryFacility_Sink.png](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/scaled-840-0/Sk6u7rfNvwsOk26y-StandardLibraryFacility_Sink.png) Objeto Sink visto en vista Facility (2D) #### Algunas propiedades
**Propiedad****Tipo****Descripción**
Transfer-In TimeExpressionTiempo requerido para transferir una entidad a este objeto.
On EnteringAssignmentsEstados a asignar cuando una entidad entra en el objeto. (Opcional)
#### Add-On Process Triggers
**Trigger****Descripción**
Run InitializedOcurre cuando la simulación es iniciada.
Run EndingOcurre cuando la simulación está terminando.
EnteredOcurre cuando una entidad ha entrado al objeto y está por empezar el *Transfer-In Time.*
Destroying EntityOcurre cuando una entidad está a punto de ser destruida por el objeto.
# Server [![StandardLibraryMenu_Server.png](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/scaled-840-0/3JdbARxsV8Jh5jJ4-StandardLibraryMenu_Server.png)](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/3JdbARxsV8Jh5jJ4-StandardLibraryMenu_Server.png)
Objeto**Server**
Función**Procesamiento de entidades**
Clase**Fixed**
Process Triggers**Run Initialized, Run Ending, Entered, Before Processing, Processing, After Processing, Exited, Failed, Repaired, Evaluating Seize Request, On Shift, Off Shift**
Asignación de estados**On Entering, Before Processing, After Processing, Before Exiting, On Balking, On Reneging**
Este objeto representa un proceso capacitado, por ejemplo: una máquina o un cajero de supermercado. Cuenta con un nodo de entrada y un buffer de entrada (*Input* Buffer); un nodo de salida y un buffer de salida *(Output Buffer);* y una cola que representa a las entidades actualmente siendo procesadas *(Processing).* Por defecto, las entidades ingresan al *Input Buffer* y esperan hasta que exista capacidad disponible para procesar a la siguiente entidad, luego es transferida a la cola de *Processing* hasta que finalice su procesamiento. Finalmente la entidad entra al *Output Buffer* y espera hasta que pueda salir del objeto. El tiempo de proceso está dado por la propiedad **Processing Time.** #### Tipos de capacidad (*Capacity types*) La capacidad representa la cantidad de entidades que el objeto puede procesar de manera simultánea. - **Fija** (*Fixed*): La capacidad estará dada por la propiedad **Initial Capacity.** Esta puede ser una expresión, pero solo es evaluada al comienzo de la simulación. La capacidad puede ser modificada durante la simulación asignándole un nuevo valor al estado ***CurrentCapacity*** del objeto (Ej: MiObjeto.CurrentCapacity) - **Horario de trabajo** (*Work Schedule*): Para utilizar este tipo, se debe definir un *Work Schedule* en la pestaña *Data.* Este modo permite asignar un horario de trabajo al objeto, de manera que automáticamente comienza a procesar entidades cuando comienza su turno (*On Shift*) y deja de procesarlas cuando el turno termina (*Off Shift*). [![StandardLibraryGIF_Server.gif](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/6y0UKvhwlJvKZZ0l-StandardLibraryGIF_Server.gif)](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/6y0UKvhwlJvKZZ0l-StandardLibraryGIF_Server.gif) #### Prioridades Simio permite utilizar políticas para decidir cuál entidad será la siguiente en ser procesada. Existen dos tipos de *Rankings.* - **Reglas estáticas** (*Static Ranking Rules*): Estas reglas determinan la ubicación de la entidad en la cola, cuando esta ingresa a la cola. - **Reglas dinámicas** *(Dynamic Selection Rules)*: Estas reglas permiten que el objeto determine de manera dinámica la próxima entidad a ser procesada, es decir, el lugar no es definido cuando la entidad ingresa, sino cuando el Server está listo para procesar a la siguiente entidad. ##### Reglas estáticas - **First In First Out** (FIFO): La primera entidad que ingresó es la primera en ser procesada. - **Last In First Out** (LIFO): La última entidad en ingresar será la primera en ser procesada. - **Smallest Value First**: Ordenará las entidades según la expresión definida en la propiedad **Ranking Expression** de menor a mayor. - **Largest Value First**: Ordenará las entidades según la expresión definida en la propiedad **Ranking Expression** de mayor a menor. ##### Reglas dinámicas - **Smallest Value First**: Misma lógica de la versión estática. Ordena según la propiedad **Value Expression.** - **Largest Value First**: Misma lógica de la versión estática. Ordena según la propiedad **Value Expression.** - **Standard Dispatching Rule:** Esta opción permite utilizar una de varias políticas de planificación implementadas por Simio tales como: *SPT, LPT, EDD, LST,* entre otros. #### Estados El estado de este objeto se puede verificar en el State de tipo entero **ResourceState**. Ej.: MiObjeto.ResourceState
**Valor****Estado**
0Disponible
**1**Procesando
**2**Bloqueado
**3**Falla
**4**Fuera de turno
**5**Falla de procesamiento
**6**Procesando fuera de turno
**7**Setup
**8**Setup de turno
[![StandardLibraryFacility_Server.png](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/scaled-840-0/PwRq54agpYNYSOOX-StandardLibraryFacility_Server.png)](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/PwRq54agpYNYSOOX-StandardLibraryFacility_Server.png) Objeto Server visto en vista Facility (2D) #### Algunas propiedades
**Propiedad****Tipo****Descripción**
Capacity TypeFixed, Work ScheduleIndica el tipo de capacidad del Server.
Initial CapacityExpressionCapacidad inicial del Server. Se evalúa al comenzar la simulación.
Ranking RuleListRegla estática a utilizar para ordenar las entidades en espera.
Ranking ExpressionExpressionValor utilizado por las reglas *Smallest/Largest Value First* para ordenar las entidades.
Dynamic Selection RuleListIndica si este objeto seleccionará de manera dinámica la próxima entidad a ser procesada utilizando una regla dinámica de selección.
Transfer-In TimeExpressionEl tiempo requerido para transferir una entidad a este objeto.
Processing TimeExpressionTiempo requerido para procesar una entidad. Normalmente asignado con distribuciones de probabilidad.
Off Shift RuleListIndica la política que utilizará el objeto para determinar qué hacer cuando se acabe el turno y exista una entidad en proceso. *Suspend Processing*: se suspende el procesamiento y continua en el siguiente turno. *Finish Work Already Started*: no procesará nuevas entidades pero terminará las que se encuentran actualmente en proceso.
#### Add-On Process Triggers
**Trigger****Descripción**
Run InitializedOcurre cuando la simulación es iniciada.
Run EndingOcurre cuando la simulación está terminando.
EnteredOcurre cuando una entidad ha entrado al objeto y está por empezar el *Transfer-In Time.*
Before ProcessingOcurre cuando le ha sido asignada capacidad del Server a la entidad, pero aún no ingresa a la estación de proceso.
ProcessingOcurre cuando la entidad ha sido transferida a la estación de proceso y está a punto de comenzar su procesamiento.
After ProcessingOcurre cuando la entidad ha completado su procesamiento y está por salir de la estación de proceso.
ExitedOcurre cuando una entidad ha salido del objeto.
FailedOcurre cuando este objeto ha fallado.
RepairedOcurre cuando este objeto ha sido reparado.
Evaluating Seize RequestOcurre cuando el objeto está determinando si aceptará o no la solicitud de capacidad por parte de la entidad. Para rechazar se debe asignar un valor negativo al *ReturnValue* del Token.
On ShiftOcurre cuando el objeto está al inicio de un turno definido en su *Work Schedule.*
Off ShiftOcurre cuando el objeto está al término de un turno definido en su *Work Schedule.*
# Workstation # Combiner [![StandardLibraryMenu_Combiner.png](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/scaled-840-0/nnkOpb9Skw9aqxiZ-StandardLibraryMenu_Combiner.png)](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/nnkOpb9Skw9aqxiZ-StandardLibraryMenu_Combiner.png)
Objeto**Combiner**
Función**Agrupación de entidades**
Clase**Fixed**
Process Triggers**Run Initialized, Run Ending, Parent Entered, Member Entered, Before Processing, Processing, After Processing, Exited, Failed, Repaired, Evaluating Seize Request, On Shift, Off Shift**
Asignación de estados**On Parent Entering, On Member Entering, Before Processing, After Processing, Before Exiting, On Balking, On Reneging**
Este objeto permite crear grupos de entidades y asociarlos a una entidad representativa. Las entidades a agrupar se denominan **miembros** (*Member Entity*) y la entidad representativa se conoce como **entidad padre** *(Parent Entity).* Al grupo de entidades miembro se le llama *Batch.* El objeto cuenta con dos nodos de entrada y uno de salida (*Output*). El primer nodo de entrada (*ParentInput)* recibe a las entidades padre y el segundo (*MemberInput)* a las entidades miembro. Cada grupo está compuesto únicamente de una entidad padre y el número de entidades miembro está definido en la propiedad **Batch Quantity.** Las entidades, luego de ingresar, esperan en sus respectivos buffers de entrada hasta que se cumpla que existe al menos una entidad en la cola de entidades padre y un número de entidades miembro igual a lo definido en la propiedad *Batch Quantity.* Cumplido este requisito, las entidades pasan a la cola de procesamiento, el *batch* es creado y es asignado a la entidad padre. Finalmente la entidad padre abandona el objeto a través de su nodo de salida. Este objeto permite asignar un tiempo de proceso a la etapa de agrupación, este se define en la propiedad **Processing Time**. #### {{@2#bkmrk-tipos-de-capacidad-%28}} {{@2#bkmrk-la-capacidad-represe}} {{@2#bkmrk-fija-%28fixed%29%3A-la-cap}} [![StandardLibraryGIF_Combiner.gif](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/8VSHAM1htZAI7HV6-StandardLibraryGIF_Combiner.gif)](https://simulemos.cl/uploads/images/gallery/2019-03-Mar/8VSHAM1htZAI7HV6-StandardLibraryGIF_Combiner.gif) [![StandardLibraryFacility_Combiner.png](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/scaled-840-0/eYCW5NUEluUQg39a-StandardLibraryFacility_Combiner.png)](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/eYCW5NUEluUQg39a-StandardLibraryFacility_Combiner.png) Objeto Combiner visto en vista Facility (2D) #### Algunas propiedades
**Propiedad****Tipo****Descripción**
Batch QuantityExpression truncada a entero.Tamaño del batch. Corresponde al número de entidades miembro que se deben esperar antes de agruparlas y asociarlas a la entidad padre.
Initial CapacityExpressionCapacidad inicial del Combiner. Corresponde a la cantidad de batchs que se pueden procesar de forma simultánea. Se evalúa al comenzar la simulación.
Parent Transfer-In Time y Member Transfer-In TimeExpressionCorresponde al tiempo que toma transferir una entidad al Combiner. Estos tiempos corren de forma simultánea. Por ejemplo, si los tiempos de transferencia de la entidad padre y las entidades miembro son 1 y 2 minutos respectivamente, y, suponiendo que ambas llegan al mismo tiempo, entonces en el minuto 2 ambas estarán listas para ser procesadas.
Off Shift RuleListIndica la política que utilizará el objeto para determinar qué hacer cuando se acabe el turno y exista una entidad en proceso. *Suspend Processing*: se suspende el procesamiento y continua en el siguiente turno. *Finish Work Already Started*: no procesará nuevas entidades pero terminará las que se encuentran actualmente en proceso.
#### Add-On Process Triggers
**Trigger****Descripción**
Run InitializedOcurre cuando la simulación es iniciada.
Run EndingOcurre cuando la simulación está terminando.
Parent EnteredOcurre cuando una entidad padre ha entrado al objeto y está por empezar el *Parent Transfer-In Time.*
Member EnteredOcurre cuando una entidad miembro ha entrado al objeto y está por empezar el *Member Transfer-In Time.*
Before ProcessingOcurre cuando le ha sido asignada capacidad del Combiner a la entidad padre pero esta aún no ingresa a la estación de proceso.
ProcessingOcurre cuando la entidad padre ha sido transferida a la estación de proceso y está a punto de comenzar su procesamiento.
After ProcessingOcurre cuando la entidad padre ha completado su procesamiento y está por salir de la estación de proceso.
ExitedOcurre cuando una entidad padre y su batch han salido del objeto.
FailedOcurre cuando este objeto ha fallado.
RepairedOcurre cuando este objeto ha sido reparado.
Evaluating Seize RequestOcurre cuando el objeto está determinando si aceptará o no la solicitud de capacidad por parte de la entidad. Para rechazar se debe asignar un valor negativo al *ReturnValue* del Token.
On ShiftOcurre cuando el objeto está al inicio de un turno definido en su *Work Schedule.*
Off ShiftOcurre cuando el objeto está al término de un turno definido en su *Work Schedule.*
#### # Separator ![StandardLibraryMenu_Separator.png](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/scaled-840-0/QMXqB427nmUmW7qA-StandardLibraryMenu_Separator.png)
Objeto**Separator**
Función**Desagrupación, copia y creación de entidades**
Clase**Fixed**
Process Triggers**Run Initialized, Run Ending, Entered, Before Processing, Processing, After Processing, Parent Exited, Member Exited, Failed, Repaired, Evaluating Seize Request, On Shift, Off Shift**
Asignación de estados**On Entering, Before Processing, After Processing, Before Parent Exiting, Before Member Exiting, On Balking, On Reneging**
Este objeto tiene como función principal la de separar un batch de su entidad padre (ver [Combiner](https://simulemos.cl/link/8#bkmrk-este-objeto-permite-)). Cuenta con un nodo de entrada (*Input*) y dos nodos de salida: el primero para la entidad padre (*ParentOutput*) y el segundo para las entidades miembro (*MemberOutput*). Cada nodo de salida cuenta con su respectiva cola o buffer de salida. #### Modos de operación (*Separation Mode*) A pesar de que por defecto este objeto opera como el inverso al [Combiner](https://simulemos.cl/books/simio/page/combiner "Combiner"), en realidad tiene 3 modos de operación o de separación. Además, este objeto permite asignarle un tiempo de proceso, este se especifica en la propiedad **Processing Time**. - **Separar** (*Split Batch*): Modo por defecto. Funciona de forma inversa al Combiner: recibe en su nodo de entrada a una entidad padre con su batch, lo procesa y los separa, saliendo la entidad padre por el nodo de salida *ParentOutput* y las entidades miembro por el nodo *MemberOuput*. Este modo permite especificar por medio de la propiedad, **Desired Split Quantity**, cuántos miembros serán removidos del batch. Si el batch es más grande que la cantidad definida, la entidad padre saldrá del objeto con las entidades que no fueron removidas (sigue teniendo un batch, pero con menos entidades). - **Copiar** (*Make Copies*): Este modo hará que el Separator cree copias de la entidad entrante. La cantidad de copias a crear se define en la propiedad **Copy Quantity** y el tipo de entidad se define en la propiedad **Copy Entity Type** (por defecto creará una copia del mismo tipo). La entidad original sale por el nodo *ParentOutput*, las copias por el nodo *MemberOutput.* Simio se encargará de copiar los valores de los atributos desde el original a las copias. - **Crear** (*Create New*): Similar al modo de copia, pero sin copiar los atributos. La cantidad a crear se define en la propiedad **New Entity Quantity** y el tipo en la propiedad **New Entity Type***.* La entidad original sale del objeto usando el nodo *ParentOutput* y las nuevas entidades usando el nodo *MemberOutput*. #### {{@2#bkmrk-tipos-de-capacidad-%28}} {{@2#bkmrk-la-capacidad-represe}} {{@2#bkmrk-fija-%28fixed%29%3A-la-cap}} ![StandardLibraryGIF_Separator.gif](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/Uv6uZuPJmZOoylEQ-StandardLibraryGIF_Separator.gif) ![StandardLibraryFacility_Separator.png](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/scaled-840-0/1kn05gzHrFJ6V6jw-StandardLibraryFacility_Separator.png) Objeto Separator visto en vista Facility (2D) #### Algunas propiedades
**Propiedad****Tipo****Descripción**
Separation ModeListModo de operación. Ver [arriba](#bkmrk-modos-de-operaci%C3%B3n-) para más detalles.
Desired Split QuantityExpressionNúmero de entidades a extraer del batch.
Removal OrderListOrden en que se remueven las entidades del batch. LastBatchedFirst: LIFO FirstBatchedFirst: FIFO
Copy QuantityExpressionNúmero de copias a crear.
Copy Entity TypeNombre de entidadTipo de entidad a crear.
New Entity QuantityExpressionNúmero de entidades a crear.
New Entity TypeNombre de entidadTipo de entidad a crear.
Initial CapacityExpressionCapacidad inicial del Separator. Corresponde a la cantidad de entidades que se pueden procesar de forma simultánea. Se evalúa al comenzar la simulación.
Transfer-In TimeExpressionCorresponde al tiempo que toma transferir una entidad al Separator.
Off Shift RuleListIndica la política que utilizará el objeto para determinar qué hacer cuando se acabe el turno y exista una entidad en proceso. *Suspend Processing*: se suspende el procesamiento y continua en el siguiente turno. *Finish Work Already Started*: no procesará nuevas entidades pero terminará las que se encuentran actualmente en proceso.
#### Add-On Process Triggers
**Trigger****Descripción**
Run InitializedOcurre cuando la simulación es iniciada.
Run EndingOcurre cuando la simulación está terminando.
EnteredOcurre cuando una entidad ha entrado al objeto y está por empezar el *Transfer-In Time.*
Before ProcessingOcurre cuando le ha sido asignada capacidad del Separator a la entidad pero esta aún no ingresa a la estación de proceso.
ProcessingOcurre cuando la entidad padre ha sido transferida a la estación de proceso y está a punto de comenzar su procesamiento.
After ProcessingOcurre cuando la entidad padre ha completado su procesamiento y está por salir de la estación de proceso.
Parent ExitedOcurre cuando una entidad padre ha salido del objeto.
Member ExitedOcurre cuando una entidad miembro ha salido del objeto.
FailedOcurre cuando este objeto ha fallado.
RepairedOcurre cuando este objeto ha sido reparado.
Evaluating Seize RequestOcurre cuando el objeto está determinando si aceptará o no la solicitud de capacidad por parte de la entidad. Para rechazar se debe asignar un valor negativo al *ReturnValue* del Token.
On ShiftOcurre cuando el objeto está al inicio de un turno definido en su *Work Schedule.*
Off ShiftOcurre cuando el objeto está al término de un turno definido en su *Work Schedule.*
#### # Resource # Vehicle # Worker # BasicNode # TransferNode # Connector ![StandardLibraryMenu_Connector.png](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/scaled-840-0/3F5yzLltjF2ntfjs-StandardLibraryMenu_Connector.png)
Objeto**Connector**
Función**Enlazar nodos**
Clase**Link**
Process Triggers**-**
Asignación de estados**-**
Este objeto es el más simple de los de clase *Link* o de enlace. Representa una conexión instantánea entre dos nodos (distancia 0). A diferencia de los otros objetos de esta clase, las entidades nunca entran en un Connector sino que se realiza una transferencia directa desde el nodo de origen o inicio al nodo de término o destino. Además, las entidades utilizan este objeto de una en una, las entidades que desean utilizar el Connector entran a una cola, de la que son removidas en la medida que este se encuentre disponible. Debido a que este es el enlace más sencillo, solo tiene la propiedad **Selection Weight** que puede ser utilizada por las entidades para escoger qué enlace utilizar al salir de un nodo. #### Cómo utilizarlos ![StandardLibraryGIF_UsingLinks.gif](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/8C6DShAwSfAU4Btn-StandardLibraryGIF_UsingLinks.gif) Este objeto se utiliza igual que los otros de la clase Link, debes seleccionarlos en la librería, hacer click en el nodo de origen y luego en el nodo de destino. ![StandardLibraryGIF_Connector.gif](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/y5dyFyE2cCJ7Zhqv-StandardLibraryGIF_Connector.gif) ![StandardLibraryFacility_Connector.png](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/scaled-840-0/EB9VavRgWV1zv24l-StandardLibraryFacility_Connector.png) Objeto Connector uniendo dos nodos en vista Facility (2D) #### Propiedades
**Propiedad****Tipo****Descripción**
Selection WeightExpressionExpresión utilizada para definir la ponderación o peso que tiene este objeto a la hora de escoger un enlace al salir de un nodo. Ejemplo: Un enlace con el doble de peso que otro, tiene el doble de probabilidades de ser escogido. Si este valor es 0, las entidades nunca escogen el enlace, a menos que estén obligadas a hacerlo (Ejemplo: todos los pesos tienen 0 o solo hay un camino). **Puede ser una expresión lógica: Verdadero = 1, Falso = 0.**
# Path [![StandardLibraryMenu_Path.png](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/scaled-840-0/3u58tOOXZprQqq8B-StandardLibraryMenu_Path.png)](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/3u58tOOXZprQqq8B-StandardLibraryMenu_Path.png)
Objeto**Path**
Función**Enlazar nodos**
Clase**Link**
Process Triggers**Run Initialized, Run Ending, Entered, Trailing Edge Entered, Reached End, Exited**
Asignación de estados**On Entering, Before Entering**
El objeto Path permite definir una vía entre dos nodos en la cual el tiempo de viaje está determinado por la longitud del Path y la velocidad de la entidad que viaja a través de él. Este objeto permite representar elementos como caminos, carreteras, o simplemente facilitar la conexión de los distintos elementos del modelo. La vista Facility de Simio permite crear los modelos a escala. Debido a esto, el objeto Path por defecto detecta la longitud en base a la distancia que cubre en la vista Facility. Si se desea especificar la longitud de forma manual se deben utilizar las propiedades **Drawn To Scale** y **Logical Length.** Si se desea limitar la cantidad de entidades que pueden utilizar el Path en un determinado instante, se puede utilizar la propiedad **Initial Traveler Capacity*.*** Al igual que los otros objetos de la clase Link, este objeto tiene la propiedad **Selection Weight.** Esta propiedad puede ser utilizada por las entidades para escoger qué enlace utilizar al salir de un nodo. #### Tipos - **Unidireccional** (*Unidirectional*): Las entidades pueden moverse solamente en una dirección. - **Bidireccional** (*Bidirectional*): Las entidades pueden moverse en ambas direcciones. Sin embargo, solo puede haber flujo en una dirección a la vez, debido a esto existen posibilidades de que las entidades se bloqueen mutuamente. Si se desea tener flujos simultáneos en direcciones opuestas, se deberá usar dos objetos Path de tipo unidireccional, uno para cada sentido. #### Cómo utilizarlos [![StandardLibraryGIF_UsingLinks.gif](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/8C6DShAwSfAU4Btn-StandardLibraryGIF_UsingLinks.gif)](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/8C6DShAwSfAU4Btn-StandardLibraryGIF_UsingLinks.gif) {{@16#bkmrk-este-objeto-se-utili}} [![StandardLibraryGIF_Path.gif](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/2RCzWDzzTN8Avub1-StandardLibraryGIF_Path.gif)](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/2RCzWDzzTN8Avub1-StandardLibraryGIF_Path.gif) [![StandardLibraryFacility_Path.png](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/scaled-840-0/WHlzspuIeMe4YdSN-StandardLibraryFacility_Path.png)](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/WHlzspuIeMe4YdSN-StandardLibraryFacility_Path.png) Dos objetos Path en vista Facility (2D) #### Algunas propiedades
**Propiedad****Tipo****Descripción**
TypeListEl sentido del tráfico por este objeto. Puede ser unidireccional o bidireccional.
Initial Traveler CapacityExpressionLa cantidad inicial de entidades que pueden ocupar simultáneamente este objeto.
Drawn To ScaleBooleanEspecifica si se debe usar la longitud del objeto en la vista Facility para la lógica de la simulación. Si este valor es *False*, se debe especificar también la propiedad *Logical Length.*
Logical LengthDoubleLongitud del enlace cuando no se utiliza la escala de la vista Facility.
Allow PassingBooleanIndica si las entidades pueden adelantarse entre ellas cuando sus velocidades difieren.
Speed LimitDoubleVelocidad máxima a la que pueden viajar las entidades al utilizar este objeto.
Selection WeightExpressionExpresión utilizada para definir la ponderación o peso que tiene este objeto a la hora de escoger un enlace al salir de un nodo. Ejemplo: Un enlace con el doble de peso que otro, tiene el doble de probabilidades de ser escogido. Si este valor es 0, las entidades nunca escogen el enlace, a menos que estén obligadas a hacerlo (Ejemplo: todos los pesos tienen 0 o solo hay un camino). **Puede ser una expresión lógica: Verdadero = 1, Falso = 0.**
#### Add-On Process Triggers
**Trigger****Descripción**
Run InitializedOcurre cuando la simulación es iniciada.
Run EndingOcurre cuando la simulación está terminando.
EnteredOcurre cuando una entidad (su parte frontal) entra en este objeto.
Trailing Edge EnteredOcurre cuando la parte trasera de una entidad entra a este objeto.
Reached EndOcurre cuando una entidad (su parte frontal) ha alcanzado el final de este objeto.
ExitedOcurre cuando una entidad ha dejado el objeto.
# TimePath # Conveyor # Expresiones # Expressions y el Expression Editor ### Expresiones en Simio Al igual que en los lenguajes de programación, una *Expression* (expresión) en Simio es una combinación de una o más constantes, variables, operadores y funciones que son interpretadas (evaluadas) para generar un valor de retorno. (Fuente: [Wikipedia](https://en.wikipedia.org/wiki/Expression_(computer_science))) En Simio, la creación de expresiones se realiza por medio del *Expression Editor* o editor de expresiones. Este se encuentra en la ventana de propiedades para distintas propiedades que acepten este tipo de valor. Para abrirlo basta con seleccionar la propiedad que se desea editar y luego hacer click en el botón ubicado en el extremo derecho en forma de flecha hacia abajo (![ExpressionEditorIcon.png](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/scaled-840-0/IJwcAwyn4CMUq5Yd-ExpressionEditorIcon.png)). ![ExpressionExample.gif](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/pgIAY2Kk7UTukK63-ExpressionExample.gif) Utilizando el *Expression Editor o* editor de expresiones para definir una [distribución de probabilidad](https://simulemos.cl/books/simio/page/distribuciones-de-probabilidad "Distribuciones de probabilidad"). Por medio de las expresiones y con la ayuda del editor de expresiones, se pueden definir distribuciones de probabilidad, realizar operaciones matemáticas, acceder a propiedades y estados de objetos, llamar a las funciones incluidas de Simio, acceder a la hora en el reloj de la simulación, entre muchas otras. La sintaxis utilizada le será familiar a aquellos que hayan programado en lenguajes de programación tradicionales como Java. #### Algunas constantes o palabras reservadas
**Nombre****Descripción**
TrueValor boolean que representa el valor de verdad *verdadero.* Tiene un valor numérico equivalente a 1.
FalseValor boolean que representa el valor de verdad *falso.* Tiene un valor numérico equivalente a 0.
InfinityRepresenta un valor numérico de infinito.
NothingSimilar a el null de algunos lenguajes de programación. Representa una referencia nula.
ParentObjectRepresenta una referencia al objeto padre que contiene a la expresión.
IsIs seguido del nombre de la definición de un objeto retorna *True* si el objeto sobre el cual se invoca este método es una instancia de dicha definición. Ej: MiServidor.Is.Server == True
TimeNowRetorna el reloj de la simulación, en horas.
#### Operadores matemáticos y lógicos
**Operador****Descripción**
==Igual a
>Mayor que
<Menor que
>=Mayor o igual que
<=Menor o igual que
&&Y (*and)*
||O (*or*)
!No (*not*). Invierte el resultado de una expresión lógica.
!=Distinto a
+Adición
-Sustracción
\*Multiplicación
/División
^Potencia (elevado a) (2^3 == 8)
# Distribuciones de probabilidad ### Random.Distribución Simio soporta varias distribuciones de probabilidad para la generación de números aleatorios. Estas se utilizan de la forma ***Random.Distribución(Parámetros)*** ![ExpressionsRandom.png](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/scaled-840-0/BI9PEGNLxoh3Ofmy-ExpressionsRandom.png) [Editor de expresiones](https://simulemos.cl/books/simio/page/expressions-y-el-expression-editor "Expressions y el Expression Editor") mostrando la lista de distribuciones implementadas en Simio. #### Distribuciones y sus parámetros A continuación se definen las distribuciones implementadas en Simio con sus parámetros.
**Distribución****Función y parámetros****Descripción**
BernoulliRandom.Bernoulli(**probabilidadDeÉxito**)Esta distribución retorna un valor 0 o 1. El parámetro es la probabilidad de obtener 1.
BetaRandom.Beta(**alpha1**, **alpha2**)Distribución con rango 0 a 1 cuya forma depende de sus parámetros de forma **alpha1** y **alpha2.**
BinomialRandom.Binomial(**probabilidadDeÉxito**, **númeroDePruebas**)Distribución que representa el número de éxitos en una cantidad especificada de pruebas.
ContinuaRandom.Continuous(**v1**, **c1**, **v2**, **c2**, ..., **vn**, **cn**)Distribución empírica definida por un conjunto de pares de la forma (**vi**, **ci**) correspondiente a un valor y su probabilidad acumulada. Devuelve un número real ubicado entre 0 y **vn**. Esta distribución tiene implícito un **v0** igual a 0, si se desea que los valores partan en **v1** se debe especificar **c1** como 0. Ejemplo: Random.Continuous(1, 0.2, 2, 0.5, 3, 1) devuelve cualquier valor real entre 0 y 3.
DiscretaRandom.Discrete(**v1**, **c1**, **v2**, **c2**, ..., **vn**, **cn**)Distribución empírica definida por un conjunto de pares de la forma (**vi**, **ci**) correspondiente a un valor y su probabilidad acumulada. Devuelve solamente uno de los **n** valores definidos. Ejemplo: Random.Discrete(1, 0.2, 2, 0.5, 3, 1) devuelve solo los valores 1, 2 o 3, con un 20%, 30% y 50% de probabilidad, respectivamente.
ErlangRandom.Erlang(**media**, **k**)Distribución que modela un proceso de n-fases en el que el tiempo para cada fase está distribuido de forma exponencial. Los parámetros corresponden a la **media** y el número de fases (**k**).
ExponencialRandom.Exponential(**media**)Distribución utilizada normalmente para modelar el tiempo entre llegadas. Recibe como parámetro la **media** de la distribución.
GammaRandom.Gamma(**alpha**, **beta**)Distribución que recibe un parámetro de forma (**alpha**) y otro de escala (**beta**). La media es el producto de estos parámetros.
GeométricaRandom.Geometric(**probabilidadDeÉxito**)Distribución discreta que representa el número de fallas antes del primer éxito. El parámetro representa la probabilidad de éxito para cada prueba independiente.
JohnsonSBRandom.JohnsonSB(**alpha1**, **alpha2**, **mínimo**, **máximo**)Distribución acotada cuya forma depende de sus dos parámetros de forma (**alpha1**, **alpha2**), el **mínimo** y el **máximo**.
JohnsonSURandom.JohnsonSU(**alpha1**, **alpha2**, **ubicación**, **escala**)Distribución no acotada cuya forma depende de sus dos parámetros de forma (**alpha1**, **alpha2**), el parámetro de **ubicación** y el parámetro de **escala**.
LogLogisticRandom.LogLogistic(**forma**, **escala**)Distribución con un parámetro de **forma** y uno de **escala**, ambos deben ser no negativos. Tiene un rango de 0 a infinito.
LognormalRandom.Lognormal(**media, desviaciónEstándar**)Distribución continua en la que el logaritmo de una variable tiene una distribución normal. Sus parámetros son la **media** y la **desviación estándar**.
Binomial NegativaRandom.NegativeBinomial( **probabilidadDeÉxito**, **númeroDeÉxitos**)Distribución discreta que representa el número de fallas antes de alcanzar el número especificado de éxitos. Los parámetros son la probabilidad de éxito para cada prueba y el número requerido de éxitos.
NormalRandom.Normal(**media, desviaciónEstándar**)Sus parámetros son la **media** y la **desviación estándar**.
Pearson tipo VIRandom.PearsonVI(**formaA**, **formaB**, **escala**)Distribución con dos parámetros de forma (**formaA**, **formaB**) y uno de escala (**escala**). Todos los parámetros deben ser no negativos. El rango es de 0 a infinito.
PertRandom.Pert(**mínimo**, **moda**, **máximo**)Caso especial de la distribución Beta en la que los parámetros de forma son calculados a partir del **mínimo**, la **moda** y el **máximo**.
PoissonRandom.Poisson(**media**)Distribución discreta que modela el número de eventos en un intervalo de tiempo en el cual estos están ocurriendo a una tasa constante según un proceso Poisson. El tiempo entre eventos está distribuido de forma exponencial y el número de eventos en un tiempo determinado esta Poisson-distribuido. El parámetro es la tasa de eventos por unidad de tiempo, debe ser no negativa.
TriangularRandom.Triangular(**mínimo**, **moda**, **máximo**)Distribución que tiene parámetros para definir el **mínimo**, la **moda** o valor más probable y el **máximo**.
UniformeRandom.Uniform(**mínimo**, **máximo**)Distribución cuyos parámetros definen el valor **mínimo** y **máximo**. Todos los valores dentro del rango son equiprobables.
WeibullRandom.Weibull(**forma**, **escala**)Distribución con parámetros de **forma** y **escala** cuyo rango va de 0 a infinito.
# Funciones matemáticas ### Math.Función Simio incorpora una serie de funciones matemáticas. Estas se utilizan de la forma **Math.Función(Parámetros)** [![ExpressionsMath.png](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/scaled-840-0/5Pa3lab9NjWBiTk9-ExpressionsMath.png)](https://simulemos.cl/uploads/images/gallery/2019-04-Apr/5Pa3lab9NjWBiTk9-ExpressionsMath.png) [Editor de expresiones](https://simulemos.cl/books/simio/page/expressions-y-el-expression-editor "Expressions y el Expression Editor") mostrando las funciones matemáticas incluidas en Simio. #### Funciones y sus parámetros Constantes y parámetros destacados en **negrita.**
**Nombre****Función y parámetros****Descripción**
Valor absolutoMath.Abs(**valor**)Retorna el valor absoluto del **valor** especificado. El valor absoluto de un número es su magnitud sin signo.
ArcocosenoMath.Acos(**valor**)Retorna el arcocoseno del **valor** especificado (en radianes).
ArcosenoMath.Asin(**valor**)Retorna el arcoseno del **valor** especificado (en radianes).
ArcotangenteMath.Atan(**valor**)Retorna el arcotangente del **valor** especificado (en radianes).
TechoMath.Ceiling(**valor**)Retorna el entero más pequeño pero no menor que el **valor** especificado.
CosenoMath.Cos(**valor**)Retorna el coseno del **valor** especificado (en radianes).
**e**Math.ERetorna la base del logaritmo natural. Constante matemática **e**.
**Epsilon**Math.EpsilonRepresenta el número real más pequeño (representable) mayor que cero.
ExponencialMath.Exp(**valor**)Retorna el resultado de elevar la constante **e** al **valor** especificado.
PisoMath.Floor(**valor**)Retorna el entero más grande pero no mayor al **valor** especificado.
SiMath.If(**condición1**, **valor1**, **condición2**, **valor2**, ..., **condiciónN**, **valorN**, **valorSino**)Retorna el n-avo valor asociado a la primera condición especificada que sea evaluada a *True,* si ninguna condición se cumple, retorna el **valorSino**. Ejemplo: Math.If(1==2, 1, 2==2, 3, 4) retorna 3.
¿Es NaN?Math.IsNaN(**valor**)Retorna *True* si el **valor** es **NaN**, *False* si no lo es.
Logaritmo NaturalMath.Log(**valor**)Retorna el logaritmo natural del **valor** especificado.
Logaritmo (en base 10)Math.Log10(**valor**)Retorna el logaritmo en base 10 del **valor** especificado.
MáximoMath.Max(**valor1**, **valor2**, ..., **valorN**)Retorna el valor máximo entre los especificados.
MínimoMath.Min(**valor1**, **valor2**, ..., **valorN**)Retorna el valor mínimo entre los especificados.
**NaN**Math.NaNUn valor indefinido o irrepresentable.
**π** (pi)Math.PIRetorna la relación entre la circunferencia de un círculo y su diámetro. Constante matemática **π*.***
PotenciaMath.Pow(**base**, **exponente**)Retorna el resultado de la **base** elevada al **exponente**.
Resto o residuoMath.Remainder(**dividendo**, **divisor**)Retorna el resto o residuo de la división entre el **dividendo** y el **divisor**.
RedondearMath.Round(**valor**, \[, **dígitos**\])Parámetro opcional: **dígitos** decimales. Retorna el **valor** redondeado (por defecto al entero más cercano).
SenoMath.Sin(**valor**)Retorna el seno del **valor** especificado (en radianes).
Raíz CuadradaMath.Sqrt(**valor**)Retorna la raíz cuadrada del **valor** especificado.
Suma de muestra aleatoriaMath.SumOfSamples(**expresión**, **n**)Muestrea **n** veces, de forma independiente, la **expresión** aleatoria especificada y retorna la suma de los valores obtenidos.
TangenteMath.Tan(**valor**)Retorna la tangente del **valor** especificado (en radianes).
# Processes # Process ### Definición Un Process (proceso), en Simio, es una secuencia de acciones que pueden o no tomar tiempo y modificar el estado del modelo. Un Process está compuesto por Steps y Tokens. Los procesos se pueden utilizar para personalizar el comportamiento de los objetos de la Standard Library. Un proceso puede ser activado o desactivado asignando un 1 o un 0 al State **MiProceso.Enabled**. Si un Process se encuentra desactivado, cualquier intento de ejecutarlo será ignorado. Si la desactivación se realiza mientras existan instancias del Process en ejecución, estas terminarán normalmente. ![ejemploprocess.PNG](https://simulemos.cl/uploads/images/gallery/2019-05-May/scaled-840-0/69WUOudOLi4eH14m-ejemploprocess.PNG)Ejemplo de un Process en Simio. ### Clasificación #### Standard Processes Estos procesos son ejecutados por Simio en puntos específicos de la corrida del modelo, muchas veces como respuesta a eventos internos del software. ![standardcreated.PNG](https://simulemos.cl/uploads/images/gallery/2019-05-May/scaled-840-0/Um8cIHQ6Wm61MgQ0-standardcreated.PNG) Algunos procesos estándar son: - **OnRunInitialized:** Este Process es ejecutado cuando el objeto o modelo es inicializado. - **OnCapacityChanged:** Este Process es ejecutado cuando la capacidad del recurso ha cambiado. - **OnRunEnding:** Este Process es ejecutado cuando el modelo está terminando de correr ya sea por presionar Reset o Stop (en modo interactivo) o porque se alcanzó la condición de término (modo interactivo o de experimentos. Las opciones disponibles dependerán del objeto en el que se esté trabajando. Para definir un Process de este tipo se puede usar el botón *Select Process.* *![standardcreate.PNG](https://simulemos.cl/uploads/images/gallery/2019-05-May/scaled-840-0/r9pJ6k968uveQlgH-standardcreate.PNG)* #### Decision Processes Estos procesos son un tipo especial de Standard Process. Son utilizados por algunos objetos para obtener un valor utilizado en la toma de una decisión. **No pueden tomar tiempo (contener Delays).** - **OnEvaluatingSeizeRequest**: Utilizado para determinar si el recurso será o no entregado al objeto que lo está solicitando. #### Add-on Processes Los objetos de la Standard Library vienen con una serie de propiedades que permiten asignarle un Process creado por el usuario, para que este sea ejecutado en puntos determinados de la lógica del objeto. Por ejemplo: un objeto Server puede ejecutar un Process cuando va a comenzar el procesamiento de una entidad. # Token as # Common Steps ## Assign ![assign.PNG](https://simulemos.cl/uploads/images/gallery/2019-06-Jun/doQJfszSxJJtvaMd-assign.PNG) Este Step se utiliza para asignar nuevos valores a variables de tipo State. Se puede actualizar el valor de múltiples States en un mismo Assign utilizando la propiedad *Assignments (More).* Las asignaciones definidas en *Assignments (More)* podrán estar sujetas a condiciones definidas en la propiedad *Skip Assignment If.* #### Propiedades
State Variable NameEl nombre del State al que se le asignará un nuevo valor.
New ValueNuevo valor a asignar.
Assignments (More)Permite asignar a más de un State al mismo tiempo.
Assignments (More) >> State Variable NameEl nombre del State al que se le asignará un nuevo valor.
Assignments (More) >> New ValueNuevo valor a asignar.
Assignments (More) >> Skip Assignment IfCondición opcional que deberá retornar verdadero si se desea evitar la asignación.
## Create ![create.PNG](https://simulemos.cl/uploads/images/gallery/2019-06-Jun/scaled-840-0/CeQPO5qbowqs0xxi-create.PNG) Este Step puede ser utilizado para: crear nuevas entidades de un determinado tipo, crear copias de entidades existentes o para crear nuevos Tokens con referencias a objetos existentes. Los Tokens asociados con el objeto creado o referenciado saldrán por el punto de salida **Created***.* # Step ### Definición Los Steps (pasos) son las acciones que se realizan en un Process y permiten definir lógica más compleja que la incluida en los objetos por defecto. [![ejemploprocess.PNG](https://simulemos.cl/uploads/images/gallery/2019-05-May/scaled-840-0/69WUOudOLi4eH14m-ejemploprocess.PNG)](https://simulemos.cl/uploads/images/gallery/2019-05-May/69WUOudOLi4eH14m-ejemploprocess.PNG)Ejemplo de un Process en Simio. En la imagen se pueden ver los Steps: *Decide*, *Delay* y *SetNode* #### Puntos de Salida Existen Steps que tienen más de un punto de salida *(exit point).* Algunos de estos son: *Create,* *Find* y *Decide*. ![create.PNG](https://simulemos.cl/uploads/images/gallery/2019-06-Jun/scaled-840-0/Sr5X5xMJBm5tFXtf-create.PNG)![find.PNG](https://simulemos.cl/uploads/images/gallery/2019-06-Jun/scaled-840-0/t68jsovtfOLgGeNE-find.PNG) Los Steps pueden usar todos sus puntos de salidas, o estos pueden ser excluyentes. Por ejemplo: el Step *Find* solo utilizará uno de sus puntos de salida dependiendo de si pudo o no encontrar el elemento que se estaba buscando. El Step *Create* puede utilizar ambos de forma simultánea, esto se ejemplifica a continuación. [![exitpoints.PNG](https://simulemos.cl/uploads/images/gallery/2019-06-Jun/scaled-840-0/SMrP4YGtr0zQLhrN-exitpoints.PNG)](https://simulemos.cl/uploads/images/gallery/2019-06-Jun/SMrP4YGtr0zQLhrN-exitpoints.PNG) En el ejemplo se representa un modelo simplificado del procesamiento del pedido de un cliente. En este se crea una orden de trabajo, se le asignan valores, y se transfiere al área de producción, finalmente, el Token original sale del *Create* y va al *Tally* que registra las cotizaciones que son aceptadas. # Ejemplos # Escogiendo la cola más corta [![Descargar](https://simulemos.cl/uploads/images/gallery/2019-09/scaled-1680-/7KrHGQ0dYonHyXAl-ProjectFileIcon.png)](https://simulemos.cl/attachments/1) [Descargar ejemplo](https://simulemos.cl/attachments/1) El modelo está compuesto por: - 1 [Source](https://simulemos.cl/books/simio/page/source "Source") (Llegada) - 2 [Servers](https://simulemos.cl/books/simio/page/server "Server") (Norte, Sur) - 1 [Sink](https://simulemos.cl/books/simio/page/sink "Sink") (Salida) - [Connectors](https://simulemos.cl/books/simio/page/connector "Connector") y [Paths](https://simulemos.cl/books/simio/page/path "Path") **Objetivo**: Hacer que las entidades, al llegar, tomen el camino hacia el servidor con la cola más corta en ese instante. **Supuestos:** Las entidades no se pueden cambiar de cola. En caso de empate la elección es al azar. ![ColaMásCorta.PNG](https://simulemos.cl/uploads/images/gallery/2019-09/scaled-1680-/L4N0BqKYFCBwwehp-ColaM%C3%A1sCorta.PNG) Modelo de ejemplo La solución está en los enlaces entre el Source y los Servers. Para entenderla debes leer las propiedades **Selection Weight** de los objetos [Connector](https://simulemos.cl/books/simio/page/connector "Connector") o [Path](https://simulemos.cl/books/simio/page/path "Path"), y la página sobre [cuántos objetos hay en una cola](https://simulemos.cl/books/simio/page/%C2%BFcu%C3%A1ntos-objetos-hay-en-una-cola "¿Cuántos objetos hay en una cola?"). Nótese que cuando las colas sean iguales, los pesos serán iguales a 0, en este caso Simio escogerá uno al azar. # Escribiendo a Excel Simio permite la definición de estadísticas o expresiones de salida que son evaluadas al terminar la simulación, sin embargo, a veces resulta necesario exportar datos durante la simulación para su análisis posterior. Por ejemplo: para utilizar el método de Welch. Existen varias formas de resolver este problema, para los modelos más avanzados lo recomendable es utilizar una base de datos. En el video a continuación, te presentamos una forma para exportar datos a Excel, directamente desde Simio. VIDEO En resumen: 1. Ir a Definitions -> Elements -> User Defined -> ExcelConnect 2. Configurar la propiedad "Excel Workbook" y definir la ubicación del archivo Excel. 3. Definir un State de tipo Integer con valor inicial 1, para guardar la última fila escrita. 4. Insertar el Step ExcelWrite en el Process que corresponda. 5. Asignar a la propiedad ExcelConnect, el elemento definido en los pasos 1 y 2. 6. Asignar a la propiedad Worksheet, el nombre de la hoja en la cual se escribirán los resultados. Si el archivo es nuevo, este suele ser Hoja1 o Sheet1, dependiendo del idioma de Excel. 7. Asignar a la propiedad Row, el State definido en el paso 3. 8. Asignar en Items los valores que se escribirán. 9. Agregar en Items la Expression **Run.ScenarioName** 10. Agregar en Items la Expression **Run.ReplicationNumber** 11. Insertar un Step Assign que incremente en 1 el State definido en el paso 3. Para utilizar la herramienta que une los documentos (requiere Java): 1. Crear una nueva carpeta 2. Copiar la herramienta ape.jar 3. Copiar todos los documentos generados por el modo de experimentos. (Solo los que terminan en \_RepX.xlsx) 4. Ejecutar ape.jar No olvidar: - Al definir la propiedad "Excel Workbook" del Element "ExcelConnect", los "\\" deben ir dobles. Ejemplo: C:\\\\ # Simbit: Reposición de inventarios ![image.png](https://simulemos.cl/uploads/images/gallery/2024-06/scaled-1680-/VlFbxtEXMaKH3NWr-image.png) ![Descargar](https://simulemos.cl/uploads/images/gallery/2019-09/scaled-1680-/7KrHGQ0dYonHyXAl-ProjectFileIcon.png) [ Politicas de reposicion de inventario.pdf ](https://simulemos.cl/attachments/3)[Politicas de reposicion de inventario.spfx](https://simulemos.cl/attachments/4) En el presente SimBit se incluyen tres modelos que demuestran el uso de políticas de reposición de inventario para periodos de revisión tanto 'continuos' como 'periódicos'. Cada modelo está compuesto por: - [2 Source](https://simulemos.cl/books/simio/page/source "Source") (BurgerSource, HotdogSource) - 2 [Servers](https://simulemos.cl/books/simio/page/server "Server") (BurgerServer, HotdogServer) - 2 [Sink](https://simulemos.cl/books/simio/page/sink "Sink") (BurgerSink, HotdogSink) - [Paths](https://simulemos.cl/books/simio/page/path "Path") **Modelo 1: PuntoDeReordenCantidadDeReorden.** **Objetivo**: Muestra cómo crear una política de reposición de inventario incorporando un punto de reorden y una cantidad de reorden. Cuando el inventario cae al punto de reorden o por debajo, entonces se repone el inventario con la cantidad especificada. **Supuestos:** Para un Período de Revisión Continua, el inventario se repone instantáneamente. **Modelo 2: OrderUpTo.** **Objetivo: **Muestra cómo crear una política de reposición de inventario hasta alcanzar un nivel máximo. Cuando el inventario cae por debajo del nivel máximo, entonces se repone el inventario hasta ese nivel.** Supuestos: **Para un Período de Revisión Continua, el inventario se repone instantáneamente. **Modelo 3: MinMax.** **Objetivo**: Muestra cómo crear una política de reposición de inventario incorporando un punto de reorden y un nivel máximo. Cuando el inventario cae bajo al punto de reorden, entonces se repone el inventario hasta el nivel máximo. **Supuestos:** Para un Período de Revisión Continua, el inventario se repone instantáneamente. [![image.png](https://simulemos.cl/uploads/images/gallery/2024-06/scaled-1680-/pgsVPdQQefvQmvM3-image.png)](https://simulemos.cl/uploads/images/gallery/2024-06/pgsVPdQQefvQmvM3-image.png) Imagen: Ejemplo del modelo para una política de "**PuntoDeReordenCantidadDeReorden.**" La solución se encuentra en la aplicación de los Elements "Material" e "Inventory" disponibles en el apartado de Definitions. Estas permiten definir los materiales a utilizar y sus ubicaciones correspondientes, para que así estas puedan ser consumidas a la hora de que se ejecuten los procesos. Para cada modelo se estableció que el inventario "HotdogInventory" se trabaje bajo revision continua y "BurgerInventory" bajo revisión periódica. # Simbit: Servidor con consumo de materiales ![image.png](https://simulemos.cl/uploads/images/gallery/2024-06/scaled-1680-/VlFbxtEXMaKH3NWr-image.png) ![Descargar](https://simulemos.cl/uploads/images/gallery/2019-09/scaled-1680-/7KrHGQ0dYonHyXAl-ProjectFileIcon.png) [Servidor con Consumo de Materiales.pdf ](https://simulemos.cl/attachments/7)[Servidor con Consumo de Materiales.spfx](https://simulemos.cl/attachments/8) Los dos modelos están compuestos por: - 1 [Source ](https://simulemos.cl/books/simio/page/source "Source")(Source1) - 1 [Server ](https://simulemos.cl/books/simio/page/server "Server")(Server1) - 1 [Sink ](https://simulemos.cl/books/simio/page/sink "Sink")(Sink1) - [Connectors](https://simulemos.cl/books/simio/page/connector "Connector") **Modelo 1:** Servidor con consumo de material. **Objetivo:** Consumir distintos materiales para la producción de un nuevo material según su Bill Of Materials (BOM). **Modelo 2:** Servidor con consumo de material y reposición. **Objetivo:** Sumado al modelo anterior, se agrega la capacidad de reponer el inventario de materiales al bajar de un nivel determinado por el modelador. [![image.png](https://simulemos.cl/uploads/images/gallery/2024-06/scaled-1680-/Xn5dr8WRJ7PplD1t-image.png)](https://simulemos.cl/uploads/images/gallery/2024-06/Xn5dr8WRJ7PplD1t-image.png) Ejemplo: Modelo 2, **Servidor con consumo de material y reposición**. La solución se encuentra en la aplicación del Elements "Material" disponible en el apartado de Definitions. Este permite definir los materiales a utilizar y sus cantidades para la fabricación de un Material compuesto. De este modo, se van consumiendo los distintos materiales para su fabricación. El segundo modelo agrega un proceso para la producción de los materiales necesarios para seguir operando con normalidad. # Simbit: Inventarios y materiales ![image.png](https://simulemos.cl/uploads/images/gallery/2024-06/scaled-1680-/VlFbxtEXMaKH3NWr-image.png) ![Descargar](https://simulemos.cl/uploads/images/gallery/2019-09/scaled-1680-/7KrHGQ0dYonHyXAl-ProjectFileIcon.png) [ Inventario Y Materiales.pdf](https://simulemos.cl/attachments/5)[ Inventario Y Materiales.spfx](https://simulemos.cl/attachments/6) El modelo está compuesto por: - [2 Source](https://simulemos.cl/books/simio/page/source "Source") (Src1, Src2) - 2 [Servers](https://simulemos.cl/books/simio/page/server "Server") (Servidor1, Servidor2) - 1 [Sink](https://simulemos.cl/books/simio/page/sink "Sink") (Snk) - 1 [Combiner](https://simulemos.cl/books/simio/page/combiner) (Combiner1) - [Paths](https://simulemos.cl/books/simio/page/path "Path") **Objetivo**: Permitir representar un sistema que consume distintos materiales, los cuales están ubicados en distintas ubicaciones a lo largo del sistema. **Supuestos:** Todos los inventarios están ubicados en el objeto en el que se realiza el consumo. [![image.png](https://simulemos.cl/uploads/images/gallery/2024-06/scaled-1680-/FQLXSgwv1qTwdHgF-image.png)](https://simulemos.cl/uploads/images/gallery/2024-06/FQLXSgwv1qTwdHgF-image.png) **Modelo de ejemplo** La solución se encuentra en la aplicación de los Elements "Material" e "Inventory" de la pestaña Supply, disponibles en el apartado de Definitions. Estas permiten definir los materiales a utilizar y sus ubicaciones correspondientes, para que así estas puedan ser consumidas a la hora de que se ejecuten los procesos. Nótese que cuando se consumen los materiales disponibles en las ubicaciones que hay estas no se reponen. Se recomienda revisar los ejemplos de "Servidor con consumo de materiales" y "Reposición de inventarios". # Preguntas/Problemas Frecuentes # ¿Qué hacer si se están generando muchas entidades? Muchas veces, la existencia de un gran número de entidades está asociada a un error en la lógica del modelo. A continuación, te presentamos algunas cosas que puedes revisar para identificar y corregir el problema. ![entidades.PNG](https://simulemos.cl/uploads/images/gallery/2019-08/scaled-1680-/dSoeWYTIsYhZmOtL-entidades.PNG) Mensaje que avisa que se ha superado el límite de entidades activas de un determinado tipo, en este caso *DefaultEntity*. #### Qué elementos del modelo puedes revisar - Source: Ver si la distribución del tiempo entre llegadas está definida correctamente y con las unidades correspondientes. - Servers, Combiners, Separators: Ver si la capacidad del servidor es suficiente, y que el tiempo de proceso esté definido correctamente y con las unidades correspondientes. Si utilizan algún recurso (como Worker), verificar que la capacidad esté correcta. - Nodos de salida: Si estás utilizando una tabla de secuencia, verifica que el Sink esté en la tabla y que los nodos tengan el *Entity Destination Type* como *By Sequence*. - Process: Si utilizas el Step *Seize *para tomar posesión de un recurso, verifica que tu modelo libere correctamente el recurso, por ejemplo: utilizando el Step *Release*. #### ¿Y si el modelo requiere de más entidades? El mensaje es solo una advertencia. De hecho, al correr Experiments, Simio registrará la advertencia pero continuará corriendo hasta terminar. Si consideras que tu modelo requiere un gran número de entidades y quieres evitar la ventana de advertencia, puedes configurar el umbral de la advertencia en la propiedad *Population > Maximum Number in System Limit,* de las entidades. Pero cuidado, a mayor número de entidades activas, mayor será la cantidad de recursos computacionales que requerirá Simio (el modelo se hará más pesado). # ¿Cuántos objetos hay en una cola? Las colas de los objetos de la Standard Library (Server, Separator, etc) corresponden a Stations. Para obtener la cantidad de elementos en un Station se debe utilizar la Expression *Objeto.Station.**Contents.NumberWaiting**.* Por ejemplo, el número de entidades esperando en el InputBuffer de un Server se obtiene utilizando la Expression: *MiServer.InputBuffer.Contents.NumberWaiting* En modelos más avanzados la cola puede corresponder a un Storage. En este caso se debe utilizar la Expression *Objeto.Storage.**Queue.NumberWaiting*****.**