You are on page 1of 52

Introdução à

Simulação
com Arena
Conceitos básicos de modelagem

Isaías Torres
Miguel A. Bueno da Costa
Apresentação
Esta apostila apresenta os primeiros passos para a construção de modelos de
simulação usando o simulador Arena da Rockwell Software. Além disso,
para que o aluno possa entender os conceitos básicos de Simulação de
Sistemas é apresentada uma pequena introdução com os conceitos e termos
básicos da área.

Quaisquer sugestões ou dúvidas podem ser encaminhadas para os autores


através do e-mail isaias@power.ufscar.br

Isaías Torres
Miguel A. Bueno da Costa

Universidade Federal de São Carlos – UFSCar


Departamento de Engenharia de Produção
Rod. Washington Luiz, km 235
13565-905 São Carlos, SP
TEL (16) 3351-8236
FAX (16) 3351-8240
www.dep.ufscar.br

Para referenciar esta apostila use:

TORRES, I.; COSTA, M.A.B. da; Introdução à Simulação com Arena:


Conceitos Básicos de Modelagem. São Carlos: Departamento de
Engenharia de Produção, Universidade Federal de São Carlos, 2005. 52 p.
Apostila.
Simulação de Sistemas
" Simulação [ETIM lat. Simulatio,onis] S.f. ação ou efeito de simular... 3 imitação do
funcionamento de um processo por meio do funcionamento de outro 4 teste,
experiência ou ensaio em que se empregam modelos para simular o ser humano, em
especial em casos de grande perigo de vida... ‹ s.analógica teste ou experiência em
que os modelos empregados têm comportamento análogo ao da realidade ‹ s. digital
experiência ou ensaio constituído por uma série de cálculos numéricos e decisões de
escolha limitada, executados de acordo com um conjunto de normas preestabelecidas
e apropriadas à utilização de computadores ... [Dicionário HOUAISS da língua
portuguesa, 1a. Edição, pág. 2575, Editora Objetiva, 2001]

Simulação de Sistemas é uma técnica tradicional da Pesquisa Operacional. É


uma das ferramentas mais importantes e úteis para analisar o projeto e a
operação de sistemas complexos.

Normalmente, a simulação de sistemas é utilizada quando não é possível


fazer experimentações no sistema real (devido, por exemplo, ao longo tempo
necessário para realizar o experimento, ou ao alto custo do experimento ou,
ainda, à dificuldade de tratar fisicamente o experimento). A simulação é
utilizada, também, quando não é possível desenvolver um modelo que
solucione o problema através de técnicas da Pesquisa Operacional que
otimizam a solução, como a Programação Linear e a Programação Dinâmica,
dentre outras. Neste sentido existe uma forte afirmação de M.Fox [1990] que
diz : "Se existe um algoritmo que otimiza a solução, utilize-o".

Por outro lado, segundo G.Gordon [1978], a quantidade de problemas que


podem ser resolvidos matematicamente é limitada. As técnicas matemáticas
requerem que o problema possa ser expresso num modelo matemático, de
formato particular. Ao se estudar um problema é essencial considerar os
métodos analíticos primeiro, e verificar se o grau de abstração, necessário
para obter uma solução analítica , não é muito severo. Quando não for
possível gerar soluções para um sistema por meios analíticos, é necessário
utilizar métodos de computação numérica, por exemplo a simulação.

R.Shannon [1975] comenta que, ao contrário de muitas tecnologias que são


classificadas de acordo com a disciplina na qual ela se origina (física ou
química por exemplo), a simulação pode ser aplicada a todas as disciplinas.
Incontáveis trabalhos, relatórios, teses de mestrado e doutorado, revistas e
livros mostram vários campos de aplicação para a Simulação, como
negócios, economia, marketing, educação, política, ciências sociais, ciência
2
comportamental, relações internacionais, transportes, estudos urbanos, e
muitos sistemas produtivos dos mais diferentes setores da economia.

Segundo T.Naylor [1971] o uso moderno do verbo “simular” tem origem no


trabalho de Von Newman & Ulam que, em 1940, associaram a expressão
Análise de Monte Carlo a uma técnica matemática que foi utilizada para
solucionar certos problemas de blindagem em reatores nucleares. O
tratamento experimental desses problemas seria muito caro e uma
abordagem analítica seria muito complicada.

A análise ou método de Monte Carlo consiste na amostragem experimental


com números randômicos. A simulação e o método de Monte Carlo se
confundem. Ambos são técnicas de computação numérica. Porém, segundo
G.Gordon [1978], a simulação é aplicada em modelos dinâmicos, enquanto a
análise de Monte Carlo é aplicada a modelos estáticos.

Em síntese, os modelos de simulação são valiosos e necessários, uma vez


que fórmulas fechadas e equações analíticas raramente conseguem
descrever, de forma adequada, sistemas reais complexos [Widman,1990].
Uma grande vantagem da Simulação é permitir estudos de sistemas reais
sem modificá-los, com velocidade e baixo custo. Alternativas de mudanças
para o sistema podem ser tentadas e estudadas de forma sistemática sem
interferir no sistema real [Baker,1982].

A rápida evolução do software e do hardware nos últimos tempos tem


facilitado muito o desenvolvimento de simuladores. Esses simuladores
podem ser de grande valia quando decisões precisam ser tomadas num
sistema que não é completamente conhecido devido às diversas interações
existentes no mesmo.

Definições para Simulação de Sistemas


Existe um grande número de definições para simulação. A seguir são
apresentadas algumas delas, provenientes de livros clássicos sobre o assunto,
e uma definição particular nossa. São feitas, também, algumas colocações
relevantes na busca de elucidar o que vem a ser simulação de sistemas.

R.Shannon : "Simulação é o processo de desenvolvimento de um modelo


de um sistema real, e a condução de experimentos nesse modelo, com o
propósito de entender o comportamento do sistema e/ou avaliar várias
estratégias (com os limites impostos por um critério ou conjunto de
critérios) para a operação do sistema". [Shannon,1975]

T.Naylor : "Simulação é uma técnica numérica para realizar


experiências em um computador digital, envolvendo certos tipos de
modelos lógicos que descrevem o comportamento de um sistema
econômico ou de negócios (ou um aspecto parcial de um deles) sobre
extensos intervalos de tempo". [Naylor,1971]
3
G.Gordon : "Simulação de sistemas é a técnica de solucionar problemas
observando o desempenho no tempo de um modelo dinâmico do
sistema". [Gordon,1978]

A definição de T.Naylor especifica experimentações em computadores,


enquanto que, tanto a definição dada por R.Shannon quanto a fornecida por
G.Gordon são amplas o suficiente para englobarem os modelos físicos
dinâmicos. Nesses modelos os resultados são derivados de medidas físicas,
em vez de computações numéricas. Porém, segundo G.Gordon [1978],
normalmente as pessoas referem-se à simulação em termos de modelos
matemáticos e computações numéricas.

Na nossa opinião simulação de sistemas "é o processo de construção de


um modelo representativo de um sistema real, e a experimentação no
mesmo. Os resultados das experimentações, após análises, apresentam
uma visão futura do sistema. As informações geradas auxiliam nas
tomadas de decisão, necessárias no momento presente, e contribuem
para uma melhor compreensão do sistema estudado".

Além de auxiliar na tomada de decisão, é importante enfatizar a


contribuição da simulação para a compreensão do sistema estudado pois,
como afirma D.Knuth [1969], "...freqüentemente nos enganamos, pensando
saber mais do que realmente sabemos sobre uma coisa, até que tentamos
simulá-la num computador". Através da simulação o usuário pode comparar
seus resultados com os do sistema e validar seus próprios processos de
raciocínio.

A simulação de sistemas é, portanto, uma metodologia experimental que


busca descrever o comportamento de um sistema. Esta metodologia constrói
formas de quantificar o comportamento observado, prevendo o
comportamento futuro. A proposta da simulação é produzir dados (e ela é
uma grande geradora de números) que, quando analisados, identificarão
importantes aspectos do sistema estudado, auxiliando na explicação,
compreensão e melhoria do mesmo.

Segundo G.Doukidis [1987] a função primária de um modelo de simulação é


examinar como o sistema se comporta durante um período de tempo. Para
atingir este objetivo, o modelo deve providenciar facilidades, para
representar o estado atual do sistema, e várias pré-condições que, se
satisfeitas, irão resultar num estado futuro.

Outra colocação bastante construtiva para se compreender melhor o que é


simulação de sistemas é dada por M.Shubik [1960] que diz : "Simulação de
um sistema ou de um organismo é a operação de um modelo (ou simulador)
que representa esse sistema ou organismo. O modelo é passível de
manipulações que seriam difíceis de levar a cabo na entidade que ele
representa, quer pelo custo, quer pela impossibilidade de fazê-las. As
propriedades concernentes ao comportamento de um sistema podem ser
inferidas estudando-se a operação do modelo".
4
O Processo de Simulação
Entende-se por processo de simulação o desenvolvimento de um modelo de
simulação, a experimentação do mesmo e a implementação dos resultados.

R.Shannon [1975] coloca que o desenvolvimento de um processo de


simulação é mais uma extensão das artes do que das ciências. Esta
característica talvez explique a dificuldade de se apresentar um mecanismo
sistemático para que um usuário interessado possa desenvolver simulações.
Apesar das dificuldades, pode-se estabelecer os elementos que participam de
um modelo de simulação e alguns passos que, se seguidos, podem ajudar um
“modelista”, mesmo novato, a ter um bom desempenho no desenvolvimento
de simulações.

Todo modelo de Simulação possui, de forma combinada ou isolada, os


seguintes elementos [Shannon,1975] :

• Componentes : são as partes (ou subsistemas) integrantes do


sistema. Entende-se por sistema, um conjunto de objetos, que
interagem entre si, para atingir um objetivo comum.
• Parâmetros e Variáveis : são elementos do sistema que recebem
valores. Os parâmetros podem receber valores arbitrários, enquanto
que as variáveis recebem valores associados à função a qual elas
estão atreladas. Existem dois tipos de variáveis : Endógenas
(Dependentes) e Exógenas (Independentes). Variáveis endógenas são
aquelas produzidas dentro do sistema ou resultantes de causas
internas. São também chamadas variáveis de estado (pois mostram o
estado do sistema) ou variáveis de saída (pois são responsáveis por
gerar e apresentar os resultados oriundos do sistema). Variáveis
exógenas, também chamadas variáveis de entrada, são originárias de
(ou produzidas por) causas externas.
• Relações Funcionais : são normalmente apresentadas na forma de
equações matemáticas , que relacionam as variáveis endógenas com
as exógenas. Essas relações podem ser de ordem determinística
(onde para uma dada entrada existe uma única saída) ou estocástica
(onde para uma dada entrada existe(m) incerteza(s) associada(s) à
saída).
• Restrições : são limitações, impostas pelo “modelista” ou pela
natureza do problema, que restringem os valores das variáveis.
• Objetivos : é o estabelecimento das metas do sistema e como elas
podem ser avaliadas. A manipulação do modelo é orientada de forma
a satisfazer esses objetivos.

Terminologia da Simulação
A terminologia utilizada na simulação não é única, mas há uma certa
tendência geral em aceitar a que é apresentada a seguir.
5
Modelo
É a representação de um sistema. Existem várias formas de se classificar
modelos. M.A.B.Costa [2001] apresenta uma explanação sintética sobre
modelos, reproduzida a seguir. Os modelos são tipificados como icônicos
(representação fiel do sistema, geralmente em escala diferente da real),
analógicos (as propriedades do sistema são representadas por outras
equivalentes) e simbólicos (as propriedades do sistema são representadas por
símbolos). Outro tipo de classificação separa os modelos em estáticos e
dinâmicos. Os modelos estáticos não consideram explicitamente a variável
tempo, possuem relações determinísticas e são, normalmente, tratados por
técnicas analíticas. Os modelos dinâmicos tratam com interações variáveis
no tempo (o estudo do sistema em um certo instante interfere no estado do
sistema no instante seguinte). Também existe uma caracterização importante
para os modelos, que diz respeito às situações discreta e contínua. Um
modelo discreto sofre alterações repentinas no tempo. As mudanças no
estado do sistema são expressas em termos do estado do sistema no início do
período. As mudanças durante um intervalo de tempo são calculadas e é
deduzido um novo estado do sistema para o final deste período e início do
seguinte. Um modelo contínuo sofre constantes e suaves alterações no
tempo. Uma situação bastante comum é tratar um sistema contínuo como
sendo uma seqüência de pequenas alterações discretas no tempo. Por fim,
também são diferenciados os modelos determinísticos dos estocásticos. Os
modelos determinísticos não tratam variáveis randômicas e as características
operacionais envolvem relações exatas. Quando pelo menos uma variável do
sistema se comporta de forma probabilística, diz-se tratar de um modelo
estocástico.

Entidade
Também chamada de transação, é um elemento essencial para o modelo.
Cada tipo de entidade (pessoa ou objeto) possui um ciclo de vida, onde
estados ativos e passivos se alternam. Uma entidade pode ser classificada
como temporária ou permanente. As entidades temporárias entram no
sistema, percorrem o seu ciclo de vida e abandonam o sistema. As
entidades permanentes executam a sua função sem abandonar o sistema. A
chegada de entidades ao sistema é gerada por um procedimento externo, ou
de acordo com a necessidade imposta pelo estado do sistema. Na visão da
simulação discreta convencional, as entidades temporárias são criadas
primeiro. Elas engajam atividades e requisitam recursos. Uma vez
terminada a atividade, a entidade é removida. Trata-se de uma transação
passiva, onde nenhum mecanismo considerado “inteligente” é assumido ou
modelado.

Atributo
São as propriedades características de cada entidade.

Atividade
É uma seqüência de procedimentos que causa mudança no sistema. A
atividade corresponde a um estado ativo, comum a uma ou mais entidades
6
(ou classe de entidades). A duração de uma atividade pode ser determinística
ou estocástica. Assume-se que uma atividade é indivisível. Uma vez
iniciada, ela não é mais interrompida. Segundo R.Reddy [1986] , as
atividades podem ser físicas ou cognitivas. As atividades físicas são as
formas convencionais de atividades, em torno das quais a simulação tem sido
desenvolvida. As atividades cognitivas são formas de tomada de decisão
racional e inteligente. Da mesma forma que as atividades físicas, as
atividades cognitivas possuem tempo finito de duração, que pode ser
randômico ou dependente das informações e/ou decisões do sistema.

Evento
As atividades são iniciadas e terminadas por eventos. Eventos são instantes
no tempo, enquanto atividades possuem durações no tempo. Evento é o
ponto no tempo no qual acontece alguma mudança no sistema modelado. O
processamento de um evento é realizado por uma rotina. Normalmente a
ocorrência de um evento dispara a ocorrência de outro(s) evento(s). Da
mesma forma que as atividades, os eventos podem ser físicos ou cognitivos.
As rotinas associadas aos eventos físicos são análogas às rotinas dos eventos
tradicionais da simulação discreta. Os eventos cognitivos envolvem
processamento de conhecimento, análogo ao procedimento cognitivo
desempenhado pelo tomador de decisão. Rotinas de eventos cognitivos irão
conter conhecimentos, representados por regras de produção e heurísticas,
que serão processados quando uma decisão precisar ser tomada
[Reddy,1986].

Acumuladores
São variáveis que permitem medir o desempenho do sistema. Possuem esse
nome porque vão acumulando valores no tempo, para depois receberem
tratamento de análise e gerar as estatísticas da simulação.

Relógio
Variável que marca o tempo da Simulação.

Lista de Eventos Futuros


Estrutura de dados que armazena os eventos previstos para ocorrer no
futuro. Esses eventos são armazenados por ordem cronológica de ocorrência.

Cenário
uma experimentação estruturada, com um conjunto de configurações de
dados e de entidades do sistema. Pode-se construir vários cenários para testar
várias hipóteses (Torres, 2002).

Replicação
É a execução do modelo no computador.

Rodada
É o período compreendido entre o início e o fim da replicação.
7
Variáveis de Estado
É o conjunto de variáveis que identificam o estado do sistema em um
determinado instante de tempo.

Recurso
É uma entidade estática do modelo que serve entidades dinâmicas. Esse
atendimento pode ser feito simultaneamente a várias entidades. Uma
entidade pode solicitar parte da capacidade ou a capacidade total do recurso
(Torres, 2002).

Filas
Constituem locais de espera onde as entidades dinâmicas esperam sua vez de
seguir através do sistema. As filas podem ser chamadas de áreas de espera ou
pulmões (buffers). Depois de dar entrada na fila a entidade é retirada
seguindo algum tipo de critério, por exemplo, FIFO (First In First Out),
LIFO (Last In Last Out), HVF (High Value First), LVF (Lower Value First)
ou um critério aleatório (Torres,2002).

Uma Metodologia para Desenvolver Simulações


Em linhas gerais a metodologia de trabalho adotada pela simulação de
sistemas não difere da metodologia apresentada pela pesquisa operacional.
Mesmo porque a simulação é uma técnica da pesquisa operacional que, junto
com a programação linear, ocupa um lugar de destaque em termos de
utilização prática, se comparada às demais técnicas. A Figura 1 apresenta
uma forma de visualizar as diversas etapas de um processo de simulação e
suas interações.

A seguir são comentadas as etapas do processo tradicional da simulação de


sistemas.

Definição do Problema e Plano de Estudo


Não é possível solucionar um problema sem conhecê-lo a fundo. Como
primeiro passo é preciso definir claramente os objetivos relacionados ao
problema a ser resolvido. Não é raro acontecer do pesquisador resolver
"corretamente o problema errado". R.Shannon [1975] faz uma afirmação
que, sem dúvida, se encaixa perfeitamente nos dias de hoje. Ele diz:
"...milhões de dólares são gastos anualmente trazendo respostas sofisticadas
e elegantes para questões erradas".

A formulação de um problema é um processo contínuo através do estudo do


mesmo. Novas informações surgem e trazem novas restrições, alteram
objetivos e fornecem novas alternativas de investigação. Essas informações
devem ser utilizadas para atualizar continuamente a formulação e definição
do problema.
8
A formulação do problema é uma etapa vital para todo o processo de
simulação. Deve ser feita com muito cuidado e competência. Nessa fase cada
informação relevante deve ser analisada a fim de definir o problema no nível
de objetivos, restrições e complexidade.

Definição do Problema e
Plano de Estudo

Coleta de Dados e
Representação do Modelo

Não
Válido?

Escolha da Ferramenta
Computacional e
Construção do Modelo

Verificação e
Validação do Modelo

Não
Válido?

Planejamento de
Experimentos

Execução do Modelo

Análise das Alternativas

Documentação e Implementação
dos Resultados

Figura 1: Etapas do Processo de Simulação (Law & Kelton, 1991, adap.)

É importante lembrar que o mundo é muito complexo. As situações-


problema contêm, normalmente, um grande número de variáveis,
parâmetros, relacionamentos, restrições e metas. Entretanto, se somente
alguns aspectos são de interesse do estudo, muitas características do sistema
real podem ser ignoradas. Trata-se, portanto, de abstrair da situação real os
aspectos relevantes, formando uma versão idealizada do evento real.

Deve-se pensar o projeto de simulação como o desenvolvimento de um


grande modelo simples. Conforme as metas estabelecidas vão sendo
atingidas, novos problemas vão sendo identificados, obtendo-se um maior
realismo. Isso levará à revisões do modelo e, conseqüentemente, obtenção de
melhores soluções. Trata-se portanto de um enriquecimento contínuo do
modelo.
9

O problema formulado dependerá da técnica e experiência do modelista em


obter informações e do seu relacionamento junto ao usuário. Este
relacionamento ditará a velocidade com que o modelo atingirá o ponto
desejado de realismo.

O modelista deve conhecer formas de extrair, do usuário, informações


suficientes e consistentes a respeito do problema tratado. Existem
metodologias específicas para auxiliar nesta etapa, que podem ser
encontradas em publicações ligadas às áreas de análise de sistemas , de
gerenciamento de projetos, e de aquisição de conhecimento (Inteligência
Artificial).

Em termos práticos, W.D.Kelton e outros (1998) colocam algumas questões


que deveriam ser feitas e respondidas para facilitar a identificação dos
objetivos da simulação, descrever o sistema de estudo, estabelecer o grau e
necessidade de animação, definir as entradas e saídas do modelo e
estabelecer os elementos de gestão do projeto de simulação. As questões são
as seguintes:

• O que deve conter o modelo de simulação?


• Qual o nível de detalhes necessário?
• Quais os recursos primários do sistema?
• Quais as atividades e processos associados ao sistema?
• Existem diagramas de fluxo e de processo disponíveis?
• Eles estão atualizados?
• Esses diagramas são seguidos ou são somente prescrições?
• Sob quais condições eles não são seguidos?
• Existem restrições físicas, tecnológicas ou legais na operação do
sistema?
• Essas restrições podem ser alteradas?
• Os procedimentos do sistema estão bem definidos?
• Como são tomadas as decisões?
• Existem dados disponíveis?
• Quem vai cuidar da coleta de dados?
• Quem vai cuidar do projeto de levantamento de dados, caso não
existam dados disponíveis?
• Qual tipo de animação é necessário?
• Quem vai verificar e validar o modelo, e como o fará?
• Quais as saídas necessárias?
• Quão geral ou específico deve ser o modelo?
• Quem vai fazer as análises de resultados?
• Quantos e quais cenários devem ser considerados?
• Quais os pontos de controle do projeto (milestones)?

W.D.Kelton e outros (1998) comentam que esta lista não é exaustiva mas
pode oferecer uma idéia geral do nível de detalhes necessários.
10
Coleta de Dados e Representação do Problema
Após estabelecer a situação a ser tratada, deve-se passar para a fase de
representação da mesma. Trata-se, no caso da simulação, de transladar o
sistema real para um diagrama de fluxo lógico. O diagrama representará o
problema através de associações feitas entre as entidades e as atividades.

Um diagrama bastante conhecido é o Diagrama Ciclo Atividade (Ativity


Cycle Diagram - ACD). Esses diagramas são constituídos por Filas e
Atividades, cujos relacionamentos estabelecem o Ciclo de Vida de cada
entidade participante do sistema. Detalhes da estrutura ACD podem ser
obtidos na obra de Clementson (1982) e na de Pidd (1996).

A utilização de um ACD é indicada para sistemas que possuem forte


estrutura de filas. Todas as entidades envolvidas, a cada instante da
simulação, estarão sempre em uma das situações : ativada (participando da
execução de uma atividade) ou esperando numa fila. O Estado de um sistema
modelado é definido pela situação de cada entidade componente. Um ciclo
de vida é utilizado para descrever uma seqüência de situações nas quais uma
entidade deverá atuar.

Em linhas gerais a representação dos diagramas ACD é feita através de


Atividade
círculos e retângulos, simbolizando respectivamente filas e atividades. Os
retângulos representam atividades (estados ativos) que envolvem,
Fila normalmente, a co-participação de diferentes entidades. As durações dessas
atividades são definidas baseadas em funções, probabilísticas ou não. Os
círculos representam filas (estados passivos), compostas de entidades que
aguardam alguma mudança no sistema. Essas mudanças acontecem com a
ocorrência de um evento, que liberará outras entidades que poderão ser
utilizadas na realização de uma atividade comum.

O Exemplo do Pub
O clássico exemplo do pub (Paul & Balmer apud Costa, 2001) envolve as
seguintes entidades: clientes, garçom, copo e porta. O leitor pode reparar que
uma entidade pode ser tanto um ser humano como um objeto. Pode ser
também uma entidade concreta ou abstrata. Por exemplo, uma informação
que circula num sistema pode ser entendida como uma entidade abstrata.
Também pode ser temporária no sistema (o cliente por exemplo) ou
permanente (o copo). Cada entidade possui o que se chama de “ciclo de vida
da entidade”. Esse ciclo de vida mostra toda a seqüência de atividades da
qual a entidade participará. Uma atividade envolve, na maioria das vezes,
mais de uma entidade. Por exemplo, como será visto a seguir, a atividade
Servir envolverá um cliente, um garçom e um copo. Na falta de qualquer
uma dessas entidades a atividade Servir não se realizará.

No estudo de qualquer sistema é muito importante definir o grau de


abstração no qual se deseja trabalhar. Esse grau de abstração definirá a
complexidade do modelo. Recomenda-se que se inicie o desenvolvimento do
modelo da forma mais simples possível, envolvendo somente as variáveis
11
que realmente são necessárias para representar o problema a ser estudado.
Na medida que os resultados da simulação não forem respondendo às
questões colocadas, diminui-se o grau de abstração do modelo,
acrescentando-se novas variáveis ao mesmo. Nesse exemplo a complexidade
tratada será pequena mas suficiente para atender à situação que se deseja
analisar, que é o tamanho da fila de espera dos clientes aguardando
atendimento. É comum num problema de fila o interesse pelas medidas de
tempo de espera e quantidade média de clientes na fila.

No pub o cliente chega, a partir de uma fila de clientes que estão fora do bar
(Outside), entra no sistema e nesse momento são gerados dois valores: um
que especifica o quanto ele vai beber (quantidade de drinks) e outro que
estabelece o intervalo entre a sua chegada e a do próximo cliente. Participam
da atividade Chegada duas entidades, a porta e o cliente. A entidade garçom
pode participar da atividade Servir ou da atividade Lavar, caso contrário ele
entra na fila de garçons ociosos
Servir

Fechada

Ocioso
Chegada

Lavar

Ciclo de Vida da Porta Ciclo de Vida do Garçom

O cliente entra no bar e fica numa fila de espera, aguardando ser servido.
Após ser servido, ele está pronto para beber. Encerrada a atividade Beber, e
de acordo com a quantidade de drinks gerada, ele volta para a fila de espera
ou sai do sistema, indo para a fila Outside.

Chegada Servir Beber

OK’
Espera Outside

OK

Servir Beber
Limpos Lavar Sujos

Ciclo de Vida do Cliente Ciclo de Vida do Copo

Uma restrição importante a ser respeitada na construção de um ACD diz que


as atividades e as filas devem aparecer intercaladas no diagrama. Não podem
ocorrer atividades em seqüência. Entre elas deve haver uma fila. E vice-
versa. No exemplo, para contornar essa questão, serão criadas duas filas
12
“fantasmas” chamadas OK e OK’. Nas filas “fantasmas” o tempo de espera
é nulo. Dado esse contexto, criam-se os ciclos de vida individuais de cada
entidade. A fila Outside funciona como fonte e sumidouro de entidades.. O
copo participa da atividade Servir, Beber e Lavar. Quando está parado ele
está em uma das filas de copos Sujos ou Limpos. Para todas as atividades
são gerados tempos de processamento, que podem seguir qualquer tipo de
distribuição, por exemplo, uma Normal, Triangular, Erlang, Weibull,
Uniforme, etc.

Após desenhar os diagramas individuais, para ter uma visão do sistema todo
basta agrupar os ciclos de vidas através das atividades comuns. No exemplo
obtém-se o seguinte diagrama:

Fechada Porta
Cliente
Copos
Chegada Garçom

Espera Outside

OK

Servir Beber
OK’

Ocioso

Limpos Lavar Sujos

O Diagrama de Ciclo-Atividade do pub terminado

Um diagrama apresentado na forma de um ACD é o primeiro passo para se


utilizar uma ferramenta computacional de geração de códigos automática.
No caso o software eLSE (extended Lancaster Simulation Environment)
gera todos os códigos na linguagem PASCAL, criando automaticamente o
programa que simulará o pub. O passo seguinte é levantar os dados que serão
responsáveis pelo estabelecimento das distribuições que representam a
chegada de clientes, tempos das atividades e quantidade de “drinks” de cada
cliente. É preciso estabelecer também o cenário que se deseja simular,
especificando os parâmetros de entrada, como a quantidade de garçons e
quantidade de copos. Feito isso, roda-se o programa, obtém-se os resultados
e através de uma análise dos mesmos, levanta-se o tempo médio na fila de
espera e a quantidade média de clientes nessa fila. Caso os resultados não
contemplem a política desejada de tempo máximo de espera na fila, cria-se
um novo cenário modificando, por exemplo, a quantidade de garçons ou a de
13
copos. Roda-se novamente, analisa-se os resultados e faz-se a opção por um
novo cenário ou não.

Essa é a síntese da simulação de sistemas. Criar um modelo representativo


de um sistema real e fazer experimentações nesse modelo, obtendo
informações que orientem nas tomadas de decisão para futuras alterações
nesse sistema real. É importante que o leitor sinta a grande vantagem que se
tem quando se faz experimentações num modelo computacional. No
computador é possível analisar muitas situações (cenários) diferentes, num
tempo extremamente pequeno.

Escolha da Ferramenta Computacional


Existem basicamente quatro tipos de ferramentas computacionais que podem
ser utilizadas no desenvolvimento de simuladores :
• Linguagens de Aplicação Geral;
• Linguagens Específicas de Simulação;
• Geradores Automáticos de Códigos de Simulação; e
• Ambientes de Simulação.

Existe uma contraposição entre flexibilidade e facilidade de


desenvolvimento, de acordo com a ferramenta escolhida. Por exemplo, uma
linguagem de aplicação geral permite alta flexibilidade no desenvolvimento
de um programa de simulação, porém exige grande conhecimento da
linguagem e demanda um grande esforço de programação. Por outro lado um
ambiente de simulação é muito amigável e permite fácil utilização por parte
do usuário, mas não oferece muita flexibilidade no desenvolvimento.

As linguagens de aplicação geral são mais poderosas ou menos poderosas de


acordo com suas características individuais. Linguagens fortes como
PASCAL e C são muito utilizadas no desenvolvimento de simulações.

Linguagens específicas de simulação (ou simplesmente linguagens de


simulação) já tiveram seus bons tempos, embora algumas delas (por
exemplo, GPSS (Gordon,1978, Bulgren,1982, Banks et al,1989, Schriber,
1991)) ainda sejam muito utilizadas graças às facilidades que proporcionam
no desenvolvimento de modelos de Simulação. Algumas linguagens de
simulação bastante conhecidas são: GPSS, SIMAN, SIMSCRIPT,
DINAMO, GASP, SIMPAC, CLS e SIMULA. Em relação à linguagem
SIMULA é interessante comentar que, apesar de ser uma das primeiras
linguagens específicas de simulação, hoje ela é reconhecida como a primeira
linguagem orientada a objeto que surgiu.

As principais características das linguagens específicas de simulação são


[Ogata,1992] :
• Produz uma estrutura genérica para criar modelos de simulação;
• Fornece uma maneira rápida de se converter um modelo de
simulação em um programa computacional;
• Fornece facilidades para alterações no programa computacional;
• Fornece saídas flexíveis, úteis para análises.
14
• Além das vantagens associadas à redução do tempo e à facilidade de
programação, as linguagens específicas de simulação também
fornecem bons mecanismos para localização de erros.

Os geradores automáticos de códigos de simulação surgiram para facilitar a


tarefa do modelista no processo de programação computacional. A partir de
uma representação formal do problema estudado, esse tipo de ferramenta
produz um programa fonte, que é uma versão executável do modelo
especificado. Alguns desses geradores chegam a desenvolver a quase
totalidade dos códigos computacionais exigidos. São exemplos desses
geradores: PASSIM [Shearn,1990], LANGEN [Crookes,1986], GERSIMUL
[Saliby,1991], AUTOSIM [Paul,1987], CAPS [Clementson,1982]. Segundo
R.Paul [1987] o CAPS foi o primeiro e é o mais famoso gerador de códigos
de simulação.

Os ambientes de simulação são sistemas que tem por objetivo auxiliar o


usuário no desenvolvimento de modelos de simulação, atuando em várias
etapas do processo, e não somente na geração de códigos. Uma outra etapa
na qual um ambiente de simulação normalmente atua é na análise dos
resultados da simulação. São exemplos desses ambientes: KBMC
(Knowledge-Based Model Construction) [Murray,1988], ROSS [McArthur
et al,1986], KBS (Knowledge-Based Simulation) [Reddy et al,1986],
SIMKIT [Harmon & King,1985].

Desenvolvimento do Modelo Computacional


O desenvolvimento do modelo vai depender da ferramenta computacional
escolhida. O resultado poderá ser um simulador tradicional ou um complexo
sistema de simulação (por exemplo um sistema inteligente ou baseado em
conhecimento).

Nessa fase são criados os códigos de simulação, por geração automática ou


não. A dificuldade, e conseqüente velocidade no desenvolvimento do
simulador, estará associada tanto à ferramenta computacional utilizada,
como à complexidade do modelo e experiência do modelista.

Verificação e Validação do Modelo


Duas fases muito delicadas no processo de desenvolvimento de modelos de
simulação correspondem à verificação e à validação desses modelos.
Verificação do modelo é a etapa onde o modelista checa se o modelo
desenvolvido corresponde ao idealizado. Neste ponto é verificado se o
modelo foi construído corretamente. Nesta fase busca-se fazer testes
exaustivos no simulador. O modelista precisa se convencer de que o
simulador está correto e rodando bem.

Na verificação de um modelo deve-se variar os valores dos parâmetros de


entrada (inclusive utilizando as fronteiras do intervalo de valores) e analisar
se os resultados são coerentes. Nesse momento é possível sentir a força da
15
simulação, que agiliza a etapa de testes, tornando-os viáveis em termos de
tempo e dinheiro.

A validação é a etapa onde será checado se o modelo desenvolvido


representa bem o sistema real. É a busca da resposta para a pergunta: foi
desenvolvido o modelo correto?. A idéia é passar confiança ao usuário,
mostrando que qualquer experimento com o modelo irá gerar resultados que
coadunam com a realidade do sistema estudado.

A validação é normalmente conseguida executando o modelo e comparando


seus resultados com os oriundos do sistema real. Se os resultados da
simulação se aproximarem dos valores reais, dentro de um nível de
confiança desejado, o simulador será validado.

Segundo Annino [1981] a técnica de validação mais efetiva é apresentar o


programa para alguém familiar ao sistema em estudo. Num esquema
interativo entre o especialista no funcionamento do sistema real e o
modelista, será mais fácil corrigir desvios do modelo em relação ao sistema
real.

A validação do modelo é extremamente importante pois os simuladores


normalmente tendem a parecerem reais e, tanto o modelista como o usuário,
passam a acreditar nele.

Planejamento dos Experimentos


O planejamento de experimentos tem dois objetivos: (1) rodar muitas vezes
o modelo, a baixo custo e de forma rápida, e (2) providenciar uma estrutura
para o processo de aprendizado dos investigadores, para que os mesmos
possam aprender mais a respeito do sistema.

O planejamento de experimentos pode ser dividido em duas fases :


estratégica e tática. No nível estratégico é importante projetar os
experimentos visando alcançar as metas estabelecidas. Portanto deve-se
combinar os valores dos parâmetros que “otimizarão” as variáveis de
respostas, e explicar as relações entre as variáveis de respostas e os fatores
controláveis do sistema.

É a fase que consiste em executar o modelo computacional sob os diversos


cenários de simulação estabelecidos. Os cenários são tratados
individualmente, com a preocupação de se estabelecer exatamente os pontos
de início e fim da simulação, para efeito de análises estatísticas. Esses pontos
correspondem à fase transiente (warm-up) e ao tempo total de simulação
(length of simulation) da rodada (running).

É bom lembrar que a simulação, a partir de situações iniciais diferentes,


oferece linhas de ação alternativas para o tomador de decisão. E como a fase
de execução do modelo é, via de regra, extremamente rápida, pode-se abusar
do número de cenários a serem rodados.
16
Execução do Modelo
A execução do modelo é a fase tática do planejamento de experimentos.
Nenhum projeto de simulação pode ser considerado completo se não for
aceito, entendido e utilizado. Estabelecido o projeto dos experimentos, a fase
tática determinará como cada um dos testes especificados nos experimentos
serão executados. Para isso devem ser definidas as condições iniciais, e
como elas afetam o equilíbrio do sistema. O pano de fundo dessa fase é a
necessidade de diminuir a variância das respostas e, ao mesmo tempo, buscar
minimizar o tamanho das amostras necessárias.

Os problemas associados ao início da Simulação podem ser amenizados


excluindo-se dados gerados durante um certo período inicial, para efeito de
contabilidade, ou escolhendo-se condições iniciais que diminuam o tempo
necessário para alcançar o equilíbrio.

O resultado dessa fase é o estabelecimento de diversos cenários que serão


rodados.

Análise das Alternativas de Ação


Esta fase consiste em fazer inferências a partir dos dados gerados na
execução do modelo. É uma fase crítica, demorada, difícil e muito
importante. Uma saída de simulação é uma avalanche de números, que
precisam ser tratados e analisados. A análise dos resultados da simulação é
comumente realizada por especialistas caros e pouco disponíveis. Para
suavizar os problemas enfrentados nessa fase surgiram ferramentas
computacionais, já disponíveis em boa parte das linguagens, geradores e
ambientes de simulação visuais (gráficos e imagens).

Tão somente a disponibilidade de ferramentas visuais não soluciona o


problema de análise de resultados. É necessário possuir profissionais com
condições de realizar análises concretas ao final do processo de Simulação.
Nos últimos anos tem ocorrido a utilização de sistemas especialistas para
desempenhar o trabalho dos analistas de resultados de Simulação. Esses
sistemas especialistas, contendo o conhecimento de expertos na área em
estudo, analisam os resultados fornecidos pelo simulador, orientando o
tomador de decisão.

Documentação e Implementação
Uma das grandes falhas nos projetos, em geral, é a apresentação ruim dos
resultados para o usuário. Isso é uma falha de implementação. O pouco
tempo gasto na implementação normalmente não é suficiente para as tarefas
existentes nessa fase. Fazem parte dessas tarefas: lapidação e ajuste do
modelo, treinamento do usuário e a garantia da validade dos resultados. Essa
última tarefa, que só é possível com a implementação, tende a ser, segundo
R.Shannon [1975] o problema mais difícil a ser enfrentado pelo analista.

A documentação está intimamente ligada à implementação. Além de facilitar


a implementação e a possível necessidade de alterações no modelo, auxilia o
17
modelista em futuros projetos, além de forçá-lo a questionar seus próprios
procedimentos.

Conclusão do Capítulo
A Simulação de Sistemas faz análises de problemas. Ela serve como
ferramenta para a análise do comportamento do sistema sob condições
especificadas pelo usuário.

A simulação pode evitar problemas que ocorrem quando se faz


experimentações com o sistema real. Por exemplo, na simulação :

• Não é necessário interromper as operações do sistema real;


• É fácil manter as mesmas condições de operação para cada réplica
do experimento;
• É possível explorar muitos tipos de alternativas na experimentação;
• O consumo de tempo e dinheiro é extremamente menor para se obter
o mesmo tamanho de amostra.
• R.Shannon [1975] coloca que o analista deve considerar o uso de
simulação sempre que :
• Uma formulação matemática completa do problema não exista, ou
métodos analíticos para resolver o modelo matemático não foram
ainda desenvolvidos;
• Métodos analíticos estejam disponíveis, mas os procedimentos
necessários para a utilização dos mesmos são tão complexos e árduos
que a simulação acaba fornecendo um método mais simples de
solução;
• Soluções analíticas existam e sejam viáveis em termos de
complexidade, mas estão além da habilidade matemática do pessoal
disponível. O custo de desenvolvimento, teste, e execução da
simulação deve ser avaliado, comparativamente ao custo de
obtenção de ajuda externa;
• A Simulação pode ser a única opção possível dadas as dificuldades
de observação de fenômenos no ambiente real.

Uma vantagem adicional da Simulação é a sua contribuição para se


compreender melhor e aprender a respeito do sistema. O desenvolvimento e
utilização de um modelo de Simulação permitem ao projetista enxergar e
manipular o sistema. Isso leva a um crescente entendimento do mesmo,
permitindo que modelos simples de simulação sofram alterações até se
tornarem complexos o suficiente para representar bem a situação estudada.
18

Basic Process I: O Problema do Banco


Em um banco os clientes chegam a uma taxa exponencial de 230 segundos.
Ao chegar, cada cliente deve ser atendido pelo caixa ou pelo gerente (cerca
de 10%). No caixa os atendimentos variam de 0.5 a 9.0 minutos com um
valor mais provável de 3.0 minutos. Na gerência os valores são 0.5, 9.0 e 4.0
respectivamente. Cerca de 10% dos clientes atendidos pelo gerente devem
voltar para o caixa. Nesse caso, eles têm prioridade de atendimento e passam
na frente dos demais clientes. Vamos considerar um tempo de 2 minutos
para cada deslocamento dentro do banco.

Estabelecendo o processo
Como primeira versão vamos criar um modelo com a lógica geral do
funcionamento do banco, usando os módulos do painel Basic Process. Então,
anexe esse painel no Arena. Depois de terminar teremos algo assim:

Passo 1. Chegada dos clientes


Insira um módulo CREATE e coloque a taxa de chegada exponencial com
média 230 segundos. Dê o nome de Chegada de Clientes ao módulo.
Preencha os campos como na figura abaixo.
19

Não são permitidos os seguintes elementos nos nomes dos


módulos: acentos, vírgulas, dois pontos e palavras reservadas do
Arena como COUNT. Os caracteres especiais @ _ % . ? # são
aceitos.

O módulo CREATE faz com que o simulador crie entidades que se movem
pelo modelo capturando recursos e executando outros procedimentos
lógicos. No nosso modelo uma entidade representa um cliente que chega ao
banco. A saída das entidades-clientes do modelo corresponde à saída do
banco.

Válido? Logo após chegar à porta do banco, o cliente deve decidir qual o seu destino:
o guichê de atendimento ou a gerência. Como enunciado anteriormente há
uma chance de 10% de que o cliente vá para a gerência. Para representar a
escolha baseada em probabilidades ou em condições usamos o módulo
DECIDE.

Observe na figura acima que você pode especificar escolhas baseadas em


probabilidade (by chance) ou em condições. No nosso caso, usaremos 90 %
(que seguem para o caixa) e 2-way by chance. Você pode colocar quantos
ramos de saída quiser usando as opções N-way.

Passo 2. Atendimento no caixa


Neste momento temos 2 módulos colocados no modelo. O módulo que
chamamos de Caixa? tem duas saídas. Na saída marcada como TRUE vamos
executar o Atendimento e no outro a Falar com o Gerente. Para isso
20
coloque dois módulos PROCESS e os conecte às saídas. Preencha o
atendimento no caixa como segue:

Observe que em Logic, a ação foi colocada como Seize Delay Release. Isso
quer dizer que nesse bloco um recurso será capturado (seize), haverá um
intervalo de tempo correspondente ao processamento no caixa (delay) e em
seguida ocorrerá a liberação (release) do recurso.

Temos que definir o recurso que será utilizado no processamento. Para isso
clique em Add e preencha a janela assim:

Isso define automaticamente a existência de um recurso (que será capturado


pelas entidades-clientes) chamado Caixa_R com capacidade de processar
uma peça por vez.
21
É comum que nos modelos do Arena se use uma forma de
padronizar os nomes dos elementos da simulação. Isso é
importante porque, quando o modelo se torna complexo,
confusões com nomes tornam difícil a solução de problemas.
Dependendo do tipo, é acrescido um sufixo diferente:

Elemento Sufixo Exemplo


Recurso _R Caixa_R
Fila _Q Caixa_R_Q
Storage _STO Armazenagem_STO
Estação _STA Chegada_sta
Variável _V QtdeProduzida_V
Atributo _ATT Tipo_ATT

Nessa versão do Arena os sufixos acrescentados são do tipo


.Queue, .Station etc. Apesar de mais mnemônicos, se você optar
por manter essa representação tenha cuidado para não colocar
nomes grandes pois seu trabalho ficará mais difícil na hora de
digitar ou ler o conteúdo nos campos do software.

Passo 3. Atendimento na gerência


Para o processo Falar com o Gerente, preencha assim:

Depois de conversar com o gerente o cliente pode ir para casa ou voltar ao


caixa (10%). Para modelarmos isso, acrescentaremos outro bloco DECIDE.
Chame-o de Voltar ao Caixa?. Coloque o valor 10% para o campo Percent
True (0-100%).
22
Passo 4. Priorizando os clientes em uma fila
Os clientes que conversaram com o gerente têm que ter prioridade de
atendimento pelos caixas. Isso será conseguido mudando a regra de
ordenação na fila do caixa, Atendimento.Queue. A regra padrão do
ordenamento nas filas é FIFO (First In-First Out), ou seja os primeiros a
entrar serão os primeiros a sair. A estratégia que adotaremos é criar um
atributo chamado Prioridade_att, atribuir-lhe um valor alto e alterar o
regime da fila Atendimento.Queue. Como esse valor será somente atribuído
na gerência, somente as entidades-clientes que passarem por lá e voltarem ao
caixa é que terão esse atributo com valor alto.

Apesar do atributo Prioridade_att ser definido apenas para as


entidades que passarem pela gerência, todas as demais
entidades terão o atributo com valor nulo.

Para definir o atributo e designar um valor para ele faça o seguinte:

1. Insira um módulo ASSIGN (do Basic Process) ligado ao ramo TRUE do


módulo Voltar ao Caixa?

O módulo ASSIGN serve para alterar valores de vários elementos do


modelo como variáveis, atributos, mudar figuras, etc.

2. Dê um duplo-clique sobre o módulo e dê o nome de Alterar Prioridade.


3. Em um módulo ASSIGN podem ser feitas várias atribuições, executadas
na ordem em que aparecem no módulo. Clique no botão Add e preencha
os valores abaixo:

3. Clique em OK e depois em OK novamente.

Para alterar o regime da fila Atendimento.Queue faça o seguinte:

1. Selecione a planilha Queue.


2. Na planilha, vá para o campo Type e selecione Highest Attribute Value.
Em Attribute Name selecione Prioridade_att.
23
Finalmente, conecte a saída do módulo Alterar Prioridade com a entrada do
módulo Atendimento.

Para fazer os conectores ficarem retos, sem inclinação aperte a


tecla SHIFT enquanto estiver colocando os pontos da linha de
conexão.

Passo 5. Saída dos clientes


Para modelar a saída dos clientes vamos usar o módulo chamado DISPOSE,
usado para destruir uma entidade do modelo. Nomeie esse módulo como
Saída do Modelo.

Toda que vez que uma entidade não for mais necessária ela deve
ser retirada do modelo para que a simulação rode mais rápido.

Para finalizar, ligue as saídas dos módulos do caixa (Atendimento) e da


saída FALSE de Voltar ao Caixa? à entrada do módulo Saída do Modelo.

Passo 6. Rodando o modelo


Rode o modelo usando o menu Run-Go, pressionando a tecla F5 ou use a
barra de ferramentas mostrada abaixo:

Adicionando um pouco mais de animação ao modelo


A animação é um recurso muito útil para transmitir as idéias representadas
no modelo e também um ótimo recurso para verificação e validação. Sempre
adicione os elementos de animação tão logo que possível.

Estabelecendo as características da entidade


Nesta versão do Arena existe uma planilha para as características da
entidade. Para acessar essa planilha, clique no ícone mostrado à esquerda,
situado no Basic Process template. Por hora vamos alterar apenas a figura do
tipo de entidade Cliente. Este tipo foi incluído nessa planilha no momento
em que preenchemos o campo Entity Type do módulo CREATE.

Coloque como figura inicial (Initial Picture) o valor Picture.Woman.


24
Para modificar ou acrescentar as figuras da animação das entidades usamos o
menu Edit-Entity Pictures... Ao acionar esse menu surgirá a janela para
edição de figuras.

Animando um recurso
Nas versões mais antigas do Arena os elementos de animação dos recursos
eram colocados automaticamente quando se usava um SERVER do painel
COMMON. Isso ainda é válido mas apenas para os módulos do diretório
OldArenaTemplates. Assim, temos que acrescentar manualmente os
elementos da animação.

Para criarmos a animação do caixa e do gerente faça o seguinte:

1. Selecione na barra de ferramentas Animate, o ícone da animação de


recursos mostrado ao lado. Se a barra não estiver disponível exiba-a
através do menu View-Toolbars...

2. Edite as imagens para o recurso na janela que irá surgir. Observe que
há 4 estados padrão (auto-estados) que o recurso pode assumir
(IDLE, BUSY, INACTIVE e FAILED). Copie as imagens da
biblioteca (à direita) para os devidos estados selecionando o estado
de destino e a figura de origem. Clique no botão << para transferir a
imagem. Não se esqueça de selecionar o nome do recurso que está
sendo modificado. Nesse caso, Caixa_R.

4
25
3. Você pode editar as figuras transferidas (e até mesmo as que se
encontram na biblioteca) clicando duas vezes sobre a figura de um
dos estados. Surgirá uma janela na qual você fará a edição usando a
barra de ferramentas Draw. Depois que tiver feito as alterações,
feche a janela clicando sobre o ícone × no canto superior direito da
janela.
4. Clique em OK. Se perguntado se deseja salvar a biblioteca, clique
em Não.
5. Ao fechar a janela, clique na área do modelo e então será desenhado
o ícone do recurso. Ajuste o tamanho e a posição dele.

Criando um gráfico para as filas do banco


Para monitorarmos o modelo não basta a animação dos recursos e entidades.
Portanto, vamos adicionar um gráfico para exibir a evolução do tamanho das
filas no atendimento e na gerência ao longo do tempo. Essas filas foram
adicionadas automaticamente no nosso modelo e são representadas como
linhas azuis logo acima dos módulos Atendimento e Conversa com o
Gerente.

Além de linhas as filas podem ser representadas por pontos. Para


alternar entre as representações, clique duas vezes sobre ela
para editá-la.

Para adicionar o gráfico faça o seguinte:

1. Clique sobre o botão Plot na barra de ferramentas de animação.

2. Na janela Plot, clique no botão Add.

3. Na janela que surgir, clique com o BOTÃO DIREITO sobre o campo


Expression e selecione a opção Build Expression
26
2

4. No Expression Builder clique em Basic Process Variables, em Queue e


depois em Current Number in Queue.
5. Selecione na lista suspensa Queue name o nome da fila do caixa,
chamada de Atendimento.Queue. Clique em OK.

6. Ao retornar à janela Plot Expression, coloque como Maximum o valor


20.0 e # History Points igual a 600. Clique em OK.
7. Ainda na janela Plot Expression, altere a cor a ser usada para esse valor
clicando no botão Color.
8. Repita todo o processo para a fila do gerente, Conversa com o
Gerente.Queue.
9. Clique em OK e retorne à janela Plot e clique em OK, novamente.
10. Imediatamente após isso o cursor do mouse será o de uma cruz ou mira.
Selecione na janela do modelo uma área retangular para o gráfico.
27
11. Pronto.

É indicado que se faça uma legenda ao lado do gráfico para que


se saiba quais são os dados exibidos. não se esqueça de colocar o
título do gráfico.

O modelo com a animação dos recursos e com o gráfico.


28

Basic Process II
Neste capítulo vamos continuar a detalhar o modelo do banco e usar os
módulos do painel Basic Process que ainda não foram usados. Além disso
vamos aplicar o conceito de facility-based modeling e usar dois módulos do
painel Advanced Transfer: ENTER e LEAVE.

Transformando nosso processo em uma instalação


Até agora no nosso modelo consideramos apenas elementos lógicos do
processo de atendimento no banco. Não nos preocupamos com os
deslocamentos entre os locais de atendimento. Na verdade, toda a lógica do
nosso modelo se passa em um ponto imaginário, sem dimensões. Essa visão
que considera não só os processos mas também os dispositivos de
movimentação e os locais em que são executadas as atividades é chamada no
Arena de modelagem baseada em facilidades. Não é um conceito importante
mas apenas um nome para uma forma de se modelar no Arena.

Os locais onde as atividades (a lógica) são executadas no Arena são


chamados de estações (stations). Quando há transporte ou movimentação ela
se dá entre estações diferentes. Estações representam postos de trabalho, ou
estações de trabalho em uma linha ou qualquer outro local para onde as
entidades devam partir ou devam chegar. No nosso modelo teremos as
estações Entrada, Caixa, Gerência e Saída. Na estação entrada ocorrerá a
chegada das entidades-clientes e a escolha do seu destino. Na estação Caixa
e Gerencia ocorrerão os respectivos processamentos e em Saida a saída da
entidade do modelo.

Do ponto de vista da implementação do conceito de estação no


Arena, uma estação nada mais é do que um atributo que pode ser
alterado a qualquer momento.

Para estipular quando uma entidade está entrando em uma estação ou saindo
de uma, existem dois módulos do painel Advanced Transfer chamados
ENTER e LEAVE.

O módulo ENTER serve para indicar a entrada de uma entidade em uma


estação. Além disso serve para liberar algum dispositivo de transporte usado
para levar a entidade até o seu destino. Permite que se especifique também o
tempo de descarregamento se existir.
29

O módulo LEAVE serve para indicar a saída de uma entidade de uma dada
estação. Para sair da estação uma entidade pode requisitar dispositivos de
manuseio de materiais como esteiras, empilhadeiras e outros transportadores.
Além disso, podemos especificar o tempo de carregamento da entidade no
transportador.

Como no banco os deslocamentos se dão a pé, estaremos usando uma


modalidade de transporte chamada de rota, que se traduz no Arena como
apenas um tempo de deslocamento. Para a animação estaremos incluindo os
caminhos por onde as entidades-clientes estarão transitando.

Criando a estação Caixa


Para criarmos uma estação para o guichê acrescentaremos um módulo
ENTER antes do processo Atendimento e um módulo LEAVE depois dele.

1. Desconecte o módulo Atendimento nas duas extremidades


2. Acrescente os módulos ENTER como segue:

Observe que o campo Station Name é que contém o nome que o Arena
usará para se referir à estação, Caixa.Station. Um nome alternativo seria
Caixa_sta. Se você quiser usar “Caixa” como o nome da estação você
precisará mudar o campo Name.

O campo Delay representa o tempo de descarregamento. O campo Transfer


In serve para liberar um sistema de transporte. Como usaremos rotas, não há
necessidade de liberarmos os movimentadores.

3. Adicione agora o módulo LEAVE e o conecte ao módulo Atendimento.


30

A estação Caixa e seus pontos de entrada e saída.

4. Preencha o módulo LEAVE como segue:

O campo Delay nesse caso se refere ao tempo para carregamento da entidade


no transportador ou para se preparar para o deslocamento. Na parte inferior
da janela podemos especificar vários tipos de movimentação através do
campo Connect Type além de rotas. Observe que temos um deslocamento
de 2 minutos até a estação Saida.Station que ainda não criamos.

Criação da estação de saída


1. Desconecte o módulo DISPOSE chamado Saida do Modelo.
2. Acrescente um módulo ENTER imediatamente antes dele e preencha os
campos como segue: Name = Saida e Station Name = Saida.Station.

A estação Saida
31
Criação da estação da gerência
1. Apague a conexão anterior ao módulo PROCESS chamado Falar
com o Gerente e as duas que saem do módulo DECIDE chamado
Voltar ao Caixa?.
2. Acrescente um módulo ENTER antes do módulo Falar com o
Gerente e dê o nome de Gerencia.
3. Acrescente dois módulos LEAVE depois do módulo Voltar ao
Caixa? e dê a eles os nomes de Segue para a Saida e Segue para o
Caixa. Segue para a Saida deve ter um tempo de deslocamento de 3
minutos até a estação Saida.Station e Segue para o Caixa o mesmo
tempo até a estação Caixa.Station.

A estação Gerencia

Criação da estação de entrada


O processo para a criação dessa estação é um pouco diferente. As entidades
depois de criadas vão ter que entrar imediatamente em uma estação.
Similarmente à estação da gerência haverá duas saídas da estação Entrada:
uma em direção à estação do caixa e outra em direção à gerência.

1. Conecte um módulo ENTER entre os módulos Chegada de Clientes e


Caixa?. Dê a ele o nome de Entrada.
2. Conecte dois módulos LEAVE nos ramos que deixam o módulo Caixa?.
O ramo TRUE levará à estação Caixa.Station em um tempo de 2 minutos
e o ramo FALSE levará à estação Gerencia.Station em 3 minutos. O
primeiro se chamará Vai para o Caixa e Segue para a Gerencia.
3. O resultado deverá ser este:

A estação Entrada
32
Animando as rotas entre as estações
Se você rodasse o modelo agora não veria nada diferente da versão anterior
do nosso modelo. Para que você veja os deslocamentos entre as estações são
necessárias duas coisas basicas: que o tempo de deslocamento entre as
estações não seja nulo e que os elementos de animação dos movimentadores
estejam definidos.

1. Selecione o botão Route na barra de ferramentas Animate Transfer.

2. Clique em uma área vazia na janela do modelo e vá clicando pelos locais


por onde você deseja que a rota passe. Quando estiver já com o
penúltimo ponto dê um duplo-clique para finalizar a rota.
3. Agora dê um duplo-clique nos símbolos vermelhos que representam
estações. Ao surgir a janela de diálogo selecione o nome da primeira
estação, por exemplo, Entrada.Station. Repita esse processo para a outra
estação da rota, por exemplo, Caixa.Station.
4. Siga o procedimento anterior e crie as rotas a seguir: Entrada-Caixa,
Entrada-Gerência, Caixa-Saída, Gerência-Caixa e Gerência-Saída.
5. Para posicionar as rotas selecione-as com uma janela e as arraste para o
local desejado. Para mover apenas as estações, clique sobre elas e as
arraste. Posicione as rotas em posições tais que ocupariam em um banco
que você conheça.

Exemplo de como posicionar rotas para o futuro detalhamento da


animação.
38

Objetivo
Demonstrar como utilizar a linguagem de automação VBA presente no
software de simulação de eventos discretos Arena. O Arena é um produto da
Rockwell Software e mais informações podem ser encontradas no site da
empresa

O que é VBA?
VBA é a sigla para Visual Basic for Applications, ou seja, Visual Basic para
Aplicativos. O VBA é uma linguagem de programação derivada da linguagem
Visual Basic e descendente do antigo BASIC. O VBA constitui a forma dos
softwares da suíte Office da Microsoft serem personalizados, o que permite que
o usuário escreva novas funções para o Word, Excel, Powerpoint, etc. Além
desses existem outros softwares que suportam o VBA como o AutoCAD da
Autodesk, o Corel Draw e o Arena.

O que dá para fazer com VBA?


As possibilidades do VBA dependem do que o criador do software
disponibilizou para a interface de programação. No caso do Office é possível
abrir arquivos, acessar bancos de dados, manipular arquivos, formatar
documentos e até manipular a interface do programa. Com VBA você pode
também criar telas personalizadas (chamadas de formulários) para seus
programas. Você pode também trocar automaticamente dados entre eles, como
por exemplo, importar uma listas de clientes do Excel para o Word.
Em geral os programas disponibilizam objetos lógicos que permitem acesso
às funções. O conceito em geral por trás desses programas é o de componentes,
no caso chamados de componentes ActiveX.

O que eu preciso para saber VBA?


Antes de mais nada você precisa saber programar em Visual Basic. Conhecer
BASIC poderá ajudá-lo. Se não souber nenhuma delas os conhecimentos de
outra linguagem como PASCAL ou C serão úteis por que as linguagens mais
39
comuns são muito parecidas. Se não souber nenhuma você pode começar a
aprender com um livro de Visual Basic ou mesmo através da ajuda do Office.

⌦ Use o comado de gravação de macros do seu software e depois veja o


código gerado pelo gravador de macros.

Além de saber programar você precisa ter um conhecimento pelo menos básico
dos elementos que compõem os objetos do seu programa e como eles estão
relacionados. Por exemplo:

(a) Documentos do Word são divididos em parágrafos


(b) Planilhas do Excel são divididos em células
(c) Os objetos do AutoCAD estão agrupados no Paper Space e no Model
Space. Por sua vez o Model Space possui camadas (layers) que agrupam as
entidades do desenho

Mas tudo não são flores. Os objetos que você utiliza no VBA para acessar os
métodos e as propriedades podem não corresponder exatamente ao que você vê
externamente. Só há uma alternativa para entender os objetos do seu programa:
livros, manuais e dicas. Além, é claro, de várias horas de trabalho.

O que é ActiveX e como ele permite que se controle um


programa?
ActiveX é uma marca registrada da Microsoft Corp. e que por mais que eles
neguem é uma evolução da antiga tecnologia OLE (Object Linking and
Embedding). A idéia é agrupar todos os dados e funções de manipulação em um
mesmo local o objeto. Como assim? As planilhas do Excel, os Documentos do
Word, os modelos do Arena são considerados objetos. Esses objetos têm
propriedades como o autor, data de criação, número de palavras etc. Possuem
também métodos (ou funções) para modificar o seu conteúdo. Por exemplo,
uma planilha do Excel tem um método chamado SELECT que permite que
você selecione células na planilha. Além disso, os objetos (ActiveX) podem
também conter outros objetos, inclusive de outros programas. Por exemplo,
quando você cola uma planilha do Excel no Word você está embutindo um
objeto-documento do Excel dentro de um objeto/documento do Word. Outro
exemplo: um objeto/documento do Word contém outros objetos: os parágrafos,
que contêm as palavras. Os objetos ActiveX seguem o paradigma COM que
estabelece como os objetos devem ser construídos, quais interfaces de troca de
dados devem ser implementadas etc.
40
Qual a diferença entre método e propriedade?
Propriedades ou atributos são características de um objeto que o usuário pode
modificar e/ou consultar. Por exemplo, uma apresentação do PowerPoint tem as
suas configurações de páginas. Os métodos são funções/comandos que
permitem que você consulte/modifique essas propriedades ou os objetos. Por
exemplo, no AutoCAD existe um objeto chamado ModelSpace onde são
criadas todas as entidades(objetos) de desenho. Entre as propriedades do
ModelSpace está ORIGIN que guarda a origem do sistemas de coordenadas do
desenho. Entre os métodos estão ADDLINE, ADDCIRCLE etc. Em vez do
usuário, através dos menus, invocar o comando que irá criar as entidades de
desenho ele o faz escrevendo um comando e passando os parâmetros
adequados. Para criar uma linha por exemplo, teríamos que escrever:

ThisDrawing. ModelSpace. AddLine (PtInicial, PtFinal)

Objeto que Objeto que Método que Parâmetros


representa é a coleção diz para necessários para
o desenho de adicionar a definção da
que está entidades uma linha à nova entidade,
sendo do desenho coleção de no caso dois
editado no (linhas, entidades pontos
momento arcos, etc) do desenho

Além dos métodos que alteram as propriedades do objeto, pode-se ter também
métodos genéricos e utilitários. Por exemplo, no VBA do AutoCAD existe um
objeto UTILITY com várias funções para fazer cálculos, emitir mensagens etc.

Como eu crio uma tela de entrada de dados?


As telas de entrada nada mais são que formulários iguais às janelas do windows
que o próprio usuário deve criar.

Para criar um formulário que possa receber dados de um usuário você deve:
1. Criar o formulário com os campos para a entrada de dados, tendo o cuidado
de escolher nomes especiais para cada componente. É através desses nomes
que você poderá consultar o que foi digitado pelo usuário
2. Escrever o código para exibir o formulário que você criou anteriormente,
coletar os dados digitados pelo usuário e processá-los, responder ao usuário,
fechar o formulário etc.
41
Como eu saberei que o usuário digitou os dados
corretamente?
Através das propriedades dos objetos que compõem o seu formulário. Por
exemplo, uma caixa de texto possui uma propriedade chamada TEXT que
quando consultada retorna o que foi digitada nela.
Através dos métodos você pode alterar as características dos controles/objetos
que compõem o seu formulário. Por exemplo, você pode fazer com que os
campos do formulário sejam apagados no momento em que o formulário
aparecer para facilitar a digitação do usuário.
Através dos eventos você pode saber quais campos foram alterados, se foi
apertado um botão etc.

Eventos? O que são eventos?


Eventos são notificações enviadas pelos objetos para que você possa responder
aos acontecimentos da interface com o usuário. Por exemplo, um botão possui o
evento CLICK. Isso quer dizer que quando o usuário pressionar o botão com o
mouse ou com uma das teclas a notificação será enviada. Cabe a você escrever
um código que responda à ação do usuário, isto é, aos eventos disparados. Por
exemplo, exibir uma caixa de mensagem avisando que os dados estão
incompletos.

Cada objeto tem o seu conjunto específico de eventos, tal como acontece com
as propriedades e os métodos. Alguns são característicos:

Objeto Evento Quando é disparado


Botão Click Usuário acionou o botão
Barras de Change O usuário rolou a barra e mudou (change) a sua
rolagem posição
Formulário Resize O usuário alterou o tamanho do formulário

Resumo
O objetivo desta introdução foi que você tivesse uma idéia geral do VBA. Não
se preocupe com os detalhes pois eles serão explicados no momento certo.
Deste primeiro capítulo o mais importante é que você entenda a diferença entre
propriedades, métodos e eventos de um objeto, qualquer que seja o objeto.
42

Objetivo
O objetivo deste capítulo é ensinar os conceitos mínimos necessários para que
você possa escrever os códigos em VBA. Leia com calma e não tenha pressa.

Programas
Um programa é um conjunto de decisões e ações lógicas implementadas em
uma certa linguagem que depois serão convertidas em uma forma que um
computador possa entender. Você escreve um programa para que o computador
faça mais rápido e, talvez, com menos erros uma série de decisões e ações
repetitivas.

No nosso caso, estaremos escrevendo programas que rodam dentro dos


aplicativos e não independentemente como outros programas. Os programas
que escrevermos serão interpretados pela máquina VBA desses aplicativos.

Para compor os programas temos basicamente três tipos de elementos:


(a) elementos que fazem atribuições, por exemplo, “colocar o valor 10 na
variável y”
(b) elementos de repetição, por exemplo, “imprima o valor 10 vezes” ou
“percorra uma lista”
(c) elementos de decisão, por exemplo, “se o número for maior que cem ...”

Variáveis e atribuição
A todo instante em um programa temos que guardar valores. Em geral esses
valores são guardados em variáveis. Uma variável é um espaço na memória do
computador que aceita um valor de um determinado tipo numérico ou
alfanumérico. Por exemplo, em um determinado momento do nosso programa
precisamos guardar um valor que o usuário digitou para fazermos um cálculo,
suponhamos a quantidade a ser produzida de peças no período. Também
poderíamos definir uma variável para o tempo de recozimento da peça em
questão. Para isso faríamos:

Dim QtdeDoPeriodo as Integer


Dim TempoDeRecozimento as Single
43
Isso quer dizer que definimos uma variável chamada QtdeDoPeríodo que é do
tipo inteiro. Já TempoDeRecozimento foi definido como um número decimal de
precisão simples. A primeira recebe valores como 1, 20 e 100. A segunda,
valores como 12.7, 28.3 etc.

Arrays
Quando queremos reservar várias posições na memória do computador, uma do
lado da outra, criamos o que chamamos de array ou vetor. Todas as posições
responderão pelo mesmo nome, no entanto cada uma terá um índice seqüencial
equivalente a um endereço. É como se todas as variáveis morassem no mesmo
prédio, onde cada uma tem o seu número. Por exemplo, imagine que tenhamos
uma QtdeDoPeriodo variando de dia para dia em uma semana. Precisaríamos
de 7 variáveis para guardar esses valores. Se tivéssemos que dar um nome
diferente para cada isso daria um trabalho desnecessário. Além disso, arrays
são muito úteis quando estivermos trabalhando com repetições. Bom, voltando
ao nosso exemplo, teríamos então:

Dim QtdeDoPeríodo(1 to 7) as integer

Ou seja, dimensionamos uma variável chamada QtdeDoPeríodo que tem 7


posições do tipo inteiro. Para acessar cada uma delas usamos o nome e o índice,
ou seja, QtdeDoPeríodo(1), QtdeDoPeríodo(5), QtdeDoPeríodo(3) etc.

Atribuição
Atribuir um valor a uma variável é colocar um valor do mesmo tipo da variável
na memória do computador, para posterior consulta ou alteração. Em VB/VBA
para que uma variável receba um valor fazemos assim:

QtdeDoPeriodo = 100

TempoDeRecozimento = 3.6756

x = QtdeDoPeriodo + TempoDeRecozimento

Se a nossa variável fosse um array, faríamos algo como:

QtdeDoPeríodo(1) = 10

Para o caso especial dos objetos temos que usar a palavra-chave set:

set minhaVariavelDeObjeto = ObjetoX


44
Repetição
Como em geral os computadores têm que fazer várias tarefas iguais inúmeras
vezes, eles têm que possuir mecanismos de repetição. A forma como essas
repetições são ordenadas para o computador variam entre cada uma das
linguagens de programação. Em VB existem várias: o For, o While e o
Do..Loop. Todas elas têm que ter uma condição de parada porque, senão, o
nosso programa ao chegar a uma delas repetiria os comandos ad infinitum. As
diferenças entre elas está no tipo da condição de parada e onde ela é testada.

For
O For usa como teste de parada uma variável chamada contador, que ao atingir
o valor máximo ou mínimo, pára. Por exemplo, suponhamos que temos que
executar vários comandos por 10 iterações (10 vezes):

For i=1 to 10
...
next i

Isso quer dizer que a variável i (que é o contador presente na condição de


parada) varia de 1 até 10. Observe que o teste é feito no início do bloco de
código e que se não for verdadeiro, nenhum dos comandos será executado.

While
O While é muito parecido com o For. A verificação da condição de parada é
feita logo no início, mas em vez de contagem aceita condições lógicas (que são
avaliadas como verdadeiro ou falso). Por exemplo, suponhamos que se deseja
executar um conjunto de instruções enquanto um número for menor que 100.
Teríamos

numero = 0
while (numero < 100)
....
wend

Podemos testar condições lógicas mais complexas. Por exemplo, enquanto o


numero for menor que 100 e QtdeProduzida for menor que 2000:

while ((numero < 100) and (QtdeProduzida < 2000))


...
wend
45

Objetivo
Apresentar a estrutura do VBA do Arena e como acessar os objetos e os
métodos. Para isso o conhecimento sobre o software Arena e seus modelos é
importante.

Arena Object Model


O Arena expõe os objetos, métodos e propriedades através do Arena Object
Model. Esse modelo permite que você manipule objetos do Arena através do
VBA e também de programas externos criados com o Visual Basic, por
exemplo.

No Arena Object Model estão definidos objetos que permitem que se manipule
tanto o programa como o modelo de simulação e até seus componentes. Por
exemplo, para controlar algumas características do programa Arena existe um
objeto chamado Application, para controlar o modelo existe o objeto Model e
para controlar as variáveis, atributos etc. existe o objeto SIMAN.

O projeto em VBA
Cada modelo do Arena possui um projeto de VBA associado a ele, sendo que o
código é armazenado internamente ao arquivo .doe. Cada projeto em VBA do
Arena é composto por elementos do VBA como um todo e os objetos do Arena
Object Model:

• A conexão entre os objetos do Arena Object Model com o VBA se dá


através de um objeto chamado ThisDocument. Assim, se queremos
acessar o modelo do Arena via VBA usaremos a sintaxe:
ThisDocument.Model. Para acessar o aplicativo Arena usamos
ThisDocument.Application. Além desse tipo, pode-se associar código
aos modelos do Arena através do bloco VBA do painel Blocks do Arena.
• Formulários definidos pelo usuário para exibir mensagens, coletar dados,
etc.
• Módulos, que servem para colocação de funções e procedimentos, assim
como para declarar variáveis globais do VBA
46
• Módulos de classes que permitem que se desenvolvam módulos que se
assemelham com objetos (apesar de não caracterizarem realmente os
princípios da POO)

Para acessar o editor do Visual Basic, clique no ícone mostrado ao lado ou


pressione ALT+F11.
47
O Bloco VBA
A outra forma de associar códigos escritos em VBA com modelos do Arena é
Através o bloco (módulo) VBA do painel Blocks do Arena. A cada bloco VBA
inserido no modelo do Arena é criada uma referência a esse bloco no projeto
VBA do Arena.

Eventos
Tanto os blocos VBA quanto o código escrito no projeto do VBA são
disparados quando ocorrem eventos no modelo.

Um bloco VBA, chamado VBA 1, é disparado quando uma entidade passa por
ele. Nesse momento é disparado o evento VBA_1_Block_fire. Isso quer dizer
que quando uma entidade passa pelo bloco VBA_1 será executado o
procedimento VBA_1_fire. Esse procedimento foi definido quando o usuário
colocou o bloco VBA no modelo. Se o usuário adicionar seu próprio código a
essa função, ele será executado toda vez que uma entidade passar pelo bloco.

Além do bloco VBA outra fonte de eventos do Arena Object Model é o objeto
Model do Objeto ThisDocument. Esse objeto gera vários eventos associados ao
modelo como Document Open, Document Close, RunBegin, RunEnd,
RunBeginSimulation, RunEndSimulation etc.

Nosso primeiro código em VBA


1. Crie um modelo novo no Arena
2. Inicie o editor VBA do Arena pressionando ALT+F11
3. Clique duas vezes sobre ThisDocument no Project Explorer

4. Na janela do Code Browser selecione Model Logic e na lista suspensa ao


lado escolha o evento DocumentOpen.

Observe que será criado o seguinte código automaticamente:


48

Private Sub ModelLogic_DocumentOpen()


End Sub

Este é o protótipo para o evento DocumentOpen do objeto Model do Arena


Object Model. O código que inserirmos dentro desta função é que será
executado quando o modelo do Arena for aberto para edição. No nosso caso
queremos que o usuário ao abrir o modelo receba uma mensagem.

5. Altere o protótipo da função do evento e deixe-a assim:

Private sub ModelLogic_DocumentOpen()


‘Exibe uma mensagem quando o modelo é aberto
msgbox “Este modelo contém macros em VBA”
End Sub

6. Salve o modelo e o feche.

7. Abra o modelo novamente. Ao fazer isso será exibida uma caixa de


mensagem com a frase “Este modelo contém macros em VBA”

ThisDocument
ThisDocument é um objeto que dá acesso ao documento corrente do Arena. O
único objeto exposto por ThisDocument é o modelo propriamente dito,
ThisDocument acessado através de ThisDocument.Model. Há ainda a propriedade
ThisDocument.Name.
Model

Model
Model expõe vários métodos para configurar o modelo como unidades e
opções. Model também expõe uma série de objetos para editar os elementos da
interface como módulos e elementos da animação. Além disso, expõe o objeto
49
SIMAN, criado quando a simulação começa a rodar e que expões todos os
elementos do modelo de simulação como variáveis, contadores, entidades, etc.

Veja a seguir uma lista dos métodos expostos por Model.

Activate Go Show
BreakOnTime ImportModel ShowReport
Check IncreaseSpeed StartOver
Close Pause Step
DecreaseSpeed Print ViewResults
End PrintOut ViewSIMAN
ExportModules Save WriteSIMAN
FastForward SaveAs

Veja agora uma lista das propriedades expostas por Model:

ActiveView Modules Saved


AnalistName Names Segments
Application NamedViews SeizeAreas
BaseTimeUnits NetworkLinks Shapes
BatchMode NumberOfReplications SIMAN
Connections Parent States
ContainingSubmodels ParkingAreas Stations
ConveyorStatistics Path StatusClocks
CostingStatistics PauseBetweenReplications StatusDates
DefaultReport ProcessStatistics StatusHistograms
DisableReportDatabase ProjectTitle StatusLevels
DisplayDefaultReport Queues StatusPlots
Distances QueueStatistics StatusVariables
Embeddeds QuietMode StorageAreas
EntityPictures ReplicationLength Submodels
EntityStatistics FullName ReplicationLenghtTimeUnits TerminatingCondition
GlobalPictures ResourcePictures TransporterPictures
HoursPerDay ResourceStatistics TransporterStatistics
InitializaStatisticsBetweenReplications Routes WarmupPeriod
InitializeSystemBetweenReplications RunInFullScreenMode WarmupPeriodTimeUnits
Intersections RunSpeed

Mudando o valor de uma variável com o modelo rodando


Nesse exercício vamos usar uma variável e código em VBA para criar algo
parecido com um contador. Para isso, crie um modelo no Arena com um
módulo CREATE, DELAY, VBA e DISPOSE como mostrado na figura
abaixo:
50

CREATE e DISPOSE estão no template Basic Process, DELAY está no


Advanced Process e VBA está no template BLOCKS. Use uma chegada
exponencial com média de 1 minuto e um delay de 1 minuto. Na Chegada,
limite o número de entidades criadas (Max Arrival) para 10.

Agora, vá para a planilha Variable e crie uma variável chamada


NumeroDePecas_V

Para vermos a alteração de valores no nosso contador, crie um elemento de


animação como o mostrado na figura dos módulos.

Muito bem, agora temos o nosso modelo pronto para receber o código em
VBA.

1. Para começarmos, vamos iniciar o editor do VBA pressionando as teclas


ALT+F11.
2. No Project Explorer, clique duas vezes sobre ThisDocument
3. Na janela de código que irá surgir selecione na lista de objetos,
VBA_BLOCK_1. Para cada bloco VBA que você coloca no modelo é
criado um objeto no VBA com um nome que contém o cookie do módulo
inserido. Se inserirmos um módulo VBA cujo cookie tenha valor 3 será
criado o objeto VBA_Block_3

4. Feito isso, na janela de código será criada a subrotina responsável por tratar
o evento Fire do bloco VBA em questão. Toda vez que uma entidade passar
pelo bloco essa função será executada.

5. Dentro da subrotina escreva o código que irá atualizar a variável que nós
criamos anteriormente NumeroDePecas_V. Nossa primeira tarefa é criar
51
variáveis para podermos ter acesso aos dois objetos mais importantes do
Arena Object Model, o objeto Model e o objeto SIMAN. Essas variáveis
serão chamadas de modl e sim, respectivamente. Elas devem, portanto
receberem os objetos assim:

set modl = thisDocument.model


set sim = modl.SIMAN

Observe que acessamos o objeto SIMAN já usando a nossa variável mod.

6. As variáveis do objeto SIMAN são acessadas através da coleção


VariableArrayValue. Para isso temos que fornecer o número do símbolo
NumeroDePecas_V.

⌦Conceito do Arena
O Arena possui internamente uma tabela com os nomes que você digita no
modelo, como por exemplo os nomes das estações, nomes de variáveis,
expressões etc. Cada elemento da tabela (chamado de símbolo (symbol))
recebe um identificador único, um número inteiro. Vários métodos do VBA
do Arena assim como no próprio Arena usam esses símbolos para permitir
acesso aos elementos do modelo.

No Arena para obter o número de um símbolo é usada a expressão do


SIMAN NSYM(<nome do elemento>), por exemplo NSYM(Chegada de
Pecas).

No Arena VBA o método do objeto SIMAN chamado SymbolNumber


cumpre a mesma função da variável NSYM do Arena.

Vamos guardar o número do símbolo NumeroDePecas_V em uma variável


chamada NdoSimb. Para isso, digite:

NdoSimb = sim.SymbolNumber(“NumeroDePecas_V”)

7. Bom, para incrementarmos a nossa variável que faz as vezes de um


contador temos que escrever como “variável recebe variável mais um”.
Portanto, respire fundo e tente entender a linha abaixo, que deve ser inserida
logo depois das três primeiras:

sim.VariableArrayValue(NDoSimb) = sim.VariableArrayValue(NDoSimb) + 1
52

A nossa sub-rotina para tratar o evento Fire do bloco VBA 1 ficará assim:

Public Sub VBA_Block_1_Fire()

Set modl = ThisDocument.Model


Set sim = modl.SIMAN

NDoSimb = sim.SymbolNumber("NumeroDePecas_V")
sim.VariableArrayValue(NDoSimb) = sim.VariableArrayValue(NDoSimb) + 1

End Sub

8. Alterne para a janela do Arena e rode o modelo. Se tudo der certo, a nossa
variável irá contar quantas entidades passaram pela nossa lógica. No final nosso
“contador” deverá exibir o valor 10.
53
Nosso Primeiro Formulário
Vamos modificar o nosso modelo para que ele exiba um formulário que nos
permita mudar o tempo de processamento toda vez que o usuário parar o modelo
do Arena. Para isso vamos criar uma variável TempoDeProcesso_V.

1. Abra a planilha Variables e crie uma nova variável chamada


TempoDeProcesso_V cujo valor inicial será o do delay atual, 2. Para
colocar o valor inicial, clique com o botão direito sobre a planilha e
selecione Edit via dialog .... Clique no botão Add e adicione o valor 2.
2. Clique duas vezes sobre o módulo Processa e coloque o nome da variável,
TempoDeProcesso_V no campo Delay Time.

Criando o formulário
1. No editor do VBA, selecione o menu Insert Userform. Será exibido um
formulário em branco. Também será exibida uma barra de ferramentas com
controles de formulário chamada Toolbar.

2. Usando os controles, acrescente um Label, uma TextBox e um botão, como


mostrado na figura abaixo:

3. Nosso próximo passo é alterarmos as propriedades dos controles e do


formulário. Para isso usaremos a janela de propriedades do editor do VBA,
mostrada a seguir.
54

Nome da Valor da
propriedad propriedade

Selecione o formulário clicando sobre a área cinza.

4. Altere a propriedade (Name) para frmX. Daqui por diante este será o nome
que usaremos para referenciá-lo no modelo.
5. Selecione o rótulo (label) e mude sua propriedade Caption para Tempo de
Processamento (em min):.
6. Selecione a caixa de texto (text box) e altere seu nome para txtTProc e altere
a propriedade Text para “2”
7. Selecione o botão e mude sua propriedade (Name) para cmdOK e a
propriedade Caption para OK

Editando o evento do botão


A idéia é simples: queremos que quando o usuário clicar no botão o novo tempo
de processamento seja colocado na variável TempoDeProcesso_V.

Clique duas vezes sobre o botão. Será criado o protótipo da função


cmdOK_Click(). Edite o código para que ele fique assim:

Private Sub cmdOK_Click()


Set modl = ThisDocument.Model
Set sim = modl.SIMAN
NDoSimb = sim.SymbolNumber("TempoDeProcesso_V")
sim.VariableArrayValue(NDoSimb) = Val(frmX.txtTProc.Text)
modl.Go
frmX.hide

End Sub

Observe que desta vez atribuímos à variável o valor numérico (retornado pela
função Val()) do que o usuário tiver colocado no texto da caixa de texto txtProc
do formulário frmX.

A linha modl.Go é necessária para que quando o usuário clicar no botão OK do


nosso formulário, além da alteração do valor da variável, o modelo volte a rodar.
O método Go() equivale ao comando Run Go. A linha frmX.Hide
simplesmente oculta o formulário frmX.
55

Exibindo o formulário para que o usuário entre


com os dados
Finalmente, teremos que exibir o formulário quando o usuário interromper a
execução do modelo. Essa interrupção no Arena é feita através do menu
Run Pause, apertando-se a tecla ESC ou clicando sobre o botão Pause da
barra de ferramentas Run Interaction (mostrado ao lado).

Para que o formulário seja exibido toda vez que o usuário interromper a
execução do modelo, temos que escrever uma função que responda ao evento
pausa da simulação.

Para fazer isso, faça o seguinte:

1. No Project Explorer clique duas vezes sobre o item ThisDocument.


2. No Code Explorer selecione o objeto ModelLogic
3. Na lista de eventos selecione o item RunPause
4. Edite o protótipo da função ModelLogic_RunPause para que ela fique assim:

Observe que a única coisa que fizemos aqui foi invocar o método Show() do
objeto Model.

5. Pronto. Basta salvarmos o modelo e mandarmos rodá-lo. Ao pressionarmos


ESC o modelo irá parar. Nesse instante irá surgir a nossa janela. Altere o
valor do processamento e clique em OK. O modelo irá rodar, agora com um
novo valor de processamento.

You might also like