Tema
Seu primeiro modelo
Vamos modelar uma fila com um atendente — um caixa de mercado, um guichê, um servidor web. É o modelo mais simples que ainda ensina tudo: como representar o que espera, o que atende, e quanto cada coisa demora.
Ao final você vai ter quatro números sobre o sistema, e vai saber conferir se estão certos.
O sistema
Clientes chegam de tempos em tempos. Se o atendente estiver livre, são atendidos na hora; se não, esperam na fila. O atendimento leva um tempo, e ao terminar o atendente fica livre para o próximo.
Três perguntas que queremos responder:
- Quantos clientes ficam esperando, em média?
- Quanto o atendente trabalha, em porcentagem do tempo?
- Quantos clientes o sistema conclui por minuto?
As peças
Um modelo tem lugares (círculos), que guardam fichas, e transições (retângulos), que movem fichas de um lugar para outro. Aqui, cada ficha é um cliente.
| Lugar | O que representa |
|---|---|
Fila | clientes esperando |
Atendente | o atendente, quando está livre |
EmAtendimento | o cliente que está sendo atendido agora |
| Transição | O que faz | Tempo |
|---|---|---|
Chegada | cria um cliente novo na Fila | 10 min entre chegadas, em média |
Inicio | tira um cliente da fila e ocupa o atendente | instantânea |
Fim | conclui o atendimento e libera o atendente | 5 min, em média |
Repare em duas coisas.
Chegada não tem entrada. Ela só produz. É assim que se representa algo que vem de fora do sistema.
Inicio é instantânea. Pegar o próximo da fila não demora — o que demora é atender, e isso está no Fim. Separar as duas coisas é o que permite medir a ocupação do atendente: enquanto a ficha está em EmAtendimento, ele está ocupado.
Montando o modelo
Você tem dois caminhos. Importar o modelo pronto leva um minuto e deixa você direto na parte de rodar e interpretar — é o que sugerimos na primeira vez. Desenhar do zero ensina a mexer no editor, e as páginas de Modelar cobrem isso peça por peça.
Caminho rápido: importar
- Na tela inicial, clique em Novo Projeto e dê um nome (por exemplo,
Fila com um atendente). - No editor, abra o menu Arquivo → Importar (Local).
- Baixe o modelo de exemplo e escolha o arquivo
fila.jsonsalvo na sua máquina.
O conteúdo do arquivo é este:
json
{
"modelName": "Fila com um atendente",
"timeUnit": "min",
"definitions": [
{ "name": "TEMPO_ENTRE_CHEGADAS", "type": "DOUBLE", "value": "10" },
{ "name": "TEMPO_DE_ATENDIMENTO", "type": "DOUBLE", "value": "5" },
{ "name": "ATENDENTES", "type": "INTEGER", "value": "1" }
],
"places": [
{ "name": "Fila", "initialMarking": 0, "stringMarking": "0", "initialStringMarking": "0" },
{ "name": "Atendente", "initialMarking": 1, "stringMarking": "ATENDENTES", "initialStringMarking": "ATENDENTES" },
{ "name": "EmAtendimento", "initialMarking": 0, "stringMarking": "0", "initialStringMarking": "0" }
],
"rewardMeasures": [
{ "name": "fila_media", "expression": "E{#Fila}" },
{ "name": "ocupacao_pct", "expression": "(E{#EmAtendimento} / ATENDENTES) * 100" },
{ "name": "vazao", "expression": "E{#EmAtendimento} / TEMPO_DE_ATENDIMENTO" },
{ "name": "no_sistema", "expression": "E{#Fila} + E{#EmAtendimento}" }
],
"transitions": [
{ "name": "Chegada", "type": "TIMED", "firingPolicy": "SINGLE_SERVER",
"raceType": "RACE_WITH_ENABLING_MEMORY", "priority": 1,
"distribution": { "type": "exponential", "parameters": { "Mean delay": "TEMPO_ENTRE_CHEGADAS" } },
"inputArcs": [],
"outputArcs": [{ "type": "OUTPUT", "place": "Fila", "multiplicity": 1 }],
"inhibitorArcs": [] },
{ "name": "Inicio", "type": "IMMEDIATE", "firingPolicy": "SINGLE_SERVER",
"raceType": "RACE_WITH_ENABLING_MEMORY", "priority": 1, "weight": 1,
"inputArcs": [{ "type": "INPUT", "place": "Fila", "multiplicity": 1 },
{ "type": "INPUT", "place": "Atendente", "multiplicity": 1 }],
"outputArcs": [{ "type": "OUTPUT", "place": "EmAtendimento", "multiplicity": 1 }],
"inhibitorArcs": [] },
{ "name": "Fim", "type": "TIMED", "firingPolicy": "INFINITY_SERVER",
"raceType": "RACE_WITH_ENABLING_MEMORY", "priority": 1,
"distribution": { "type": "exponential", "parameters": { "Mean delay": "TEMPO_DE_ATENDIMENTO" } },
"inputArcs": [{ "type": "INPUT", "place": "EmAtendimento", "multiplicity": 1 }],
"outputArcs": [{ "type": "OUTPUT", "place": "Atendente", "multiplicity": 1 }],
"inhibitorArcs": [] }
]
}Os elementos aparecem no quadro, e o painel da direita já mostra os três parâmetros e as quatro métricas do modelo:

O desenho não vem no arquivo
Este JSON descreve a rede, não o desenho — ele não tem posições. Ao importar, a ferramenta distribui os elementos da esquerda para a direita seguindo os arcos. Arraste o que quiser reposicionar; a posição é salva junto do projeto.
Caminho longo: desenhar
Na barra de ferramentas à esquerda, escolha Lugar e clique no quadro para criar Fila, Atendente e EmAtendimento. Depois escolha Trans. Exponencial para Chegada e Fim, e Trans. Imediata para Inicio. Com a ferramenta Arco, clique na origem e depois no destino para ligar cada par, seguindo as tabelas acima.
Clicando num elemento, o painel da direita mostra as propriedades dele — é ali que se dá o nome e o tempo. Os parâmetros e as métricas se declaram nas seções Parâmetros e Métricas do mesmo painel, cada uma com o botão +.
Os números aparecem por parâmetro
Repare que os tempos não estão escritos direto nas transições — estão em parâmetros: TEMPO_ENTRE_CHEGADAS, TEMPO_DE_ATENDIMENTO e ATENDENTES.
Vale sempre fazer assim. Com o número num parâmetro, você muda num lugar só, e depois consegue pedir à ferramenta que varie aquele valor automaticamente para comparar cenários.
As métricas
Quatro perguntas viraram quatro métricas:
| Métrica | Expressão | Responde |
|---|---|---|
fila_media | E{#Fila} | quantos esperam, em média |
ocupacao_pct | (E{#EmAtendimento} / ATENDENTES) * 100 | quanto o atendente trabalha |
vazao | E{#EmAtendimento} / TEMPO_DE_ATENDIMENTO | clientes concluídos por minuto |
no_sistema | E{#Fila} + E{#EmAtendimento} | quantos estão no sistema, esperando ou sendo atendidos |
E{ } quer dizer "a média de". A página Médias e probabilidades explica em detalhe.
Elas ficam na seção Métricas do painel da direita — se você importou o modelo, já estão lá:

Executando
Clique em Simular, no rodapé do painel da direita. Abre a configuração da execução:

Dois campos importam agora:
- Tipo de Execução: escolha Simulação Estacionária — é a que responde "como o sistema se comporta em regime normal".
- Tempo de Simulação: troque para
500000. Isso dá margem confortável para os números assentarem.
O resto pode ficar no padrão. Clique em Simular no rodapé do modal e espere — leva alguns segundos.
Terminado, clique em Analisar para ver os resultados. A aba Resultados traz o gráfico e, abaixo dele, os valores finais de cada métrica:

Conferindo o resultado
Esta é a melhor parte de começar por um modelo simples: dá para saber a resposta antes de rodar.
O atendimento leva 5 minutos e chega um cliente a cada 10. Ou seja, o atendente tem trabalho para metade do tempo:
| Métrica | O que a teoria diz | O que a ferramenta dá |
|---|---|---|
ocupacao_pct | 50% | 50,01 |
vazao | 0,1 cliente por minuto | 0,1000 |
fila_media | 0,5 cliente | 0,5011 |
no_sistema | 1,0 cliente | 1,0012 |
Por que 0,5 na fila se o atendente só trabalha metade do tempo?
Porque as chegadas não são regulares. Às vezes dois clientes chegam quase juntos e o segundo espera, mesmo que na média sobre folga. É exatamente esse efeito que um modelo estocástico captura e uma conta de média simples não captura.
Experimente mudar
Volte ao editor (botão Voltar, no topo), mexa num parâmetro de cada vez na seção Parâmetros e rode de novo:
| Mudança | Ocupação | Fila média |
|---|---|---|
| nada (referência) | 50,0% | 0,50 |
TEMPO_DE_ATENDIMENTO para 9 | 90,1% | 8,12 |
ATENDENTES para 2 | 25,0% | 0,03 |
Dobrar o tempo de atendimento multiplicou a fila por 16. Sistemas perto da saturação degradam muito rápido, e nada proporcionalmente — é o principal motivo para modelar em vez de estimar de cabeça.
Já dois atendentes praticamente eliminam a espera. Repare que a transição Fim precisa estar configurada para atender vários em paralelo, senão o segundo atendente não muda nada — é um engano comum, e a página Quantos em paralelo explica.
O caso em que não existe resposta
Coloque TEMPO_ENTRE_CHEGADAS em 5. Agora chega um cliente a cada 5 minutos e cada atendimento leva 5: a demanda iguala a capacidade.
Rode duas vezes, mudando o Tempo de Simulação na configuração da execução (o botão Simular, ou a engrenagem no topo da tela de análise):
| Tempo de simulação | Fila média |
|---|---|
| 20.000 | 45,6 |
| 80.000 | 91,4 |
O número dobrou quando o tempo dobrou. Isso não é imprecisão da simulação: é o modelo dizendo que não existe equilíbrio. A fila cresce para sempre, e não há valor médio para ela convergir.
Como reconhecer
Se um resultado muda muito ao aumentar o tempo de simulação, desconfie de saturação antes de desconfiar da ferramenta. Rode de novo com o dobro do tempo: se o número acompanhar, o sistema está sobrecarregado.
Próximos passos
- Estacionário ou transiente? — o outro modo de análise, e quando usar
- Comparar cenários — variar um parâmetro automaticamente e comparar as curvas
- Limitando capacidade — filas com tamanho máximo, e o que acontece quando lotam