Simio Bienvenida ¡Hola! Esta sección busca recopilar información sobre  Simio , el software de simulación. Fue creada para apoyar a los cursos de Simulación de la Escuela de Ingeniería Industrial de la Pontificia Universidad Católica de Valparaíso , 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í 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 (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  (en español): Videotutoriales sobre lo esencial de Simio. Simio Reference Guide (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 simula.eii@gmail.com . Pontificia Universidad Católica de Valparaíso uses Simio  simulation software under a grant from Simio LLC www.simio.com 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 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 ).   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. Objeto Source visto en vista Facility (2D) Algunas propiedades Propiedad Tipo Descripción Entity Type (Tipo de entidad) Nombre de instancia de entidad El 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 Offset Expression Representa un tiempo a esperar antes de generar la primera llegada. Interarrival Time (Tiempo entre llegadas) Expression Intervalo de tiempo entre dos llegadas sucesivas. Esta propiedad suele ser especificada utilizando distribuciones de probabilidad. Ver 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 Entities Expression Nú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 Arrivals Expression (truncada a entero) Cantidad máxima de llegadas que generará este objeto. Maximum Time Expression Tiempo contado desde el inicio de la simulación hasta el cual el objeto dejará de generar llegadas. Stop Event Name Event Evento que al ser disparado hará que el Source deje de generar llegadas. Add-On Process Triggers Trigger Descripción Run Initialized Ocurre cuando la simulación es iniciada. Run Ending Ocurre cuando la simulación está terminando. Creating Entities Ocurre cuando el objeto está por crear una llegada. Created Entity Ocurre cuando una entidad ha sido creada por el objeto. Exited Ocurre cuando una entidad ha salido del objeto. Sink 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 en tidades 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). Objeto Sink visto en vista Facility (2D) Algunas propiedades Propiedad Tipo Descripción Transfer-In Time Expression Tiempo requerido para transferir una entidad a este objeto. On Entering Assignments Estados a asignar cuando una entidad entra en el objeto. (Opcional) Add-On Process Triggers Trigger Descripción Run Initialized Ocurre cuando la simulación es iniciada. Run Ending Ocurre cuando la simulación está terminando. Entered Ocurre cuando una entidad ha entrado al objeto y está por empezar el Transfer-In Time. Destroying Entity Ocurre cuando una entidad está a punto de ser destruida por el objeto. Server 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 ). 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 0 Disponible 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 Objeto Server visto en vista Facility (2D) Algunas propiedades Propiedad Tipo Descripción Capacity Type Fixed, Work Schedule Indica el tipo de capacidad del Server. Initial Capacity Expression Capacidad inicial del Server. Se evalúa al comenzar la simulación. Ranking Rule List Regla estática a utilizar para ordenar las entidades en espera. Ranking Expression Expression Valor utilizado por las reglas Smallest/Largest Value First para ordenar las entidades. Dynamic Selection Rule List Indica 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 Time Expression El tiempo requerido para transferir una entidad a este objeto. Processing Time Expression Tiempo requerido para procesar una entidad. Normalmente asignado con distribuciones de probabilidad. Off Shift Rule List Indica 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 Initialized Ocurre cuando la simulación es iniciada. Run Ending Ocurre cuando la simulación está terminando. Entered Ocurre cuando una entidad ha entrado al objeto y está por empezar el Transfer-In Time. Before Processing Ocurre cuando le ha sido asignada capacidad del Server a la entidad, pero aún no ingresa a la estación de proceso. Processing Ocurre cuando la entidad ha sido transferida a la estación de proceso y está a punto de comenzar su procesamiento. After Processing Ocurre cuando la entidad ha completado su procesamiento y está por salir de la estación de proceso. Exited Ocurre cuando una entidad ha salido del objeto. Failed Ocurre cuando este objeto ha fallado.  Repaired Ocurre cuando este objeto ha sido reparado. Evaluating Seize Request Ocurre 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 Shift Ocurre cuando el objeto está al inicio de un turno definido en su  Work Schedule. Off Shift Ocurre cuando el objeto está al término de un turno definido en su  Work Schedule. Combiner 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 p adre (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 . 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 ). Objeto Combiner visto en vista Facility (2D) Algunas propiedades Propiedad Tipo Descripción Batch Quantity Expression 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 Capacity Expression Capacidad 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 Time Expression Corresponde 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 Rule List Indica 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 Initialized Ocurre cuando la simulación es iniciada. Run Ending Ocurre cuando la simulación está terminando. Parent Entered Ocurre cuando una entidad padre ha entrado al objeto y está por empezar el Parent Transfer-In Time. Member Entered Ocurre cuando una entidad miembro ha entrado al objeto y está por empezar el Member Transfer-In Time. Before Processing Ocurre cuando le ha sido asignada capacidad del Combiner a la entidad padre pero esta aún no ingresa a la estación de proceso. Processing Ocurre cuando la entidad padre ha sido transferida a la estación de proceso y está a punto de comenzar su procesamiento. After Processing Ocurre cuando la entidad padre ha completado su procesamiento y está por salir de la estación de proceso. Exited Ocurre cuando una entidad padre y su batch han salido del objeto. Failed Ocurre cuando este objeto ha fallado.  Repaired Ocurre cuando este objeto ha sido reparado. Evaluating Seize Request Ocurre 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 Shift Ocurre cuando el objeto está al inicio de un turno definido en su  Work Schedule. Off Shift Ocurre cuando el objeto está al término de un turno definido en su  Work Schedule. Separator 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 ). 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 , 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 .   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 ). Objeto Separator visto en vista Facility (2D) Algunas propiedades Propiedad Tipo Descripción Separation Mode List Modo de operación. Ver arriba para más detalles. Desired Split Quantity Expression Número de entidades a extraer del batch. Removal Order List Orden en que se remueven las entidades del batch. LastBatchedFirst: LIFO FirstBatchedFirst: FIFO Copy Quantity Expression Número de copias a crear. Copy Entity Type Nombre de entidad Tipo de entidad a crear. New Entity Quantity Expression Número de entidades a crear. New Entity Type Nombre de entidad Tipo de entidad a crear. Initial Capacity Expression Capacidad 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 Time Expression Corresponde al tiempo que toma transferir una entidad al Separator. Off Shift Rule List Indica 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 Initialized Ocurre cuando la simulación es iniciada. Run Ending Ocurre cuando la simulación está terminando. Entered Ocurre cuando una entidad ha entrado al objeto y está por empezar el Transfer-In Time. Before Processing Ocurre cuando le ha sido asignada capacidad del Separator a la entidad pero esta aún no ingresa a la estación de proceso. Processing Ocurre cuando la entidad padre ha sido transferida a la estación de proceso y está a punto de comenzar su procesamiento. After Processing Ocurre cuando la entidad padre ha completado su procesamiento y está por salir de la estación de proceso. Parent Exited Ocurre cuando una entidad padre ha salido del objeto. Member Exited Ocurre cuando una entidad miembro ha salido del objeto. Failed Ocurre cuando este objeto ha fallado.  Repaired Ocurre cuando este objeto ha sido reparado. Evaluating Seize Request Ocurre 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 Shift Ocurre cuando el objeto está al inicio de un turno definido en su  Work Schedule. Off Shift Ocurre cuando el objeto está al término de un turno definido en su  Work Schedule. Connector 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 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.   Objeto Connector uniendo dos nodos en vista Facility (2D) Propiedades Propiedad Tipo Descripción Selection Weight Expression Expresió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 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 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. Dos objetos Path en vista Facility (2D) Algunas propiedades Propiedad Tipo Descripción Type List El sentido del tráfico por este objeto. Puede ser unidireccional o bidireccional. Initial Traveler Capacity Expression La cantidad inicial de entidades que pueden ocupar simultáneamente este objeto. Drawn To Scale Boolean Especifica 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 Length Double Longitud del enlace cuando no se utiliza la escala de la vista Facility. Allow Passing Boolean Indica si las entidades pueden adelantarse entre ellas cuando sus velocidades difieren. Speed Limit Double Velocidad máxima a la que pueden viajar las entidades al utilizar este objeto. Selection Weight Expression Expresió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 Initialized Ocurre cuando la simulación es iniciada. Run Ending Ocurre cuando la simulación está terminando. Entered Ocurre cuando una entidad (su parte frontal) entra en este objeto. Trailing Edge Entered Ocurre cuando la parte trasera de una entidad entra a este objeto. Reached End Ocurre cuando una entidad (su parte frontal) ha alcanzado el final de este objeto. Exited Ocurre cuando una entidad ha dejado el objeto. 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 ) 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 ( ). Utilizando el Expression Editor o editor de expresiones para definir una distribución 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 True Valor boolean que representa el valor de verdad verdadero.  Tiene un valor numérico equivalente a 1. False Valor boolean que representa el valor de verdad falso.  Tiene un valor numérico equivalente a 0. Infinity Representa un valor numérico de infinito. Nothing Similar a el null de algunos lenguajes de programación. Representa una referencia nula. ParentObject Representa una referencia al objeto padre que contiene a la expresión. Is Is 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 TimeNow Retorna 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) Editor de expresiones 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 Bernoulli Random.Bernoulli( probabilidadDeÉxito ) Esta distribución retorna un valor 0 o 1. El parámetro es la probabilidad de obtener 1.  Beta Random.Beta( alpha1 , alpha2 ) Distribución con rango 0 a 1 cuya forma depende de sus parámetros de forma alpha1 y alpha2. Binomial Random.Binomial( probabilidadDeÉxito , númeroDePruebas ) Distribución que representa el número de éxitos en una cantidad especificada de pruebas. Continua Random.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. Discreta Random.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. Erlang Random.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 ). Exponencial Random.Exponential( media ) Distribución utilizada normalmente para modelar el tiempo entre llegadas. Recibe como parámetro la media de la distribución. Gamma Random.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étrica Random.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. JohnsonSB Random.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 . JohnsonSU Random.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 . LogLogistic Random.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. Lognormal Random.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 Negativa Random.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. Normal Random.Normal( media , desviaciónEstándar ) Sus parámetros son la media y la desviación estándar . Pearson tipo VI Random.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. Pert Random.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 . Poisson Random.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. Triangular Random.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 . Uniforme Random.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. Weibull Random.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) Editor de expresiones 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 absoluto Math.Abs( valor ) Retorna el valor absoluto del  valor especificado. El valor absoluto de un número es su magnitud sin signo. Arcocoseno Math.Acos( valor ) Retorna el arcocoseno del valor especificado (en radianes). Arcoseno Math.Asin( valor ) Retorna el arcoseno del valor especificado (en radianes). Arcotangente Math.Atan( valor ) Retorna el arcotangente del valor especificado (en radianes). Techo Math.Ceiling( valor ) Retorna el entero más pequeño pero no menor que el valor especificado. Coseno Math.Cos( valor ) Retorna el coseno del valor especificado (en radianes). e Math.E Retorna la base del logaritmo natural. Constante matemática e . Epsilon Math.Epsilon Representa el número real más pequeño (representable) mayor que cero. Exponencial Math.Exp( valor ) Retorna el resultado de elevar la constante e  al valor especificado. Piso Math.Floor( valor ) Retorna el entero más grande pero no mayor al valor especificado. Si Math.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 Natural Math.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áximo Math.Max( valor1 , valor2 , ..., valorN ) Retorna el valor máximo entre los especificados. Mínimo Math.Min( valor1 , valor2 , ..., valorN ) Retorna el valor mínimo entre los especificados. NaN Math.NaN Un valor indefinido o irrepresentable. π (pi) Math.PI Retorna la relación entre la circunferencia de un círculo y su diámetro. Constante matemática π . Potencia Math.Pow( base , exponente ) Retorna el resultado de la base elevada al exponente . Resto o residuo Math.Remainder( dividendo , divisor ) Retorna el resto o residuo de la división entre el dividendo y el divisor . Redondear Math.Round( valor , [, dígitos ]) Parámetro opcional: dígitos decimales. Retorna el valor redondeado (por defecto al entero más cercano). Seno Math.Sin( valor ) Retorna el seno del valor especificado (en radianes). Raíz Cuadrada Math.Sqrt( valor ) Retorna la raíz cuadrada del valor especificado. Suma de muestra aleatoria Math.SumOfSamples( expresión , n ) Muestrea n veces, de forma independiente, la expresión aleatoria especificada y retorna la suma de los valores obtenidos. Tangente Math.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. 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. 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. 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.   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. 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 . 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. 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 ejemplo El modelo está compuesto por: 1 Source (Llegada) 2 Servers (Norte, Sur) 1 Sink (Salida) Connectors y Paths 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. 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 o  Path , y la página sobre 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. Simbit: Reposición de inventarios                                                                                                                                                                   Politicas de reposicion de inventario.pdf                                                         Politicas de reposicion de inventario.spfx 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 (BurgerSource, HotdogSource) 2  Servers (BurgerServer, HotdogServer) 2 Sink (BurgerSink, HotdogSink) Paths 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. 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                                                                                                                                                               Servidor con Consumo de Materiales.pdf                                                                              Servidor con Consumo de Materiales.spfx Los dos modelos están compuestos por: 1 Source (Source1) 1 Server (Server1) 1 Sink (Sink1) Connectors 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. 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                                                                                                                                                                                  Inventario Y Materiales.pdf                                                   Inventario Y Materiales.spfx El modelo está compuesto por: 2 Source (Src1, Src2) 2  Servers (Servidor1, Servidor2) 1  Sink (Snk) 1 Combiner (Combiner1) Paths 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. 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. 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 .