Resumen
Este artículo describe un nuevo sistema de modelado, Simio, diseñado para simplificar la construcción de modelos mediante la promoción de un cambio de paradigma de modelado desde la orientación a procesos a la orientación a objetos. Simio es un marco de modelado de simulaciones basado en objetos inteligentes. Los modeladores construyen los objetos inteligentes, que luego pueden reutilizarse en múltiples proyectos de modelado. Aunque el marco de Simio se centra en el modelado basado en objetos, también admite el uso sin fisuras de múltiples paradigmas de modelado, incluidos el modelado basado en eventos, procesos, objetos y agentes.
1. 1. Paradigmas de modelado
En los primeros días de la simulación de eventos discretos, el paradigma de modelado dominante era la orientación a eventos implementada por herramientas como Simscript (Markowitz, et .al 1962.) y GASP (Pritsker, 1967). En este paradigma, el sistema se ve como una serie de sucesos instantáneos que cambian su estado. El modelador define los eventos del sistema y modela los cambios de estado que tienen lugar cuando se producen dichos eventos. Este enfoque del modelado es muy flexible y eficaz, pero también es una representación relativamente abstracta del sistema. Por eso, a muchos les resultaba difícil modelar con la orientación a eventos.
En los años 80, la orientación a procesos desplazó a la orientación a eventos como enfoque dominante en la simulación de eventos discretos. En la visión de proceso describimos el movimiento de entidades pasivas a través del sistema como un flujo de proceso. El flujo del proceso se describe mediante una serie de pasos de proceso (por ejemplo, Captura, Retraso, Liberación) que modelan los cambios de estado que tienen lugar en el sistema. Este enfoque se remonta a los años 60 con la introducción del GPSS (Gordon, 1960) y proporcionaba una forma más natural de describir el sistema. Sin embargo, debido a muchos problemas prácticos con el GPSS original (por ejemplo, un reloj entero y una ejecución lenta) no se convirtió en el enfoque dominante hasta que las versiones mejoradas de GPSS (Henriksen, 76) junto con lenguajes de proceso más nuevos como SLAM (Pegden/Pritsker, 79) y SIMAN (Pegden, 82) se utilizaron ampliamente en los años 80. Durante los años 80 y 90, el modelado gráfico y la animación también se convirtieron en características clave de las herramientas de modelado de simulación. La creación de modelos gráficos simplificó el proceso de construcción de modelos de procesos, y la animación gráfica mejoró notablemente la visualización y validación de los resultados de la simulación. La introducción de Microsoft Windows permitió crear interfaces gráficas de usuario mejoradas y surgieron varias herramientas nuevas basadas en gráficos (por ejemplo, ProModel y Witness).
Otro avance conceptual que se produjo durante esta época fue la introducción de herramientas de modelado de procesos jerárquicos que admitían la noción de bibliotecas de procesos específicos de un dominio. El concepto básico en este caso es permitir a los usuarios crear nuevos pasos de proceso combinando pasos de proceso existentes. El sistema de modelado Arena (Pegden/Davis, 1992), ampliamente utilizado, es un buen ejemplo de esta capacidad.
Desde el cambio generalizado a una orientación de procesos basada en gráficos, se han producido mejoras y perfeccionamientos en las herramientas, pero no avances reales en el marco subyacente. La gran mayoría de los modelos de eventos discretos se siguen construyendo con la misma orientación a procesos que se ha utilizado ampliamente en los últimos 25 años.
Aunque la orientación a procesos ha demostrado ser muy eficaz en la práctica, la orientación a objetos ofrece un atractivo paradigma de modelado alternativo que tiene el potencial de ser más natural y fácil de usar. En la orientación a objetos, modelamos el sistema describiendo los objetos que lo componen. Por ejemplo, modelamos una fábrica describiendo los trabajadores, las máquinas, las cintas transportadoras, los robots y otros objetos que componen el sistema. El comportamiento del sistema surge de la interacción de estos objetos.
Aunque se han introducido varios productos para apoyar la orientación a objetos, hasta la fecha muchos profesionales han optado por la orientación a procesos. Una de las principales razones es que, si bien el paradigma de modelado subyacente puede ser más simple y menos abstracto, la implementación específica puede ser difícil de aprender y utilizar (por ejemplo, requiere programación), o lenta en la ejecución. Esto no difiere de los retos a los que se enfrenta la orientación a procesos para desbancar a la orientación a eventos. Aunque la primera herramienta de modelización de procesos (GPSS) se introdujo en 1961, tuvieron que pasar 25 años antes de que la orientación a procesos se desarrollara hasta el punto de convencer a los profesionales para realizar el cambio de paradigma. En este artículo se describe Simio, una nueva herramienta de modelado de simulaciones diseñada para facilitar el uso y la ejecución de la orientación a objetos. Aunque Simio incorpora una serie de características innovadoras en pos de este objetivo, sólo el tiempo dirá si esta herramienta ha superado las numerosas cuestiones prácticas que deben abordarse para desencadenar un cambio de paradigma generalizado en la forma en que los profesionales construyen modelos.
La herramienta está concebida desde cero para soportar el paradigma del modelado de objetos, pero también admite el uso sin fisuras de múltiples paradigmas de modelado, como la orientación a procesos y la orientación a eventos. También es totalmente compatible con sistemas discretos y continuos, así como con aplicaciones a gran escala basadas en el modelado por agentes. Estos paradigmas de modelado pueden mezclarse libremente dentro de un mismo modelo.
2. El paradigma de objetos de Simio
Simio es un marco de modelado de simulación basado en objetos inteligentes. Los objetos inteligentes son construidos por los modeladores y luego pueden ser reutilizados en múltiples proyectos de modelado. Los objetos pueden almacenarse en bibliotecas y compartirse fácilmente. Un modelador principiante puede preferir utilizar objetos pre-construidos de las bibliotecas, sin embargo, el sistema está diseñado para que incluso los modeladores principiantes puedan construir fácilmente sus propios objetos inteligentes para su uso en la construcción de modelos jerárquicos.
Un objeto puede ser una máquina, un robot, un avión, un cliente, un médico, un tanque, un autobús, un barco o cualquier otra cosa que pueda encontrar en su sistema. Un modelo se construye combinando objetos que representan los componentes físicos del sistema. Un modelo Simio se parece al sistema real. La lógica y la animación del modelo se construyen en un solo paso.
Un objeto puede animarse en 3D para reflejar su estado cambiante. Por ejemplo, una carretilla elevadora sube y baja su elevador, un robot abre y cierra su pinza y un carro de combate gira su torreta. El modelo animado ofrece una imagen en movimiento del sistema en funcionamiento.
Los objetos se construyen utilizando los conceptos de la orientación a objetos. Sin embargo, a diferencia de otros sistemas de simulación orientados a objetos, el proceso de construcción de un objeto es muy sencillo y completamente gráfico. No es necesario escribir código de programación para crear nuevos objetos.
La actividad de construcción de un objeto en Simio es idéntica a la actividad de construcción de un modelo; de hecho, no hay ninguna diferencia entre un objeto y un modelo. Este concepto se conoce como principio de equivalencia y es fundamental para el diseño de Simio. Cada vez que se construye un modelo, éste es por definición un objeto que puede instanciarse en otro modelo. Por ejemplo, si se combinan dos máquinas y un robot en un modelo de célula de trabajo, el modelo de célula de trabajo es en sí mismo un objeto que puede instanciarse cualquier número de veces en otros modelos. La célula de trabajo es un objeto, al igual que las máquinas y el robot. En Simio no hay forma de separar la idea de construir un modelo del concepto de construir un objeto. Cada modelo que se construye en Simio es automáticamente un bloque de construcción que puede utilizarse para construir modelos de nivel superior.
3. La base orientada a objetos
Muchos lenguajes de programación populares, como C++, C# y Java, se basan en los principios básicos de la programación orientada a objetos (POO). En este paradigma de programación, el software se construye como una colección de objetos cooperantes que se instancian a partir de clases. Estas clases se diseñan utilizando los principios básicos de abstracción, encapsulación, polimorfismo, herencia y composición.
El principio de abstracción puede resumirse como centrarse en lo esencial. El principio básico consiste en simplificar al máximo la estructura de las clases.
El principio de encapsulación especifica que sólo el objeto puede cambiar su estado. La encapsulación sella la implementación de la clase objeto del mundo exterior.
El polimorfismo proporciona un método coherente para que los mensajes desencadenen acciones de los objetos. Cada clase de objeto decide cómo responder a un mensaje específico.
La herencia es un concepto clave que permite derivar nuevas clases de objetos de clases de objetos existentes: a veces se denomina relación "es-una". También se denomina subclasificación, ya que estamos creando una clase más especializada de un objeto. La subclasificación suele permitir ampliar el comportamiento del objeto con una nueva lógica, así como modificarlo anulando parte de la lógica existente.
La composición permite crear nuevas clases de objetos combinando clases de objetos existentes: a veces se denomina relación "has-a". Los objetos se convierten en bloques de construcción para crear objetos de nivel superior.
Es interesante señalar que las raíces de estas ideas se remontan a principios de los años sesenta con la herramienta de modelado de simulación Simula 67. Esta herramienta de modelado fue creada por Kristen Nygaard y Ole-Johan Dahl (1962) del Norwegian Computing Center de Oslo para modelar el comportamiento de los barcos. Introdujeron los conceptos básicos de creación de clases de objetos propietarios de sus datos y comportamiento, y que podían instanciarse en otros objetos. Fue el nacimiento del modelado jerárquico y la programación orientada a objetos.
Mucha gente asume que los conceptos de programación orientada a objetos se desarrollaron dentro del mundo de la programación; sin embargo, no fue así. Estos principios se desarrollaron para construir modelos de simulación y luego fueron adoptados por el mundo de la programación.
Aunque el mundo de la simulación creó los conceptos originales orientados a objetos, aún no ha producido un marco de modelado orientado a objetos que los profesionales hayan adoptado ampliamente. Aunque ha habido varios intentos de crear un marco de este tipo, al final los profesionales se han ceñido en su mayoría a su probada orientación a procesos para el modelado. Una de las principales razones es que la mayoría de los intentos anteriores han sido simplemente bibliotecas de programación orientada a objetos que requieren que el usuario retroceda 25 años en el tiempo y vuelva a codificar sus modelos y/u objetos en un lenguaje de programación.
4. El marco de objetos de Simio
El marco de objetos de Simio se basa en los mismos principios básicos que los lenguajes de programación orientados a objetos; sin embargo, estos principios se aplican dentro de un marco de modelado y no de un marco de programación. Por ejemplo, el equipo de desarrollo de Microsoft que diseñó C# aplicó estos principios básicos en el diseño de ese lenguaje de programación. Aunque estos mismos principios rigen el diseño de Simio, el resultado no es un lenguaje de programación, sino un sistema de modelado gráfico. Esta distinción es importante para comprender el diseño de Simio.
Simio no es simplemente una herramienta de modelización de simulaciones programada en un lenguaje de programación orientada a objetos (aunque esté programada en C#). Tampoco es un simple conjunto de clases disponibles en un lenguaje de programación orientada a objetos como Java o C++ que sirven para construir modelos de simulación. Simio es un marco de modelado gráfico para apoyar la construcción de modelos de simulación que está diseñado en torno a los principios básicos de la orientación a objetos. Por ejemplo, cuando se crea un objeto como una "máquina" en Simio, el principio de herencia permite crear una nueva clase de máquinas que hereda el comportamiento base de una "máquina", pero este comportamiento puede modificarse (sobrescribirse) y ampliarse. Mientras que en un lenguaje de programación ampliamos o anulamos el comportamiento escribiendo métodos, en Simio ampliamos o anulamos el comportamiento añadiendo y anulando modelos de proceso definidos gráficamente.
Esta distinción entre modelado orientado a objetos y programación orientada a objetos es crucial. Con Simio, los conocimientos necesarios para definir y añadir nuevos objetos al sistema son de modelado, no de programación.
5. Anatomía de un objeto (modelo)
Cuando se crea un modelo en Simio, se está creando una clase de objeto a partir de la cual pueden crearse múltiples instancias. Este proceso se denomina instanciación.
Al instanciar un objeto en un modelo, puede especificar propiedades del objeto que rigen el comportamiento de esta instancia específica de este objeto. Por ejemplo, las propiedades de una máquina pueden incluir el tiempo de preparación, procesamiento y desmontaje, junto con una lista de materiales y un operario necesario durante la preparación. El creador del objeto decide el número y el significado de las propiedades. Las propiedades de Simio están fuertemente tipadas y pueden representar valores numéricos, booleanos, cadenas, referencias a objetos, fechas y horas, etc. Dado que cualquier modelo que construya es por definición un objeto, también tiene la oportunidad de parametrizar su modelo mediante propiedades.
Hay que tener en cuenta que instanciar un modelo no es lo mismo que copiarlo o clonarlo. Cuando un modelo se utiliza como un bloque de construcción en la construcción de otros modelos puede ser instanciado muchas veces en muchos modelos diferentes. La instancia del modelo simplemente contiene una referencia a la definición del modelo que se utiliza una y otra vez. La instancia también contiene los valores de las propiedades, ya que son exclusivos de cada instancia. Sin embargo, todas las instancias comparten la lógica del modelo. Independientemente del número de instancias que se creen, sólo hay una definición de clase del objeto, y cada instancia hace referencia a esta única definición. Cada instancia mantiene las propiedades que le son propias, pero se remite a la definición para obtener su comportamiento subyacente. Si el comportamiento de la definición cambia, todas las instancias utilizan automáticamente el nuevo comportamiento.
Además de propiedades, los objetos también tienen estados. Los estados también están fuertemente tipados, pero siempre se asignan a un valor numérico. Por ejemplo, los booleanos true y false se asignan a 1 y 0, y una lista enumerada de nombres de estado se asigna a la posición del índice de la lista (0, 1, ...., N). Un estado cambia como resultado de la ejecución de la lógica dentro del objeto. Las propiedades pueden considerarse entradas de un objeto, y los estados, respuestas de salida que cambian a lo largo de la ejecución de la lógica del objeto. Un estado puede representar un recuento de piezas completadas, el estado de una máquina seleccionada de una lista de estados enumerados, la temperatura de un lingote calentándose en un horno, el nivel de aceite en un barco que se está llenando o el nivel de acumulación en una cinta transportadora.
Existen dos tipos básicos de estados: discretos y continuos. Un estado discreto es un valor que sólo cambia en momentos puntuales (llegada de un cliente, avería de una máquina, etc.) Un estado continuo (por ejemplo, el nivel de un depósito, la posición de un carro, etc.) tiene un valor que cambia continuamente a lo largo del tiempo.
6. Tres niveles de objetos
Una de las características de diseño interno más importantes y exclusivas de Simio es el uso de una estructura de objetos de tres niveles que separa un objeto en una definición de objeto, una instancia de objeto y una realización de objeto. La definición de objeto especifica el comportamiento del objeto y es compartida por todas las instancias del objeto. Una instancia de objeto es simplemente una instancia de ese objeto dentro de una definición de objeto padre (por ejemplo, una instancia de máquina de torno se coloca dentro de una definición de célula de trabajo). La instancia de objeto define los valores de propiedad para cada instancia individual del objeto y estos datos de instancia son a su vez compartidos por todas las realizaciones de objeto.
La realización de objeto se utiliza para representar una realización específica de una instancia dentro de una jerarquía de modelo expandida. Por ejemplo, cada vez que se coloca una nueva instancia de célula de trabajo en una definición de objeto padre (por ejemplo, una línea de producción) se crea la necesidad de una nueva realización para el torno incrustado. Aunque la definición de célula de trabajo se construye a partir de una única instancia de torno, esta única instancia de torno no puede contener los valores de estado correspondientes a múltiples realizaciones de torno que resultan de múltiples instancias de la célula de trabajo. Las realizaciones de objetos proporcionan el mecanismo para mantener esta información de estado jerárquica de una forma muy compacta. Las realizaciones de objetos sólo se crean durante la ejecución del modelo y sólo contienen las variables de estado del modelo y una referencia a su instancia de objeto padre. Esta es una estructura altamente eficiente que es crucial para aplicaciones a gran escala como los modelos basados en agentes que pueden tener muchos miles de realizaciones de objetos.
7. Tres formas de construir definiciones de objetos
El ejemplo anterior, en el que hemos definido una nueva definición de objeto (célula de trabajo) combinando otros objetos (máquinas y un robot), es un ejemplo de cómo podemos crear definiciones de objeto en Simio. Este tipo de objeto se denomina objeto compuesto porque lo creamos combinando dos o más objetos componentes. Este enfoque de construcción de objetos es totalmente jerárquico, es decir, un objeto compuesto puede utilizarse como objeto componente en la construcción de objetos de nivel superior. Esta es sólo una de las formas de construir objetos en Simio, existen otros dos métodos importantes.
El método más básico para crear objetos en Simio consiste en definir los procesos lógicos que alteran su estado en respuesta a eventos. Por ejemplo, un objeto máquina puede crearse definiendo los procesos que alteran el estado de la máquina cuando se producen eventos como la llegada de una pieza, la rotura de una herramienta, etc. Este tipo de modelado es similar al modelado de procesos que se realiza en los sistemas de modelado tradicionales que se utilizan hoy en día, como Arena o GPSS. Un objeto que se define mediante la descripción de sus procesos nativos se denomina objeto base y, a su vez, puede utilizarse como objeto componente para construir objetos de nivel superior.
El último método para construir objetos en Simio se basa en el concepto de herencia. En este caso, creamos un objeto a partir de un objeto existente anulando (es decir, sustituyendo) uno o varios procesos del objeto, o añadiendo procesos adicionales para ampliar su comportamiento. En otras palabras, empezamos con un objeto que es casi lo que queremos, y luego lo modificamos y ampliamos según sea necesario para que sirva a nuestro propósito. Por ejemplo, podríamos construir un objeto taladro especializado a partir de un objeto máquina generalizado añadiendo procesos adicionales para gestionar el fallo y la sustitución de la broca. Un objeto construido de esta forma se denomina objeto derivado porque se subclasifica a partir de un objeto existente.
Independientemente del método que se utilice para crear un objeto, una vez creado se utiliza exactamente de la misma manera. Un objeto puede instanciarse cualquier número de veces en un modelo. Basta con seleccionar el objeto de interés y colocarlo (instanciarlo) en el modelo
8. Clases de objetos
En Simio existen seis clases básicas de objetos. Estas seis clases de objetos constituyen un punto de partida para la creación de objetos inteligentes en Simio. Por defecto, estas seis clases de objetos tienen muy poca inteligencia nativa, pero todas pueden adquirir inteligencia. Las versiones inteligentes de estos objetos se crean modelando su comportamiento como una colección de procesos controlados por eventos.
La primera clase es el objeto fijo. Este objeto tiene una ubicación fija en el modelo y se utiliza para representar las cosas en su sistema que no se mueven de una ubicación a otra. Los objetos fijos se utilizan para representar equipos estacionarios como máquinas, estaciones de servicio, etc.
Los agentes son objetos que pueden moverse libremente por el espacio tridimensional. Los agentes también suelen utilizarse para desarrollar modelos basados en agentes. Esta visión del modelado es útil para estudiar sistemas compuestos por muchos objetos inteligentes que actúan de forma independiente e interactúan entre sí, creando así el comportamiento global del sistema. Algunos ejemplos de aplicación son la aceptación en el mercado de un nuevo producto o servicio, o el crecimiento de la población de especies competidoras en un entorno.
Una entidad es una subclase de la clase Agente y tiene un importante comportamiento añadido. Las entidades pueden moverse por el sistema de objeto a objeto a través de una red de enlaces y nodos. Ejemplos de entidades son los clientes en un sistema de servicios, las piezas de trabajo en un sistema de fabricación, los barcos en un sistema de transporte, los tanques en un sistema de combate, y los médicos, enfermeras y pacientes en un sistema de salud.
Tenga en cuenta que en los sistemas de modelado tradicionales, como GPSS o Arena, las entidades son pasivas y los procesos del modelo actúan sobre ellas. Sin embargo, en Simio las entidades pueden ser inteligentes y controlar su propio comportamiento.
Los objetos enlace y nodo se utilizan para construir redes por las que pueden circular las entidades. Un enlace define una vía para el movimiento de entidades entre objetos. Un nodo define un punto inicial o final para un enlace. Los enlaces y los nodos pueden combinarse para formar redes complejas. Aunque el enlace base tiene poca inteligencia, podemos añadirle comportamientos que le permitan modelar flujos sin restricciones, flujos de tráfico congestionados o sistemas complejos de manipulación de materiales, como transportadores de acumulación o sistemas de potencia y libres.
La última clase de objeto es un transportador y es una subclase de la clase entidad. Un transportista es una entidad que tiene la capacidad añadida de recoger, transportar y dejar una o más entidades. Por defecto, los transportadores no tienen ninguno de estos comportamientos, pero añadiendo lógica de modelo a esta clase podemos crear una amplia gama de comportamientos de transportador. Un transportista puede ser un taxi, un autobús, un vehículo autoguiado, un vagón de metro, una carretilla elevadora o cualquier otro objeto capaz de transportar a otras entidades de un lugar a otro.
Una característica clave de Simio es la posibilidad de crear una amplia gama de comportamientos de objetos a partir de estas seis clases básicas. El marco de modelado de Simio es neutral con respecto al dominio de aplicación, es decir, estas seis clases básicas no son específicas de la fabricación, los sistemas de servicios, la sanidad, el ejército, etc. Sin embargo, es fácil crear modelos centrados en aplicaciones específicas. Sin embargo, es fácil crear bibliotecas centradas en aplicaciones y compuestas por objetos inteligentes de estas seis clases diseñadas para aplicaciones específicas. Por ejemplo, es relativamente sencillo crear un objeto (en este caso, un enlace) que represente un transportador de acumulación complejo para su uso en aplicaciones de fabricación. La filosofía de diseño de Simio apunta a que este tipo de lógica específica del dominio pertenece a los objetos que construyen los usuarios, y no a los que se programan en el núcleo del sistema.
9. Creación de objetos inteligentes con procesos
El modelado en Simio comienza con los objetos base, que son los cimientos sobre los que se construyen los objetos de nivel superior. Un objeto base en Simio es un objeto fijo, agente, entidad, enlace, nodo o transportador al que se le añade inteligencia mediante uno o varios procesos. Los procesos dotan a un objeto de inteligencia definiendo la lógica que se ejecuta en respuesta a los eventos.
Cada proceso es una secuencia de pasos de proceso que se desencadena por un evento y es ejecutado por un token.Un proceso siempre comienza con un único paso Begin, y termina con un único paso End. Un token es liberado por el paso Begin y es simplemente un hilo de ejecución (similar a las entidades en Arena). Un token puede tener propiedades (parámetros de entrada) y estados (valores modificables en tiempo de ejecución) que controlan la ejecución de los pasos del proceso. Puede definir sus propias clases de tokens con distintas combinaciones de propiedades y estados.
La potencia de modelado de Simio procede del conjunto de eventos que se activan automáticamente para las seis clases básicas de objetos, junto con los pasos de proceso disponibles para modelar los cambios de estado que se producen en respuesta a estos eventos. Dominar plenamente el arte de construir objetos inteligentes implica aprender los eventos y la colección de pasos de proceso disponibles, junto con el conocimiento y la experiencia de cómo combinar estos pasos para representar una lógica compleja.
Cada paso en Simio modela un proceso simple, como retener el token durante un tiempo, capturar/liberar un recurso, esperar a que se produzca un evento, asignar un nuevo valor a un estado o decidir entre rutas de flujo alternativas. Algunos pasos (por ejemplo, Retraso) son pasos de propósito general que resultan útiles para modelar objetos, enlaces, entidades, transportadores, agentes y grupos. Otros pasos sólo son útiles para objetos específicos. Por ejemplo, los pasos Recoger y Dejar sólo son útiles para añadir inteligencia a los transportistas y los pasos Enganchar y Desenganchar sólo son útiles para añadir inteligencia a los Enlaces.
Cada clase de objeto tiene su propio conjunto de eventos. Por ejemplo, un enlace proporciona eventos que se disparan cuando las entidades entran y salen del enlace, se fusionan completamente en el enlace, colisionan o se separan de otras entidades que residen en el enlace, se mueven dentro de un rango especificado de otra entidad, etc. Proporcionando lógica de modelo para responder a estos eventos podemos controlar completamente el movimiento de las entidades a través del enlace. Por ejemplo, para añadir lógica de acumulación al enlace simplemente escribimos un pequeño proceso que se activa cuando una entidad colisiona con la entidad a la que sigue, y reasigna la velocidad de la entidad para que coincida con la velocidad de la entidad a la que sigue.
Los pasos del proceso que se utilizan para definir la lógica subyacente de un objeto no tienen estado, es decir, tienen propiedades (parámetros de entrada) pero no estados (respuestas de salida). Esto es importante porque significa que una única copia del proceso puede ser mantenida por la definición de la clase de objeto, y compartida por un número arbitrario de instancias de objeto. Si se modifica la lógica del proceso, este hecho se refleja automáticamente en todas las instancias del objeto.
Los estados de una instancia de objeto se almacenan en elementos. Los elementos definen los componentes dinámicos de un objeto y pueden tener tanto propiedades (parámetros de entrada) como estados (valores modificables en tiempo de ejecución). Dentro de un objeto los tokens pueden ejecutar pasos que cambian los estados de los elementos que son propiedad del objeto.
Un ejemplo de elemento es la estación, que define una ubicación dentro de un objeto. Las estaciones también se utilizan para definir los puntos de entrada y salida de un objeto. Las entidades pueden transferirse dentro y fuera de las estaciones (utilizando el paso Transferir), y una estación mantiene una cola de entidades que se encuentran actualmente en la estación, así como de entidades que esperan transferirse a la estación. Una estación tiene una capacidad que limita las transferencias a una estación. Por lo tanto, una entidad que llega a un objeto a través de un enlace sólo puede salir del enlace y entrar en el objeto si la estación de entrada para el objeto tiene capacidad disponible.
10. Programación de capacidad finita
Aunque la simulación se ha aplicado tradicionalmente al problema del diseño, también puede utilizarse de forma operativa para generar programas de producción para la planta de producción. Cuando se utiliza de este modo, la simulación es un Programador de Capacidad Finita (FCS) y proporciona una alternativa a otros métodos de FCS como los algoritmos de optimización y los secuenciadores de trabajo a tiempo. Sin embargo, los FCS basados en simulación presentan una serie de ventajas importantes (por ejemplo, velocidad de ejecución y lógica de programación flexible) que los convierten en una potente solución para aplicaciones de programación.
La simulación proporciona un método sencillo pero flexible para generar una programación de capacidad finita para la planta de producción. El enfoque básico de la programación basada en la simulación consiste en ejecutar el modelo de fábrica utilizando el estado inicial de la fábrica y el conjunto de pedidos planificados que deben producirse. Las reglas de decisión se incorporan al modelo para tomar decisiones sobre la selección de trabajos, recursos y rutas. La simulación construye una programación simulando el flujo de trabajo a través de la instalación y tomando decisiones "inteligentes" basadas en las reglas de programación especificadas. Los resultados de la simulación suelen mostrarse como trabajos cargados en un diagrama de Gantt interactivo que el usuario puede manipular posteriormente. Existe un gran número de reglas que pueden aplicarse dentro de un modelo de simulación para generar distintos tipos de programación centrados en medidas como maximizar el rendimiento, mantener una alta utilización en un cuello de botella, minimizar los cambios o cumplir fechas de entrega especificadas.
Debido a los requisitos especiales impuestos por las aplicaciones de programación (por ejemplo, la necesidad de reglas de decisión especializadas y la necesidad de ver los resultados en forma de diagrama de Gantt interactivo), las aplicaciones de programación basadas en simulación han empleado normalmente simuladores especializados diseñados específicamente para este ámbito de aplicación. El problema de este enfoque es que los simuladores especializados llevan incorporados modelos de fábrica basados en datos que no pueden modificarse ni cambiarse para adaptarlos a la aplicación. En muchos casos, este modelo incorporado es una visión excesivamente simplificada de las complejidades de la planta de producción. Este enfoque de un solo modelo para todos limita gravemente la gama de aplicaciones de estas herramientas. Algunos procesos de producción pueden representarse adecuadamente con este modelo fijo, pero muchos otros no.
Simio adopta un enfoque diferente al permitir que el modelo de fábrica se defina utilizando toda la potencia de modelización de propósito general de la herramienta. De este modo, el abanico de aplicaciones deja de estar restringido por un modelo fijo integrado que no puede modificarse ni cambiarse entre aplicaciones. El modelo de Simio creado por el usuario permite captar todas las complejidades del proceso de producción. Esto no sólo incluye la lógica dentro de cada centro de trabajo, sino también la manipulación de materiales necesaria para trasladar los trabajos entre centros de trabajo.
Los requisitos específicos de las aplicaciones FCS se abordan mediante la incorporación de funciones en Simio que responden específicamente a las necesidades de las aplicaciones FCS. Estas funciones incluyen el soporte de conjuntos de datos de trabajos definidos externamente junto con un modelado muy flexible de recursos y materiales. Aunque estas funciones están diseñadas específicamente para liberar toda la potencia de modelado de Simio para aplicaciones de FCS, también son útiles en aplicaciones de modelado generales.
Un conjunto de datos de trabajos de Simio permite definir externamente una lista de trabajos para su procesamiento por el modelo de simulación. Las tareas se definen en un conjunto de datos que contiene una o varias tablas, con relaciones definidas entre las columnas de las tablas. El esquema específico que contiene los datos de las tareas es arbitrario y puede ser definido por el usuario para que coincida con el esquema de los datos de fabricación (por ejemplo, un sistema ERP). Los datos del trabajo suelen incluir la fecha de lanzamiento y de vencimiento, las hojas de ruta del trabajo, los tiempos de preparación y procesamiento, los requisitos de material, así como otras propiedades relevantes para el sistema de interés... Los objetos de Simio pueden hacer referencia directa a valores especificados en el conjunto de datos del trabajo (por ejemplo, el tiempo de procesamiento) sin conocer el esquema que se implementó para almacenar los datos.
Cualquier objeto en Simio puede servir como recurso capacitado y puede tener su propio comportamiento independiente. Los recursos pueden seleccionarse de una lista en función de reglas flexibles, como el tiempo de cambio mínimo o el tiempo de inactividad más largo. . Los recursos también admiten reglas muy flexibles (fecha de vencimiento más temprana, menor holgura restante, ratio crítico, etc.) para seleccionar entre trabajos que compiten entre sí y que están esperando para aprovechar el recurso. Por último, el historial de uso de los recursos puede visualizarse en un diagrama de Gantt interactivo.
El elemento Materiales de Simio permite modelar objetos que pueden consumirse y producirse durante la ejecución del modelo. Los materiales también pueden definirse jerárquicamente para modelar una lista de materiales (BOM) tradicional para aplicaciones de fabricación. De este modo, un paso de fabricación puede modelarse como el consumo de una lista específica de materiales dentro de la lista de materiales jerárquica.
11. Resumen
Simio es un nuevo marco de modelado basado en los principios fundamentales del modelado orientado a objetos. Es único en los siguientes aspectos:
- Simio es un marco gráfico de modelado orientado a objetos y no simplemente un conjunto de clases de un lenguaje de programación orientado a objetos útiles para el modelado de simulaciones. El marco de modelado gráfico de Simio es totalmente compatible con los principios básicos del modelado orientado a objetos sin requerir conocimientos de programación para añadir nuevos objetos al sistema.
- El marco de Simio es neutral con respecto al dominio y permite construir objetos que dan soporte a muchas áreas de aplicación diferentes. Las funciones de modelado de procesos de Simio permiten crear nuevos objetos con comportamientos complejos.
- Simio admite múltiples paradigmas de modelado. Simio permite modelar sistemas discretos y continuos, así como modelar eventos, procesos, objetos y agentes.
- El marco Simio ofrece funciones especializadas para dar soporte directo a aplicaciones de emulación y programación de capacidad finita que aprovechan plenamente las capacidades generales de modelado de Simio.
Referencias:
- Gordon, Geoffrey, 25 de octubre de 1960. A general purpose systems simulator. (Manual inédito.) White Plains, N.Y.: IBM. Corp. ASDD Commercial Dept.
- Henriksen, J. O. 1976. Building a better GPSS: a 3:1 enhancement. En Proceedings of the 1975 Winter Simulation Conference, 465-469. Nueva Jersey: IBM. New Jersey: AFIPS Press
- Markowitz, H., Hausner, B., y Karr, H. SIMSCRIPT: A simulation programming language, Prentice Hall, Englewood Cliffs, N. J. 1962
- Nygaard, K y O-J Dahl, . SIMULA -An Extension of ALGOL to the Description of Discrete-Event Networks, presentado en la Segunda Conferencia Internacional sobre Tratamiento de la Información (1962)
- Pegden, C. D. y A. A. B. Pritsker (1979). SLAM: Lenguaje de simulación para el modelado de alternativas. Simulation, Vol. 33, No. 5.
- Pegden, C. D. (1982). Introduction to SIMAN. Systems Modeling Corporation.
- Pegden, C. D. y D. A. Davis (1992) Arena: a SIMAN/Cinema-based Hierarchical Modeling System; en Proceedings of the 1975 Winter Simulation Conference 390-399.
- Pritsker, A. A. B. 1967. GASP H User's Manual. Arizona State University.
More Whitepapers
- Privado: Creación de modelos de gemelos digitales inteligentes mediante redes neuronales basadas en IA
- Software de simulación de última generación Introducción a Simio
- El continuo digital: la hoja de ruta de la transformación digital
- Simio Arquitectura e integración de TI de gemelos digitales de procesos adaptativos inteligentes

