- Gustavo Nunes
Este projeto tem como objetivo simular um sistema onde clientes podem chegar e ser atendidos por um dos vários servidores disponíveis. Por exemplo, o sistema pode ser um lava-jato onde os carros chegam no sistema, esperam por um tempo na fila até serem atendidos por um dos atendentes.
A simulação é útil para que possamos coletar dados como por exemplo:
- número médio de clientes na fila durante o tempo da simulação
- tempo médio de um cliente no sistema
- tempo médio de um cliente na fila
- tempo médio no qual os servidores demoram para atender o cliente
Os tempos com os quais os clientes chegam no sistema e o tempo que um servidor leva para atender um cliente são definidos de forma aleatória através do arquivo de config (ver detalhes nos itens abaixo).
python3
instalado na máquinapip3
instalado na máquina- pacote tabulate
pip3 install tabulate
- pacote bisect
pip3 install bisect
- pacote matplotlib
pip3 install matplotlib
Para executar a simulação, é necessário adicionar os parâmetros desejados no arquivo config.json
. Os parâmetros possíveis são:
Nome | Descrição | Valores Possíveis |
---|---|---|
tec_type |
Tipo de aleatoriedade usada para gerar o tempo entre as chegadas |
uniform , uniform_int , deterministic , normal , exp , mmc
|
tec |
Parâmetro necessário para gerar o tempo entre as chegadas dependendo do tec_type desejado |
(Ver explicação abaixo) |
ts_type |
Tipo de aleatoriedade usada para gerar o tempo de serviço |
uniform , uniform_int , deterministic , normal , exp , mmc
|
ts |
Parâmetro necessário para gerar o tempo de serviço dependendo do ts_type desejado |
(Ver explicação abaixo) |
clients |
Número de clientes na simulação |
int > 0
|
servers |
Número de servidores |
int > 0
|
max_queue_size (opcional, default = inf) |
Tamanho máximo da fila |
int >= 0
|
Os parâmetros que adicionam aleatoriedade à simulação são os parâmetros TEC (tempo entre chegadas) e TS (tempo de serviço). É possível controlar o tipo da variável aleatória desejada pelos atributos tec_type
e ts_type
, que podem receber um dos possíveis valores abaixo:
Tipo | Descrição |
---|---|
uniform |
Distribuição uniforme em um intervalo |
uniform_int |
Distribuição uniforme de inteiros em um intervalo |
deterministic |
Valor determinístico |
normal |
Distribuição normal |
exp |
Distribuição exponencial |
mmc |
Método de Monte Carlo |
Os campos tec
e ts
armazenam os parâmetros necessários dependendo do tipo (dentre os mencionados acima). Cada tipo exige um formato especial para os parâmetros conforme os exemplos abaixo:
Tipo | Descrição do atributo | Exemplo |
---|---|---|
uniform |
Intervalo de valores possíveis |
|
uniform_int |
Intervalo de valores possíveis |
|
deterministic |
Valor a ser retornado |
|
normal |
Média e desvio padrão da distribuição normal. |
|
exp |
Taxa de chegada (em unidades de tempo). Por exemplo: lambda = 0.5 significa que os clientes chegam em média a cada meia hora (se a unidade de tempo for em horas), portanto chegam 1/0.5 = 2 clientes por hora. |
|
mmc |
Amostra de dados cuja distribuição irá ser aplicada na simulação utilizando o método de monte carlo. |
|
- Criar um novo
notebook
no Google Colab - Copiar os arquivos do projeto para a pasta
arquivos
naaba à esquerda
- Executar o comando
%run main.py
em alguma célula de execução