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.

¿Tienes dudas, recomendaciones o te gustaría aportar a la Wiki?

Puedes escribirnos a simula.eii@gmail.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.

Standard Library

Source

Source en interfaz de Simio

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

 

Modos de llegada (Arrival Modes)

Simio soporta los siguientes modos de llegada:

Detener la creación de entidades

Revisar las propiedades: Maximum Arrivals, Maximum Time y Stopping Event.

Source en Facility View
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.
Standard Library

Sink

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

StandardLibraryFacility_Sink.png
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.
Standard Library

Server

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.

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
Reglas dinámicas

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

StandardLibraryFacility_Server.png
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.
Standard Library

Combiner

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.

Tipos de capacidad (Capacity types)


La capacidad representa la cantidad de entidades que el objeto puede procesar de manera simultánea.

StandardLibraryGIF_Combiner.gif

StandardLibraryFacility_Combiner.png
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.



Standard Library

Separator

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). 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.

 

Tipos de capacidad (Capacity types)


La capacidad representa la cantidad de entidades que el objeto puede procesar de manera simultánea.

StandardLibraryGIF_Separator.gif

StandardLibraryFacility_Separator.png
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.



Standard Library

Connector

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

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

 

StandardLibraryFacility_Connector.png
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.

 

Standard Library

Path

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

Cómo utilizarlos

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_Path.gif

StandardLibraryFacility_Path.png
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

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 (ExpressionEditorIcon.png).

ExpressionExample.gif
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)
   
Expresiones

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
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 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.
Expresiones

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
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

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.PNGEjemplo 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

Algunos procesos estándar son:

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

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).

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.

 

Processes

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.PNGEjemplo 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.PNGfind.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

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

Ejemplos

Escogiendo la cola más corta

Descargar
Descargar ejemplo

El modelo está compuesto por:

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
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 ConnectorPath, 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.

Ejemplos

Simbit: Reposición de inventarios

                                           image.png                                                                                                    Descargar

                      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:

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

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. 

Ejemplos

Simbit: Servidor con consumo de materiales

                          image.png                                                                                                                                   Descargar

Servidor con Consumo de Materiales.pdf                                                                              Servidor con Consumo de Materiales.spfx

Los dos modelos están compuestos por:

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

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. 

Ejemplos

Simbit: Inventarios y materiales

                                                     image.png                                                                                   Descargar

                                       Inventario Y Materiales.pdf                                                  Inventario Y Materiales.spfx

El modelo está compuesto por:

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

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

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

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

¿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).

Preguntas/Problemas Frecuentes

¿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.NumberWaitingPor 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.