Este artigo descreve um novo sistema de modelagem, o Simio, que foi projetado para simplificar a criação de modelos, promovendo uma mudança de paradigma de modelagem da orientação a processos para a orientação a objetos. O Simio é uma estrutura de modelagem de simulação baseada em objetos inteligentes. Os objetos inteligentes são criados por modeladores e podem ser reutilizados em vários projetos de modelagem. Embora a estrutura do Simio se concentre na modelagem baseada em objetos, ela também suporta o uso contínuo de vários paradigmas de modelagem, incluindo modelagem baseada em eventos, processos, objetos e agentes.
Nos primórdios da simulação de eventos discretos, o paradigma de modelagem dominante era a orientação a eventos implementada por ferramentas como Simscript (Markowitz, et .al 1962.) e GASP (Pritsker, 1967). Nesse paradigma de modelagem, o sistema é visto como uma série de eventos instantâneos que alteram o estado do sistema. O modelador define os eventos no sistema e modela as mudanças de estado que ocorrem quando esses eventos acontecem. Essa abordagem de modelagem é muito flexível e eficiente, mas também é uma representação relativamente abstrata do sistema. Como resultado, muitas pessoas acharam difícil modelar usando uma orientação a eventos.
Na década de 80, a orientação para processos substituiu a orientação para eventos como a abordagem dominante para a simulação de eventos discretos. Na visão de processo, descrevemos o movimento de entidades passivas pelo sistema como um fluxo de processo. O fluxo do processo é descrito por uma série de etapas do processo (por exemplo, apreender, atrasar, liberar) que modelam as mudanças de estado que ocorrem no sistema. Essa abordagem remonta à década de 1960, com a introdução do GPSS (Gordon, 1960), e proporcionou uma maneira mais natural de descrever o sistema. No entanto, devido a muitos problemas práticos com o GPSS original (por exemplo, um relógio inteiro e execução lenta), ele não se tornou a abordagem dominante até que versões aprimoradas do GPSS (Henriksen, 76), juntamente com linguagens de processo mais recentes, como SLAM (Pegden/Pritsker, 79) e SIMAN (Pegden, 82), se tornaram amplamente usadas nos anos 80. Durante as décadas de 80 e 90, a modelagem gráfica e a animação também surgiram como recursos fundamentais das ferramentas de modelagem de simulação. A criação de modelos gráficos simplificou o processo de criação de modelos de processos, e a animação gráfica melhorou muito a visualização e a validação dos resultados da simulação. A introdução do Microsoft Windows possibilitou a criação de interfaces gráficas de usuário aprimoradas e o surgimento de várias novas ferramentas baseadas em gráficos (por exemplo, ProModel e Witness).
Outro avanço conceitual ocorrido durante esse período foi a introdução de ferramentas de modelagem de processos hierárquicos que suportavam a noção de bibliotecas de processos específicos de domínio. O conceito básico aqui é permitir que os usuários criem novas etapas de processos combinando etapas de processos existentes. O sistema de modelagem Arena (Pegden/Davis, 1992), amplamente utilizado, é um bom exemplo desse recurso.
Desde a mudança generalizada para uma orientação de processo baseada em gráficos, houve refinamentos e melhorias nas ferramentas, mas nenhum avanço real na estrutura subjacente. A grande maioria dos modelos de eventos discretos continua a ser construída usando a mesma orientação de processo que tem sido amplamente utilizada nos últimos 25 anos.
Embora a orientação a processos tenha se mostrado muito eficaz na prática, a orientação a objetos oferece um paradigma de modelagem alternativo e atraente que pode ser mais natural e mais fácil de usar. Em uma orientação a objetos, modelamos o sistema descrevendo os objetos que o compõem. Por exemplo, modelamos uma fábrica descrevendo os trabalhadores, as máquinas, as esteiras transportadoras, os robôs e outros objetos que compõem o sistema. O comportamento do sistema emerge da interação desses objetos.
Embora vários produtos tenham sido lançados para dar suporte à orientação a objetos, até o momento muitos profissionais optaram por manter a orientação a processos. Um dos principais motivos para isso é que, embora o paradigma de modelagem subjacente possa ser mais simples e menos abstrato, a implementação específica pode ser difícil de aprender e usar (por exemplo, requer programação) ou lenta na execução. Isso não é diferente dos desafios enfrentados pela orientação a processos para superar a orientação a eventos. Embora a primeira ferramenta de modelagem de processos (GPSS) tenha sido lançada em 1961, foram necessários 25 anos para que a orientação a processos fosse desenvolvida a ponto de convencer os profissionais a fazer a mudança de paradigma. Este documento descreve o Simio, uma nova ferramenta de modelagem de simulação projetada para tornar a orientação a objetos fácil de usar e eficiente de executar. Embora o Simio incorpore vários recursos inovadores na busca desse objetivo, somente o tempo dirá se essa ferramenta conseguiu superar as muitas questões práticas que precisam ser abordadas para desencadear uma mudança de paradigma generalizada na forma como os profissionais criam modelos.
A ferramenta foi projetada desde o início para oferecer suporte ao paradigma de modelagem de objetos; no entanto, ela também oferece suporte ao uso contínuo de vários paradigmas de modelagem, incluindo uma orientação de processo e uma orientação de evento. Ela também oferece suporte total a sistemas discretos e contínuos, além de aplicativos de grande escala baseados em modelagem baseada em agentes. Esses paradigmas de modelagem podem ser misturados livremente em um único modelo.
O Simio é uma estrutura de modelagem de simulação baseada em objetos inteligentes. Os objetos inteligentes são criados por modeladores e podem ser reutilizados em vários projetos de modelagem. Os objetos podem ser armazenados em bibliotecas e facilmente compartilhados. Um modelador iniciante pode preferir usar objetos pré-construídos de bibliotecas; no entanto, o sistema foi projetado para facilitar a criação de seus próprios objetos inteligentes, mesmo para modeladores iniciantes, para uso na criação de modelos hierárquicos.
Um objeto pode ser uma máquina, um robô, um avião, um cliente, um médico, um tanque, um ônibus, um navio ou qualquer outro objeto que possa ser encontrado no seu sistema. Um modelo é criado pela combinação de objetos que representam os componentes físicos do sistema. Um modelo Simio se parece com o sistema real. A lógica e a animação do modelo são criadas em uma única etapa.
Um objeto pode ser animado em 3D para refletir o estado de mudança do objeto. Por exemplo, uma empilhadeira levanta e abaixa seu elevador, um robô abre e fecha sua garra e um tanque de guerra gira sua torre. O modelo animado fornece uma imagem em movimento do sistema em operação.
Os objetos são criados usando os conceitos de orientação a objetos. Entretanto, diferentemente de outros sistemas de simulação orientados a objetos, o processo de criação de um objeto é muito simples e totalmente gráfico. Não há necessidade de escrever código de programação para criar novos objetos.
A atividade de criar um objeto no Simio é idêntica à atividade de criar um modelo - na verdade, não há diferença entre um objeto e um modelo. Esse conceito é chamado de princípio de equivalência e é fundamental para o design do Simio. Sempre que você constrói um modelo, ele é, por definição, um objeto que pode ser instanciado em outro modelo. Por exemplo, se você combinar duas máquinas e um robô em um modelo de célula de trabalho, o próprio modelo de célula de trabalho é um objeto que pode ser instanciado inúmeras vezes em outros modelos. A célula de trabalho é um objeto, assim como as máquinas e o robô são objetos. No Simio, não há como separar a ideia de criar um modelo do conceito de criar um objeto. Todo modelo criado no Simio é automaticamente um bloco de construção que pode ser usado na criação de modelos de nível superior.
Muitas linguagens de programação populares, como C++, C# e Java, foram criadas com base nos princípios básicos da programação orientada a objetos (OOP). Nesse paradigma de programação, o software é construído como uma coleção de objetos cooperativos que são instanciados a partir de classes. Essas classes são projetadas usando os princípios básicos de abstração, encapsulamento, polimorfismo, herança e composição.
O princípio da abstração pode ser resumido como o foco no essencial. O princípio básico é tornar a estrutura das classes o mais simples possível.
O princípio do encapsulamento especifica que somente o objeto pode alterar seu estado. O encapsulamento sela a implementação da classe do objeto do mundo externo.
O polimorfismo fornece um método consistente para que as mensagens acionem as ações do objeto. Cada classe de objeto decide como responder a uma mensagem específica.
A herança é um conceito fundamental que permite que novas classes de objetos sejam derivadas de classes de objetos existentes: isso às vezes é chamado de relação "is-a". Isso também é chamado de subclassificação, pois estamos criando uma classe mais especializada de um objeto. Normalmente, a subclassificação permite que o comportamento do objeto seja estendido com uma nova lógica e também modificado pela substituição de parte da lógica existente.
A composição permite que novas classes de objetos sejam criadas pela combinação de classes de objetos existentes: isso às vezes é chamado de relação "has-a". Os objetos tornam-se blocos de construção para a criação de objetos de nível superior.
É interessante observar que as raízes dessas ideias remontam ao início da década de 1960, com a ferramenta de modelagem de simulação Simula 67. Essa ferramenta de modelagem foi criada por Kristen Nygaard e Ole-Johan Dahl (1962) do Norwegian Computing Center em Oslo para modelar o comportamento de navios. Eles introduziram os conceitos básicos de criação de classes de objetos que possuem seus próprios dados e comportamento e podem ser instanciados em outros objetos. Esse foi o nascimento da modelagem hierárquica e da programação orientada a objetos.
Muitas pessoas presumem que os conceitos de programação orientada a objetos foram desenvolvidos no mundo da programação; no entanto, esse não foi o caso. Esses princípios foram desenvolvidos para a criação de modelos de simulação e depois adotados pelo mundo da programação.
Embora o mundo da simulação tenha criado os conceitos originais orientados a objetos, ele ainda não produziu uma estrutura de modelagem orientada a objetos que tenha sido amplamente adotada pelos profissionais. Embora tenha havido várias tentativas de fornecer essa estrutura, os profissionais acabaram, em sua maioria, aderindo à orientação comprovada de processos para modelagem. Um dos principais motivos para isso é que a maioria das tentativas anteriores eram simplesmente bibliotecas de programação orientadas a objetos que exigiam que o usuário voltasse 25 anos no tempo e codificasse novamente seus modelos e/ou objetos em uma linguagem de programação.
A estrutura de objetos do Simio foi criada com base nos mesmos princípios básicos das linguagens de programação orientadas a objetos; no entanto, esses princípios são aplicados em uma estrutura de modelagem e não em uma estrutura de programação. Por exemplo, a equipe de desenvolvimento da Microsoft que projetou o C# aplicou esses princípios básicos no projeto dessa linguagem de programação. Embora esses mesmos princípios orientem o design do Simio, o resultado não é uma linguagem de programação, mas sim um sistema de modelagem gráfica. Essa distinção é importante para entender o design do Simio.
O Simio não é simplesmente uma ferramenta de modelagem de simulação programada em uma linguagem OOP (embora seja programada em C#). Da mesma forma, não é um simples conjunto de classes disponíveis em uma linguagem OOP, como Java ou C++, que são úteis para a criação de modelos de simulação. O Simio é uma estrutura de modelagem gráfica para dar suporte à construção de modelos de simulação projetados com base nos princípios básicos de orientação a objetos. Por exemplo, quando você cria um objeto como uma "máquina" no Simio, o princípio da herança permite que você crie uma nova classe de máquinas que herda o comportamento básico de uma "máquina", mas esse comportamento pode ser modificado (substituído) e estendido. Enquanto em uma linguagem de programação estendemos ou substituímos o comportamento escrevendo métodos em uma linguagem de programação, no Simio estendemos ou substituímos o comportamento adicionando e substituindo modelos de processos definidos graficamente.
Essa distinção entre modelagem orientada a objetos e programação orientada a objetos é fundamental. Com o Simio, as habilidades necessárias para definir e adicionar novos objetos ao sistema são habilidades de modelagem, não de programação.
Ao criar um modelo no Simio, você está criando uma classe de objeto a partir da qual várias instâncias podem ser criadas. Esse processo é chamado de instanciação.
Ao instanciar um objeto em um modelo, você pode especificar propriedades do objeto que regem o comportamento dessa instância específica do objeto. Por exemplo, as propriedades de uma máquina podem incluir o tempo de configuração, processamento e desmontagem, além de uma lista de materiais e um operador necessário durante a configuração. O criador do objeto decide o número e o significado das propriedades. As propriedades no Simio são fortemente tipadas e podem representar valores numéricos, booleanos, cadeias de caracteres, referências a objetos, datas e horas, etc. Como qualquer modelo que você constrói é, por definição, um objeto, você também tem a oportunidade de parametrizar seu modelo por meio de propriedades.
Deve-se observar que instanciar um modelo não é o mesmo que copiar ou clonar o modelo. Quando um modelo é usado como um bloco de construção na construção de outros modelos, ele pode ser instanciado muitas vezes em muitos modelos diferentes. A instância do modelo simplesmente contém uma referência à definição de um modelo que é usada repetidamente. A instância também contém os valores de propriedade, pois eles são exclusivos de cada instância. Entretanto, a lógica do modelo é compartilhada por todas as instâncias. Independentemente do número de instâncias criadas, há apenas uma definição de classe do objeto, e cada instância faz referência a essa única definição. Cada instância mantém as propriedades que são exclusivas dessa instância, mas consulta a definição para obter seu comportamento subjacente. Se o comportamento na definição for alterado, todas as instâncias usarão automaticamente esse novo comportamento.
Além das propriedades, os objetos também têm estados. Os estados também são fortemente tipados, mas sempre são mapeados para um valor numérico. Por exemplo, os booleanos true e false mapeiam para 1 e 0, e uma lista enumerada de nomes de estados mapeia para a posição do índice da lista (0, 1, ...., N) na lista. Um estado muda como resultado da execução da lógica dentro do objeto. As propriedades podem ser consideradas como entradas de um objeto e os estados podem ser considerados como respostas de saída que mudam durante a execução da lógica do objeto. Um estado pode representar uma contagem de peças concluídas, o status de uma máquina selecionada em uma lista de estados enumerados, a temperatura de um lingote aquecido em um forno, o nível de óleo em um navio sendo abastecido ou o nível de acúmulo em uma correia transportadora.
Há dois tipos básicos de estados: discreto e contínuo. Um estado discreto é um valor que só muda em momentos de eventos (chegada de um cliente, parada de máquina etc.). Um estado contínuo (por exemplo, nível do tanque, posição de um carrinho etc.) tem um valor que muda continuamente ao longo do tempo.
Um dos recursos de design interno importantes e exclusivos do Simio é o uso de uma estrutura de objetos de três níveis que separa um objeto em uma definição de objeto, uma instância de objeto e uma realização de objeto. A definição do objeto especifica o comportamento do objeto e é compartilhada por todas as instâncias do objeto. Uma instância de objeto é simplesmente uma instância desse objeto dentro de uma definição de objeto pai (por exemplo, uma instância de torno mecânico é colocada dentro de uma definição de célula de trabalho). A instância de objeto define os valores de propriedade para cada instância individual do objeto e esses dados de instância são, por sua vez, compartilhados por todas as realizações de objeto.
A realização do objeto é usada para representar uma realização específica de uma instância em uma hierarquia de modelo expandida. Por exemplo, toda vez que uma nova instância de célula de trabalho é colocada em uma definição de objeto pai (por exemplo, uma linha de produção), isso cria a necessidade de uma nova realização para o torno incorporado. Embora a definição da célula de trabalho seja criada a partir de uma única instância de torno, essa única instância de torno não pode manter os valores de estado correspondentes a várias realizações de torno que resultam de várias instâncias da célula de trabalho. As realizações de objeto fornecem o mecanismo para manter essas informações de estado hierárquico em um formato muito compacto. As realizações de objeto são criadas somente durante a execução do modelo e mantêm apenas as variáveis de estado do modelo e uma referência à instância do objeto pai. Essa é uma estrutura altamente eficiente que é crucial para aplicativos de grande escala, como modelos baseados em agentes que podem ter muitos milhares de realizações de objetos.
O exemplo anterior, no qual definimos uma nova definição de objeto (célula de trabalho) combinando outros objetos (máquinas e um robô), é um exemplo de como podemos criar definições de objetos no Simio. Esse tipo de objeto é chamado de objeto composto porque o criamos combinando dois ou mais objetos componentes. Essa abordagem de criação de objetos é totalmente hierárquica, ou seja, um objeto composto pode ser usado como um objeto componente na criação de objetos de nível superior. Essa é apenas uma maneira de criar objetos no Simio; há dois outros métodos importantes.
O método mais básico para criar objetos no Simio é definir os processos lógicos que alteram seu estado em resposta a eventos. Por exemplo, um objeto de máquina pode ser criado definindo-se os processos que alteram o estado da máquina à medida que os eventos ocorrem, como a chegada de peças, a quebra de ferramentas etc. Esse tipo de modelagem é semelhante à modelagem de processos feita nos sistemas de modelagem tradicionais em uso atualmente, como o Arena ou o GPSS. Um objeto definido pela descrição de seus processos nativos é chamado de objeto de base, que, por sua vez, pode ser usado como objeto componente para a criação de objetos de nível superior.
O método final para criar objetos no Simio é baseado no conceito de herança. Nesse caso, criamos um objeto a partir de um objeto existente, substituindo (ou seja, substituindo) um ou mais processos dentro do objeto ou acrescentando processos adicionais para ampliar seu comportamento. Em outras palavras, começamos com um objeto que é quase o que queremos e, em seguida, o modificamos e estendemos conforme necessário para que sirva ao nosso próprio propósito. Por exemplo, podemos criar um objeto de broca especializado a partir de um objeto de máquina generalizado, acrescentando processos adicionais para lidar com a falha e a substituição da broca. Um objeto criado dessa forma é chamado de objeto derivado porque é uma subclasse de um objeto existente.
Independentemente do método usado para criar um objeto, uma vez criado, ele é usado exatamente da mesma forma. Um objeto pode ser instanciado qualquer número de vezes em um modelo. Basta selecionar o objeto de interesse e colocá-lo (instanciá-lo) em seu modelo
Há seis classes básicas de objetos no Simio. Essas seis classes de objetos fornecem um ponto de partida para a criação de objetos inteligentes no Simio. Por padrão, todas essas seis classes de objetos têm muito pouca inteligência nativa, mas todas têm a capacidade de ganhar inteligência. Você cria versões inteligentes desses objetos modelando seu comportamento como uma coleção de processos orientados por eventos.
A primeira classe é o objeto fixo. Esse objeto tem um local fixo no modelo e é usado para representar as coisas em seu sistema que não se movem de um local para outro. Os objetos fixos são usados para representar equipamentos estacionários, como máquinas, postos de abastecimento, etc.
Os agentes são objetos que podem se mover livremente no espaço tridimensional. Os agentes também são normalmente usados para desenvolver modelos baseados em agentes. Essa visão de modelagem é útil para estudar sistemas compostos de muitos objetos inteligentes que agem independentemente e interagem entre si, criando assim o comportamento geral do sistema. Exemplos de aplicações incluem a aceitação do mercado de um novo produto ou serviço ou o crescimento da população de espécies concorrentes em um ambiente.
Uma entidade é uma subclasse da classe Agent e tem um importante comportamento adicional. As entidades podem se mover pelo sistema de objeto para objeto em uma rede de links e nós. Exemplos de entidades incluem clientes em um sistema de serviços, peças de trabalho em um sistema de fabricação, navios em um sistema de transporte, tanques em um sistema de combate e médicos, enfermeiros e pacientes em um sistema de fornecimento de saúde.
Observe que, nos sistemas de modelagem tradicionais, como o GPSS ou o Arena, as entidades são passivas e sofrem a ação dos processos do modelo. No entanto, no Simio, as entidades podem ter inteligência e controlar seu próprio comportamento.
Os objetos de link e nó são usados para criar redes nas quais as entidades podem fluir. Um link define um caminho para o movimento de entidades entre objetos. Um nó define um ponto inicial ou final para um link. Os links e nós podem ser combinados em redes complexas. Embora o link básico tenha pouca inteligência, podemos adicionar comportamento para permitir que ele modele um fluxo sem restrições, um fluxo de tráfego congestionado ou sistemas complexos de manuseio de materiais, como transportadores de acumulação ou sistemas de energia e livres.
A classe final do objeto é um transportador e é uma subclasse da classe de entidade. Um transportador é uma entidade que tem a capacidade adicional de coletar, transportar e entregar uma ou mais entidades. Por padrão, os transportadores não têm nenhum desses comportamentos, mas, ao adicionar lógica de modelo a essa classe, podemos criar uma ampla gama de comportamentos de transportador. Um transportador pode modelar um táxi, um ônibus, um AGV, um vagão de metrô, uma empilhadeira ou qualquer outro objeto que tenha a capacidade de transportar outras entidades de um local para outro.
Um recurso importante do Simio é a capacidade de criar uma ampla gama de comportamentos de objetos a partir dessas seis classes básicas. A estrutura de modelagem do Simio é neutra em relação ao domínio do aplicativo, ou seja, essas seis classes básicas não são específicas para manufatura, sistemas de serviços, saúde, militar etc. No entanto, é fácil criar bibliotecas voltadas para aplicativos, compostas por objetos inteligentes dessas seis classes projetadas para aplicativos específicos. Por exemplo, é relativamente simples criar um objeto (neste caso, um link) que represente um transportador de acumulação complexo para uso em aplicativos de manufatura. A filosofia de design do Simio orienta que esse tipo de lógica específica de domínio pertence aos objetos criados pelos usuários, e não aos programados no sistema principal.
A modelagem no Simio começa com objetos básicos - é a base sobre a qual os objetos de nível superior são construídos. Um objeto básico no Simio é um objeto fixo, agente, entidade, link, nó ou transportador que tem inteligência adicionada por um ou mais processos. Os processos conferem inteligência a um objeto, definindo a lógica que é executada em resposta a eventos.
Cada processo é uma sequência de etapas de processo que é acionada por um evento e é executada por um token. Um token é liberado pela etapa Begin e é simplesmente um thread de execução (semelhante às entidades no Arena). Um token pode ter propriedades (parâmetros de entrada) e estados (valores alteráveis em tempo de execução) que controlam a execução das etapas do processo. Você pode definir suas próprias classes de tokens que tenham diferentes combinações de propriedades e estados.
O poder de modelagem do Simio vem do conjunto de eventos que são acionados automaticamente para as seis classes básicas de objetos, juntamente com as etapas do processo que estão disponíveis para modelar as mudanças de estado que ocorrem em resposta a esses eventos. Dominar totalmente a arte de criar objetos inteligentes envolve aprender os eventos e a coleção de etapas de processo disponíveis, além do conhecimento e da experiência de como combinar essas etapas para representar uma lógica complexa.
Cada etapa no Simio modela um processo simples, como manter o token por um período de tempo, apreender/liberar um recurso, aguardar a ocorrência de um evento, atribuir um novo valor a um estado ou decidir entre caminhos de fluxo alternativos. Algumas etapas (por exemplo, Atraso) são etapas de uso geral que são úteis na modelagem de objetos, links, entidades, transportadores, agentes e grupos. Outras etapas são úteis apenas para objetos específicos. Por exemplo, as etapas Pickup e Dropoff são úteis apenas para adicionar inteligência aos transportadores e as etapas Engage e Disengage são úteis apenas para adicionar inteligência aos Links.
Cada classe de objeto tem seu próprio conjunto de eventos. Por exemplo, um link fornece eventos que são disparados quando as entidades entram e saem do link, fundem-se totalmente no link, colidem ou se separam de outras entidades que residem no link, movem-se dentro de um intervalo especificado de outra entidade etc. Ao fornecer a lógica do modelo para responder a esses eventos, podemos controlar completamente o movimento das entidades no link. Por exemplo, para adicionar a lógica de acumulação ao link, basta escrever um pequeno processo que é acionado quando uma entidade colide com a entidade que está seguindo e reatribui a velocidade da entidade para corresponder à velocidade da entidade que está seguindo.
As etapas do processo que são usadas para definir a lógica subjacente de um objeto não têm estado, ou seja, têm propriedades (parâmetros de entrada), mas não têm estados (respostas de saída). Isso é importante porque significa que uma única cópia do processo pode ser mantida pela definição da classe do objeto e compartilhada por um número arbitrário de instâncias do objeto. Se a lógica do processo for alterada, esse fato será automaticamente refletido por todas as instâncias do objeto.
Os estados de uma instância de objeto são mantidos em elementos. Os elementos definem os componentes dinâmicos de um objeto e podem ter propriedades (parâmetros de entrada) e estados (valores alteráveis em tempo de execução). Em um objeto, os tokens podem executar etapas que alteram os estados dos elementos que pertencem ao objeto.
Um exemplo de elemento é a estação que define um local em um objeto. As estações também são usadas para definir pontos de entrada e saída de um objeto. As entidades podem ser transferidas para dentro e para fora das estações (usando a etapa Transferir), e uma estação mantém uma fila de entidades atualmente na estação, bem como de entidades que estão aguardando transferência para a estação. Uma estação tem uma capacidade que limita as transferências para uma estação. Portanto, uma entidade que chega a um objeto por meio de um link só pode sair do link e entrar no objeto se a estação de entrada do objeto tiver capacidade disponível.
Embora a simulação tenha sido tradicionalmente aplicada ao problema de projeto, ela também pode ser usada em uma base operacional para gerar programações de produção para o chão de fábrica. Quando usada nesse modo, a simulação é um Programador de Capacidade Finita (FCS) e oferece uma alternativa a outros métodos de FCS, como algoritmos de otimização e sequenciadores de trabalho no tempo certo. No entanto, o FCS baseado em simulação tem várias vantagens importantes (por exemplo, velocidade de execução e lógica de programação flexível) que o tornam uma solução poderosa para aplicativos de programação
A simulação oferece um método simples e flexível para gerar uma programação de capacidade finita para o chão de fábrica. A abordagem básica da programação baseada em simulação é executar o modelo da fábrica usando o estado inicial da fábrica e o conjunto de pedidos planejados a serem produzidos. As regras de decisão são incorporadas ao modelo para tomar decisões de seleção de trabalho, seleção de recursos e roteamento. A simulação constrói um cronograma simulando o fluxo de trabalho através da instalação e tomando decisões "inteligentes" com base nas regras de programação especificadas. Os resultados da simulação são normalmente exibidos como trabalhos carregados em um gráfico de Gantt interativo que pode ser manipulado pelo usuário. Há um grande número de regras que podem ser aplicadas em um modelo de simulação para gerar diferentes tipos de programações com foco em medidas como maximizar o rendimento, manter alta utilização em um gargalo, minimizar trocas ou cumprir datas de vencimento especificadas.
Devido aos requisitos especiais impostos pelos aplicativos de agendamento (por exemplo, a necessidade de regras de decisão especializadas e a necessidade de visualizar os resultados na forma de um gráfico de Gantt interativo), os aplicativos de agendamento baseados em simulação geralmente empregam simuladores especializados projetados especificamente para essa área de aplicação. O problema dessa abordagem é que os simuladores especializados têm modelos de fábrica incorporados e orientados por dados que não podem ser alterados ou modificados para se adequarem ao aplicativo. Em muitos casos, esse modelo embutido é uma visão excessivamente simplificada das complexidades do chão de fábrica. Essa abordagem de modelo único limita muito a gama de aplicações dessas ferramentas. Alguns processos de produção podem ser adequadamente representados por esse modelo fixo, mas muitos outros não.
O Simio adota uma abordagem diferente, permitindo que o modelo de fábrica seja definido usando todo o poder de modelagem de uso geral da ferramenta. Assim, a gama de aplicativos não é mais restrita por um modelo fixo incorporado que não pode ser alterado ou modificado entre aplicativos. As complexidades do processo de produção podem ser totalmente capturadas pelo modelo Simio criado pelo usuário. Isso inclui não apenas a lógica dentro de cada centro de trabalho, mas também o manuseio de material necessário para mover os trabalhos entre os centros de trabalho.
Os requisitos especializados dos aplicativos FCS são atendidos pela incorporação de recursos no Simio para atender especificamente às necessidades do FCS. Esses recursos incluem o suporte a conjuntos de dados de trabalhos definidos externamente, juntamente com uma modelagem muito flexível de recursos e materiais. Embora esses recursos tenham sido projetados especificamente para liberar todo o poder de modelagem do Simio para aplicativos FCS, eles também são úteis em aplicativos de modelagem em geral.
Um conjunto de dados de trabalho do Simio permite que uma lista de trabalhos seja definida externamente para processamento pelo modelo de simulação. Os trabalhos são definidos em um conjunto de dados que contém uma ou mais tabelas, com relações definidas entre as colunas da tabela. O esquema específico para manter os dados do trabalho é arbitrário e pode ser definido pelo usuário para corresponder ao esquema de dados para os dados de fabricação (por exemplo, um sistema ERP). Normalmente, os dados do trabalho incluem datas de liberação e de vencimento, roteiros de trabalho, tempos de preparação e processamento, requisitos de material, bem como outras propriedades relevantes para o sistema de interesse. Os objetos no Simio podem fazer referência direta aos valores especificados no conjunto de dados do trabalho (por exemplo, tempo de processamento) sem conhecer o esquema que foi implementado para armazenar os dados.
Qualquer objeto no Simio pode servir como um recurso capacitado e pode ter seu próprio comportamento independente. Os recursos podem ser selecionados em uma lista com base em regras flexíveis, como tempo mínimo de troca ou tempo ocioso mais longo. . Os recursos também são compatíveis com regras muito flexíveis (data de vencimento mais próxima, menor folga restante, proporção crítica etc.) para selecionar entre trabalhos concorrentes que estão aguardando para utilizar o recurso. Por fim, o histórico de uso de tarefas para recursos pode ser exibido em um gráfico de Gantt interativo.
O elemento Materiais do Simio oferece suporte direto para modelar itens que podem ser consumidos e produzidos durante a execução do modelo. Os materiais também podem ser definidos hierarquicamente para modelar uma lista de materiais (BOM) tradicional para aplicativos de fabricação. Assim, uma etapa de fabricação pode ser modelada como o consumo de uma lista específica de materiais dentro da lista técnica hierárquica.
O Simio é uma nova estrutura de modelagem baseada nos princípios fundamentais da modelagem orientada a objetos. Ele é único nos seguintes aspectos: